壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 389|回复: 0

复杂或有趣的MDX问题求解(5)- 测量值的条件格式化

[复制链接]
发表于 2012/3/15 23:30:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
在某些情况下, MDX查询中单一测量值的格式不是唯一的,也就是说测量值在不同的情况下需要设置并显示为不同的数据格式或展示格式。

问题描述
有一个计算成员 [Stat OB Report] 定义如下
Case
        When [DimIntegrate].[DI_AttributeName].CurrentMember
        IS [DimIntegrate].[DI_AttributeName].[Call Lists consumed]
            Then [Measures].[Q Call Lists Consumed]
        When [DimIntegrate].[DI_AttributeName].CurrentMember
        IS [DimIntegrate].[DI_AttributeName].[Reachable]
            Then [Measures].[Reject reasons (%)]
        .........
        ELSE
            0  

        1) [Stat OB Report] 的格式为默认的空
        2) [Measures].[Reject reasons (%)] 也是一个计算成员,格式显示为百分比格式  FORMAT_STRING = "Percent"
        3) [Measures].[Q Call Lists Consumed] 就是一个求个数普通的度量值


存在问题:
      [Measures].[Reject reasons (%)] 不会显示成百分比格式, 而是显示为 [Stat OB Report]的格式, 也就是说计算成员[Stat OB Report]设置成什么格式,[Measures].[Reject reasons (%)] 就显示什么格式,而想要的结果是:
          (因为下面会分很多种条件),根据每个条件调用不同的 度量值或计算成员, 每个计算成员显示自己的实际的格式。

问题来源: CSDN lottery009 (http://hi.csdn.net/lottery009 )

假设
以SSAS2008自带的Adventure Works示例Cube作为测试的数据环境。

解答
在MDX语句中自定义计算成员时,可以为计算成员设置数据格式,是通过FORMAT_STRING属性来设置的。

FORMAT_STRING除了可以直接定义为常见的字符串、数字或日期等的格式串(比如“##,###”)之外,还可以定义为MDX子语句(只要子语句可以计算出合法的格式化串即可)。

所以,上文的问题可以采用如下方式解决:

在 [Stat OB Report] 的定义中,增加Format_String属性定义:

Format_String=

When [DimIntegrate].[DI_AttributeName].CurrentMember
        IS [DimIntegrate].[DI_AttributeName].[Call Lists consumed]
            Then '##,###'
        When [DimIntegrate].[DI_AttributeName].CurrentMember
        IS [DimIntegrate].[DI_AttributeName].[Reachable]
            Then '##,##%'


更多示例
1)在Adventure Works示例中,打算根据销售渠道统计订单数量,因已知互联网渠道的订单特别多,可以将互联网订单数量除以1000,并在其后标注“(千次)”的字样;而普通渠道因订单很少,则不除以1000。

with member [Measures].[订单数量] AS '[Measures].[Order Count]',
     Format_String=Case
                   WHEN [Sales Channel].CurrentMember is [Sales Channel].[Sales Channel].&[Reseller]
                   THEN '##,###'
                   WHEN [Sales Channel].CurrentMember is [Sales Channel].[Sales Channel].&[Internet]
                   THEN "###,.00\(千次)" END
select {[Measures].[订单数量]} on 0,
       {[Sales Channel].[Sales Channel].&[Internet],[Sales Channel].[Sales Channel].&[Reseller]} on 1
       from [Adventure Works]


运行结果如下,图中27.66(千次)的实际值为27659:




进一步要说明的是,MDX中许多属性赋值表达式的右侧都可以是“子MDX语句”,比如,进一步为上述例子根据数据大小区间设置颜色属性:

with member [Measures].[订单数量] AS '[Measures].[Order Count]',
     Format_String=Case
                   WHEN [Sales Channel].CurrentMember is [Sales Channel].[Sales Channel].&[Reseller]
                   THEN '##,###'
                   WHEN [Sales Channel].CurrentMember is [Sales Channel].[Sales Channel].&[Internet]
                   THEN "###,.00\(千次)" END,
     FORE_COLOR=iif( [Measures].[订单数量]>10000,RGB(0,255,0),RGB(255,0,0))
select {[Measures].[订单数量]} on 0,
       {[Sales Channel].[Sales Channel].&[Internet],[Sales Channel].[Sales Channel].&[Reseller]} on 1
       from [Adventure Works]
收藏
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 11:37 , Processed in 0.012701 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表