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

Excel SSAS多维数据集中的计算不适用于零数据值,excel,ssas,mdx,olap,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 En

我正在使用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;

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

实际上,您有以下几点:

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; 
你应该使用

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;
这将设置度量值
数据值
机密
成员的前景色

如果对于
机密
成员,当前度量值(始终是范围内的
数据值
)的值不为null或0,则代码所做的是设置前景色。将数值表达式作为条件求值时,在MDX中,非0或null的所有内容都将求值为true。如果您在这里使用的是成员,MDX将检查其当前度量值的值。要检查层次结构的当前成员是否是特定成员,请使用
is
,就像我在上面的第二个版本中所做的那样

编辑 由于要求检查当前单元格中是否包含与机密状态“机密”相关的数据,因此无论该维度是否包含在查询中,都可以使用:

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;

这将检查
机密性状态
属性层次结构的
机密性状态
级别的所有成员与当前单元格的数据以及由
机密
成员组成的一个元素集之间的交集是否有一个元素,换句话说,如果该成员包含在该级别的现有成员中。

是否确实发生错误渲染的值为0?或者它们可能为空(即丢失记录)?@FrankPl是的,我甚至尝试将数据从0更改为其他值,然后重新处理多维数据集。当我这样做时,颜色会按预期呈现(即红色)。当我更改回0时,它不再存在。我不确定这是Excel还是Analysis Services问题。您能否从ManagementStudio运行MDX查询,在语句的最后添加
单元格属性值、格式化值、前颜色(毕竟是from和where子句),然后在结果中双击包含零的单元格以查看FORE_COLOR属性值?@FrankPl这肯定是Analysis Services或Excel中可见的问题。当我单击SSMS中的0值时,返回的单元格属性显示FORE_COLOR=(null)。这些值显示为黑色,而不是红色。我还检查了机密状态的值是否为“机密”,这将导致前颜色为255。
数据值
是计算的还是物理的度量?它是否可能在计算脚本的其他地方被覆盖?不,我没有-我有一个表,其中包含一个名为机密状态的字段和一个名为数据值的字段。当机密状态为“机密”时,数据值(即范围)显示为红色。如果机密状态有任何其他值,则数据值不应为红色。出于某种原因,如果数据值为零(非空),则它不会显示为红色。为了进一步澄清,机密性作为退化维度公开,但与数据值位于同一个表中。两种解决方案都有效,但它们取决于活动维度的保密状态,即如果未使用该维度,则数据不会变为红色。我问题中的初始脚本不要求在查询中选择机密状态。@Greg您的具体要求是什么?@FrankPI如果数据的机密状态为“机密”,我需要能够将数据值显示为红色无论包含机密性状态的维度是否实际拖到透视表中。除了零值之外,我在问题中发布的初始代码的行为是这样的。我认为您的解决方案很接近,但我怀疑我可以使用另一个值,而不是“CurrentMember”。对不起,我对MDX还是新手。