SSAS多维数据集中的计算不适用于零数据值

时间:2014-10-20 01:48:28

标签: excel ssas mdx olap

我正在使用SSAS 2008 R2多维数据集并通过Excel 2010查询数据。在多维数据集中,我有一个计算来有条件地格式化数据。逻辑是如果一个度量包含被查看事实的特定值,那么事实应该用红色表示,如下所示:

CALCULATE;     

SCOPE
(
    [Measures].[Data value]
); 

If([Fact Base].[Confidentiality Status].[Confidential]) Then
    Fore_Color(This) = 255
End If;    

END SCOPE;

当我的[数据值]为0(零)时,fore_color在Excel中不呈现为红色。如果我将数据值更改为零以外的任何值,并重新处理多维数据集,则呈现为红色。有没有我遗漏的东西,或者是否有一个更好的MDX脚本也适用于零值?

2 个答案:

答案 0 :(得分:0)

实际上,您有以下内容:

If([Fact Base].[Confidentiality Status].[Confidential] = 1) Then
    Fore_Color(This) = 255
End If;    

(...所以不希望0呈现为红色?)

以下平均数据0是否为红色?:

If([Fact Base].[Confidentiality Status].[Confidential] = 0) Then
    Fore_Color(This) = 255
End If; 

答案 1 :(得分:0)

你应该使用

SCOPE
(
    [Measures].[Data value], [Fact Base].[Confidentiality Status].[Confidential]
); 

    Fore_Color(This) = 255

END SCOPE;

或者,但效率较低:

SCOPE
(
    [Measures].[Data value]
); 

If([Fact Base].[Confidentiality Status].CurrentMember IS [Fact Base].[Confidentiality Status].[Confidential]) Then
    Fore_Color(This) = 255
End If;    

END SCOPE;

这会设置度量Data valueConfidential成员的前景色。

如果对于Confidential成员,当前度量的值(在SCOPE中始终为Data value)不为null或0,则代码执行的操作是设置前景色。数值表达式作为条件,在MDX中,所有不为0或null的值都被计算为true。如果您在此处使用成员,MDX会检查其当前度量的值。要检查层次结构的当前成员是否是特定成员,请像我在上面的第二个版本中那样使用IS

修改 由于要求检查当前单元格中是否包含与机密性状态相关的数据&#34;机密&#34;,无论查询中是否包含该维度,您都可以使用:< / p>

SCOPE
(
    [Measures].[Data value]
); 

If(Intersect(EXISTING [Fact Base].[Confidentiality Status].[Confidentiality Status].Members,
             {[Fact Base].[Confidentiality Status].[Confidential]}).Count = 1 Then
    Fore_Color(This) = 255
End If;    

END SCOPE;

这将检查Confidentiality Status属性层次结构的Confidentiality Status级别的所有成员与当前单元格的数据和由Confidential组成的一个元素集之间的交集。如果成员包含在关卡的现有成员中,则member有一个元素,换句话说。