在 mdx 中使用 iif 的命名集

Named Set using iif in mdx

我正在尝试使用命名集计算维度属性,但我对 mdx 不是很熟悉。我希望属性包含基于 4 个不同属性值的描述。我尝试使用的是以下代码,但它必须具有无效语法(给出错误)。

create set [pet types]
as

iif([Vw Cube Customer Dim].[Has Pet].&[Yes],
    iif([Vw Cube Customer Dim].[Has Cat].&[Yes],
        iif([Vw Cube Customer Dim].[Has Dog].&[Yes],
            iif([Vw Cube Customer Dim].[Has Other Pet].&[Yes],
                "Multiple Pets","Cat and Dog"),
        "Cat"),
    iif([Vw Cube Customer Dim].[Has Dog].&[Yes] 
        and [Vw Cube Customer Dim].[Has Pet].&[Yes],
        "Dog and other Pet","Dog")),
"No Pet")

不确定多维数据集脚本,因为我不玩那些,但做了一些谷歌搜索得到了以下内容。

请在没有 AND 的情况下进行测试,因为我认为这也会导致错误。

此外,我建议将其更改为 null 而不是 "No Pet",以便度量变得稀疏,因为这是 olap.

的要点之一
CREATE MEMBER CURRENTCUBE.Measures.PetType 
AS 
'
iif([Vw Cube Customer Dim].[Has Pet].CurrentMember IS [Vw Cube Customer Dim].[Has Pet].&[Yes],
    iif([Vw Cube Customer Dim].[Has Cat].CurrentMember IS [Vw Cube Customer Dim].[Has Cat].&[Yes],
        iif([Vw Cube Customer Dim].[Has Dog].CurrentMember IS [Vw Cube Customer Dim].[Has Dog].&[Yes],
            iif([Vw Cube Customer Dim].[Has Other Pet].CurrentMember IS [Vw Cube Customer Dim].[Has Other Pet].&[Yes],
                "Multiple Pets","Cat and Dog"),
        "Cat"),
    iif(([Vw Cube Customer Dim].[Has Dog].CurrentMember IS [Vw Cube Customer Dim].[Has Dog].&[Yes]) 
        AND ([Vw Cube Customer Dim].[Has Pet].CurrentMember IS [Vw Cube Customer Dim].[Has Pet].&[Yes]),
        "Dog and other Pet","Dog")),
"No Pet")
'

为了提高可读性(但会降低可扩展性),我宁愿使用状态矩阵和每个层次结构成员的系数:

然后添加几个成员及其权重:

CREATE MEMBER CURRENTCUBE.[Measures].[Has Pet Value] as
IIF([Vw Cube Customer Dim].[Has Pet].CurrentMember
 IS [Vw Cube Customer Dim].[Has Pet].&[Yes],8,0);

CREATE MEMBER CURRENTCUBE.[Measures].[Has Cat Value] as
IIF([Vw Cube Customer Dim].[Has Cat].CurrentMember
 IS [Vw Cube Customer Dim].[Has Cat].&[Yes],4,0);

CREATE MEMBER CURRENTCUBE.[Measures].[Has Dog Value] as
IIF([Vw Cube Customer Dim].[Has Dog].CurrentMember
 IS [Vw Cube Customer Dim].[Has Dog].&[Yes],2,0);

CREATE MEMBER CURRENTCUBE.[Measures].[Has Other Pet Value] as
IIF([Vw Cube Customer Dim].[Has Other Pet].CurrentMember
 IS [Vw Cube Customer Dim].[Has Other Pet].&[Yes],1,0);

最后两位成员:1) 支持,2) 获得理想结果。

CREATE MEMBER CURRENTCUBE.[Measures].[Pet Types Value] as
([Measures].[Has Pet Value]
+[Measures].[Has Cat Value]
+[Measures].[Has Dog Value]
+[Measures].[Has Other Pet Value]);

CREATE MEMBER CURRENTCUBE.[Measures].[Pet Types] as
case [Measures].[Pet Types Value]
    when 15 then "Multiple Pets"
    when 14 then "Cat and Dog"
    when 13 then "Cat and other Pet"
    when 12 then "Cat"
    when 11 then "Dog and other Pet"
    when 10 then "Dog"
    else "No Pet" end;

添加另一个 dimension/hierarchy 进行分析(假设 [Vw Cube Customer Dim].[Has Bird].&[Yes])可能会导致添加下一个权重的新成员(本例中为 16)并重新计算 [Pet Types Value][Pet Types] .