Mdx Iif声明

时间:2014-02-03 22:04:14

标签: mdx pentaho data-warehouse mondrian iif

我正在尝试在评估Pentaho Analyzer时获得计算量。

点:需要有条件的措施。我的代码:

IIf ([Product].CurrentMember Is [Product].[Food], [Unit Sales], 0)

所以我得到了:

饮料0

食物14

其他0

结束只有 才能在行或列上显示维度。

但是当我插入另一个切片器,并删除[Product](例如[Partner])时,我得到:

IBM 0

MS 0

Apple 0

代替:

IBM 7

MS 2

Apple 5

我知道,主要问题是 CurrentMember 属性,并且它始终为零,因为给定维度上有CurrentMember。请不要回答:'过滤它“食物”' 因为我正在努力构建更复杂的东西,这是第一步。

是否有任何技巧可以使这项措施有效?

修改 我有3个维度:产品,合作伙伴,国家 我需要通过mdx公式计算得到的度量: [单位销售]当它是[产品]。[食品]和[产品]。[饮料],它不是[国家]。[美国]和[国家]。[DE],但其他一切。

谢谢, 最诚挚的问候

1 个答案:

答案 0 :(得分:2)

我不是Pentaho / Mondrian的专家,但我认为问题在于,在第二种情况下,[Product].CurrentMember是产品的全部成员,而不是Food成员,因此系统的行为就像你告诉它的那样,并返回0。

从我如何理解你的问题,如

IIf(
    Count(
        Intersect(
            { [Product].CurrentMember },
            { [Product].[Food], [Product].[Drink], [Product].[All] }
        )
    ) = 1
    AND
    Count(
        Intersect(
            { [Country].CurrentMember },
            { [Country].[US], [Country].[DE], [Country].[All] }
        )
    ) = 0
    [Unit Sales],
    0
   )

应该提供你想要的东西。这里的技巧是包含CurrentMember的一元素集与另一个集合之间的交集可以有一个元素 - 如果集合中包含CurrentMember - 或者是零元素 - 以防万一该元素不包含在集合中。