查询仅在二维中显示匹配元素

Query to only display matching elements in two dimensions

小问题: 知道如何从一个维度条目中提取名称并将其作为过滤器应用于另一个维度吗?

详细说明:我的立方体有制造商和卖家的尺寸,我只需要 "themselves" 的销量。维度是从源中的不同表加载的,但具有名称完全相同的条目。

Manufacturer   Seller
  A              A       *
  A              D
  B              B       *
  C              C       *
  C              A
  C              D

A、B 和 C 自己销售产品,A 和 C 也通过经销商 D 销售。C 也通过 A 销售。我只想过滤标记的行(名称匹配)。

在 SQL 中这很简单,或者可以轻松地增强多维数据集以标记 "own sales",但这两个选项都不可用。我需要查询立方体 "as is".

我试过像这样使用 STRTOMEMBER 和 CURRENTMEMBER(使用 NAME 和 MEMBER_NAME):

STRTOMEMBER("[Dim Seller].[Seller].[" + [Dim Producer].[Producer].CURRENTMEMBER.NAME + "]

这在句法上确实有效,但 CURRENTMEMBER 似乎总是评估 ALL 并为 ALL 元素提供(正确的)度量值,而不是匹配名称的元素。

我还尝试创建一个 WHERE 设置两个名称相等

[Dim Seller].[Seller].CURRENTMEMBER.NAME = [Dim Producer].[Producer].CURRENTMEMBER.NAME

但这非常SQL并且在 MDX 中无效。

整个查询如下所示:

SELECT
    NON EMPTY {
        [Measures].[Value]
    } ON COLUMNS
    , NON EMPTY { (
        {
            [Dim Producer].[Producer].[A]
            , [Dim Producer].[Producer].[B]
            , [Dim Producer].[Producer].[C]
        }
        * [Dim Seller].[Seller].[Seller].ALLMEMBERS
// This line needs to be trimmed to same name as producer
    ) } ON ROWS
FROM
    [Cube]

生产者列表来自配置文件并与查询字符串连接,可能会发生变化。让第二个卖家列表保持同步将是一种负担,而且(当 C 通过 A 销售时)会产生错误的结果。

知道如何从一个维度条目中提取名称并将其应用于另一个维度吗?

使用 GENERATE 功能为您完成这项工作。

with set Producers as
{[Dim Producer].[Producer].[A]
,[Dim Producer].[Producer].[B]
,[Dim Producer].[Producer].[C]}

set Sellers as
[Dim Seller].[Seller].members

//For every producer, get the seller who shares the same name.
set ProducersHavingSameNameAsSellers as
GENERATE(Producers, GENERATE(Sellers, filter
                                                (Sellers, 
                                                    [Dim Seller].[Seller].CURRENTMEMBER.MEMBER_NAME = 
                                                    [Dim Producer].[Producer].CURRENTMEMBER.MEMBER_NAME
                                                )
                            )
        )

SELECT
NON EMPTY [Measures].[Value] ON COLUMNS,
ProducersHavingSameNameAsSellers ON ROWS
FROM [Cube]

HAVING 子句可能对您有帮助:

SELECT
    NON EMPTY {
        [Measures].[Value]
    } ON COLUMNS
    , NON EMPTY { 
        {
              [Dim Producer].[Producer].[A]
            , [Dim Producer].[Producer].[B]
            , [Dim Producer].[Producer].[C]
        }
        * [Dim Seller].[Seller].[Seller].ALLMEMBERS
    } 
HAVING 
    [Dim Seller].[Seller].CURRENTMEMBER.MEMBER_NAME = 
            [Dim Producer].[Producer].CURRENTMEMBER.MEMBER_NAME
ON ROWS
FROM
    [Cube]