我正在使用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
脚本也适用于零值?
答案 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 value
和Confidential
成员的前景色。
如果对于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有一个元素,换句话说。