在我的SSAS多维数据集中,我在MDX中定义了几个措施,除了在一段时间内的一种聚合外,它们工作正常。有些不聚合(并不意味着),但有人聚合但却给出了错误的答案。我可以看到为什么,但不知道如何防止它。
下面的Excel屏幕截图中突出显示的总数(该死的,不允许包含图片,还原到旧式表格)是出错的最简单的情况。在这个例子中,23,621 不总计5,713和6,837。
Active Commitments Acquisitions Net Lost Commitments Growth in Commitments
2009 88,526 13,185 5,713 7,472
2010 92,125 10,436 6,837 3,599
Total 23,621 23,621
[Measures].[Growth in Commitments] = ([Measures].[Active Commitments],[Date Dimension].[Fiscal Year Hierarchy].currentMember) - ([Measures].[Active Commitments],[Date Dimension].[Fiscal Year Hierarchy].prevMember)
[Measures].[Net Lost Commitments] = ([Measures].[Acquisitions] - [Measures].[Growth in Commitments])
屏幕截图中发生的情况是,净损失承诺总额是根据收购总额(23,621)减去承诺增长总额(无效)计算的。
净损失承诺的汇总是有意义的,适用于非时间维度。但我希望它在选择多个时间段而不是错误值时显示null。请注意,这与仅在时间维度上禁用所有聚合不同。 Net Lost Commitment的汇总在时间层次结构中工作正常 - 屏幕截图显示了2009年和2010年的正确值,如果您扩展到季度或月份,您仍然可以获得正确的值。只有在选择了多个时间段时,聚合才会失败。
所以我的问题是如何更改Net Lost Commitments的定义,以便在选择多个时间段时不会聚合,而是继续在所有其他维度上聚合?例如,有没有一种在MDX中编写的方法:
CREATE MEMBER CURRENTCUBE.[Measures].[Net Lost Commitments]
AS (iif([Date Dimension].[Fiscal Year Hierarchy].**MultipleMembersSelected**
, null
, [Measures].[Acquisitions] - [Measures].[Growth in Commitments]))
ADVthanksANCE,
太
答案 0 :(得分:2)
另一个来源的建议已经为我解决了这个问题。我可以用 -
iif(iserror([Date Dimension].[Fiscal Year Hierarchy].CurrentMember),
, null
, [Measures].[Acquisitions] - [Measures].[Growth in Commitments]))
当选择了多个成员时,CurrentMember将返回错误。
答案 1 :(得分:1)
我对问题的第一部分不太了解,抱歉......但最后我想你问如何检测MDX中是否有多个特定维度的成员在使用。
您可以将两个轴中的任意一个检查为字符串,并使用它来形成真/假测试。请记住,您可以在Microsoft的MDX实现中使用VBA函数。
我建议使用InStr(1, SetToStr(StrToSet("Axis(1)")), "whatever") = 0
来制作IIF
的第一个参数。
这将获取第1轴上的成员集,将其转换为字符串,并查看是否存在某个字符串(它返回该字符串在另一个字符串中的位置)。零表示未找到(因此返回true)。您可能需要使用轴零,或者检查两者。
要查看是否使用了同一维度的多个成员,上面的测试字符串必须更复杂。您想知道whatever
是否出现一次或两次。您可以测试字符串的第一次出现是否与最后一次出现的位置相同(通过向后搜索);虽然这也可能意味着根本找不到字符串:
IIF(
InStr(1, bigstring, littlestring) = InStrRev(bigstring, littlestring),
'used once',
'used twice or not at all'
)
答案 2 :(得分:1)
我在研究自己的问题的解决方案时发现了这篇文章,其中涉及过滤器的计算度量的总计。我认为您可以修复计算而不是使用动态集来抑制它们。 This worked for me