Mdx Iif 语句

Posted

技术标签:

【中文标题】Mdx Iif 语句【英文标题】:Mdx Iif statment 【发布时间】:2014-02-03 22:04:13 【问题描述】:

我在评估 Pentaho Analyser 时尝试计算测量值。

要点:需要有条件的度量。我的代码:

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

所以我得到:

饮料 0

食物 14

否则 0

结束它仅在 [Product] 维度出现在行或列上时才有效。

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

IBM 0

MS 0

苹果 0

代替:

IBM 7

MS 2

苹果 5

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

有什么技巧可以让这个 Measure 发挥作用吗?

编辑: 我有 3 个维度:产品、合作伙伴、国家 我需要通过 mdx 公式计算度量: [单位销售额] 当它是 [Product].[Food] 和 [Product].[Drink] 而不是 [Country].[US] 和 [Country].[DE] 而是其他所有内容。

谢谢, 最好的问候

【问题讨论】:

技术上应该是什么时候(产品是食物饮料)和(国家不是美国**或德国)? 是的..有解决办法吗? 我适当地更新了我的答案。 【参考方案1】:

我不是 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 包含在集合中 - 或零元素 - 如果元素不是包含在集合中。

【讨论】:

实际上,我不知道它是如何“在门后”工作的,正如您所说的那样,它是“[产品]。CurrentMember 是产品的所有成员”,但这对我不起作用.你能给我提供另一个解决方案吗?感谢您的帮助! @StevanPopov 你能澄清一下“这对我不起作用”是什么意思吗?使用上述表达式时是否收到错误消息?是否没有错误,但结果与您的预期不同?如果是这样,您到底期望什么,结果与此有何不同? 对不起弗兰克,我真的没有解释我的评论。它返回与我的公式相同的结果 - 零。我的目标是在 ETL 中覆盖 SQL 公式以获得更大的可伸缩性。我的全部问题是如何转换:SELECT ... ... CASE WHEN valueOfDim1 IN (....) AND valueOfDim2 NOT IN (...) THEN sum(myValue) ELSE 0 END ... ...如果我需要问其他问题,请告诉我! @FrankPI 请查看此链接:***.com/questions/21614680/… @StevanPopov 我的印象是我仍然不清楚您的要求是什么。到目前为止我所理解的:您想要定义一个度量 CalcUnitSales,如下所示:如果 Product 用于行或列,则该度量应该只显示与产品 Food 的度量 Unit Sales 相同的值,但为零对于所有其他产品(大概是 Food 的价值以及所有产品的总和)。如果 Product 未用于行或列,也未用于切片器,则度量值应与 Unit Sales 相同。请纠正我理解的任何细节错误。

以上是关于Mdx Iif 语句的主要内容,如果未能解决你的问题,请参考以下文章

使用 IIF 和 SUM 的 MDX

MDX Excel 中的 IIF + 过滤器 + inst 函数

MDX 脚本语句 -- Scope

Access IIF 到 SQL 语句的转换

SQL - 选择语句之外的 IIF 子句?

案例 MDX 中的多个语句