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 语句的主要内容,如果未能解决你的问题,请参考以下文章