Ssas 选择多个时间段时MDX计算度量值的聚合
在我的SSAS多维数据集中,我在MDX中定义了几个度量值,除了跨时间段的一种聚合之外,这些度量值工作得很好。有些人不会聚合(也不是有意聚合),但有人聚合了,但给出了错误的答案。我知道原因,但不知道如何预防 下面Excel屏幕截图中突出显示的总数(该死,不允许包含图像,恢复到旧样式表)是最简单的错误情况。在这个例子中,23621不是5713和6837的总和Ssas 选择多个时间段时MDX计算度量值的聚合,ssas,mdx,Ssas,Mdx,在我的SSAS多维数据集中,我在MDX中定义了几个度量值,除了跨时间段的一种聚合之外,这些度量值工作得很好。有些人不会聚合(也不是有意聚合),但有人聚合了,但给出了错误的答案。我知道原因,但不知道如何预防 下面Excel屏幕截图中突出显示的总数(该死,不允许包含图像,恢复到旧样式表)是最简单的错误情况。在这个例子中,23621不是5713和6837的总和 Active Commitments Acquisitions Net Lost Commitments Gr
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 commissions]=([Measures].[Active commissions],[Date Dimension].[Fiscal Year Hierarchy].currentMember)-([Measures].[Active commissions],[Date Dimension].[Fiscal Year Hierarchy].prevMember)
[Measures].[净损失承诺]=([Measures].[收购]-[Measures].[承诺增长])
CREATE MEMBER CURRENTCUBE.[Measures].[Net Lost Commitments]
AS (iif([Date Dimension].[Fiscal Year Hierarchy].**MultipleMembersSelected**
, null
, [Measures].[Acquisitions] - [Measures].[Growth in Commitments]))
忠告
Matt。我不太理解问题的第一部分,抱歉……但最后我想你会问如何检测MDX中是否使用了来自特定维度的多个成员 您可以将两个轴中的任意一个作为字符串进行检查,并使用该字符串形成真/假测试。请记住,您可以在MDX的Microsoft实现中使用VBA函数 我建议
InStr(1,SetToStr(stroset(“Axis(1)”),“whatever”)=0
作为构建IIF
的第一个参数的方法
这将获取轴1上的成员集,将其转换为字符串,并查看是否存在某个字符串(返回该字符串在另一个字符串中的位置)。零表示找不到(因此返回true)。您可能需要使用轴零,或者可能同时选中这两个选项
要查看是否使用了来自同一维度的多个成员,上面的测试字符串必须更加复杂。您想知道无论什么
发生一次还是两次。您可以测试字符串的第一次出现是否与最后一次出现在同一位置(通过向后搜索);尽管这也可能意味着根本找不到字符串:
IIF(
InStr(1, bigstring, littlestring) = InStrRev(bigstring, littlestring),
'used once',
'used twice or not at all'
)
另一个消息来源的建议为我解决了这个问题。我可以用--
当选择多个成员时,CurrentMember将返回错误 我是在为自己的问题研究一个解决方案时发现这篇文章的,当涉及到过滤器时,随着时间的推移,计算出了大量的度量值。我认为你可以通过使用动态集来修正计算,而不是抑制它们 谢谢马格纳斯。我将在接下来的几天内尝试这个方法,并将我的发现发布到这里。在尝试实施这个建议之后,马格纳斯,我看不出它有效,因为日期维度经常在切片器中,而不是在任何一个轴上。我也许可以编写一个复杂的IIF语句,在轴0或轴1上查找“[Date Dimension]”的多次出现,但我认为“where”子句的内容不能以相同的方式访问。哦,天哪。很抱歉我正要建议您使用InStr()中的.currentMember来检查正在计算的当前元组……但我在上面看到您已经发现了这一点!另一个想法。。。定义度量的MDX在SSAS多维数据集的“计算”脚本中。因此,也许我可以通过SCOPE语句来实现,而不是限制度量定义本身中的聚合。在SCOPE语句中是否有一种方式可以说“只有当上下文是[Date维度]的单个成员时,才会应用此块”?
iif(iserror([Date Dimension].[Fiscal Year Hierarchy].CurrentMember),
, null
, [Measures].[Acquisitions] - [Measures].[Growth in Commitments]))