2014-10-20 74 views
0

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

CALCULATE;  

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

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

END SCOPE; 

当我有0(零)的FORE_COLOR没有按一个[data value]中在Excel中不呈现红色。如果我将数据值更改为零以外的值,并重新处理呈现为红色的多维数据集。有什么我失踪,或者是否有更好的MDX脚本,也可以为零值工作?

+0

你确定发生错误渲染的值真的是0吗?或者它们可能是空的(即缺少记录)? – FrankPl 2014-10-20 17:18:14

+0

@FrankPl是的,我甚至尝试将数据从0更改为其他内容,然后重新处理多维数据集。当我这样做时,颜色呈现为预期(即红色)。当我改回0时,它再也没有了。 – 2014-10-20 20:09:54

+0

我不确定这是Excel还是Analysis Services问题。您可以从Management Studio运行一个MDX查询,您可以在语句的最后(在所有FROM和WHERE子句之后)追加'CELL PROPERTIES VALUE,FORMATTED_VALUE,FORE_COLOR',然后在结果中双击一个包含零到请参阅FORE_COLOR属性值? – FrankPl 2014-10-21 07:45:59

回答

0

有效您具备以下条件:(?...所以不希望0呈现为红色)

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

执行以下操作平均数据0是红色的?:

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

不,我没有 - 我有一个表,其中包含一个称为机密性状态的字段和一个称为数据值的字段。当机密性状态=“机密”时,数据值(即范围)呈现为红色。如果保密状态有任何其他值,则数据值不应为红色。由于某种原因,如果数据值为零(非空),那么它不显示红色。 – 2014-10-20 20:25:48

+0

为了进一步阐明机密性作为退化维而暴露,但与数据值位于同一个表中。 – 2014-10-20 23:59:24

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构件,当前度量的值(其为总是Data value范围内)不为空或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; 

这用来检查与当前小区和由Confidential构件中的所述一个元件组的数据存在Confidentiality Status水平Confidentiality Status属性层次结构的所有成员之间的交叉点具有一个元件,用换句话说,如果该成员包含在现有成员中rs级别。

+0

这两种解决方案都可以工作,但它们依赖于机密性状态是一个活动维度 - 即,如果未使用,则数据不会变为红色。我的问题中的初始脚本不需要在查询中选择保密状态。 – 2014-10-23 23:32:42

+0

@Greg你的要求是什么? – FrankPl 2014-10-24 06:49:36

+0

@FrankPI无论包含机密性状态的维度是否实际拖入数据透视表,我需要能够将数据值显示为红色,如果其机密性状态为“机密”。除了零值之外,我在问题中发布的初始代码的行为方式如此。我认为你的解决方案很接近,但我怀疑还有另一个价值,而不是我可以使用的“CurrentMember”。对不起,我还是新来的MDX。 – 2014-10-24 07:23:24

相关问题