• 【转载】MDX 去年当月值、差值、同比


      在制作报表的过程中少不了的一项就是KPI(关键绩效指标),实现KPI的方法和工具有很多,我之前使用了微软的SharePoint Server 2010中的其中一个工具PerformancePoint Service,这个工具能够基于多种数据源来制作各种各样的报表,在这里我选择从一个已有的CUBE当中来建立KPI积分卡,我的KPI指标想描述的是当月的销售额与去年这个月的同比情况,用过PPS的朋友都知道时间智能表达式,它可以帮助我们把数据追溯到任何一个时间点或一段时间范围,但是它存在着一个不灵活之处,就是必须要指定一个起始日期,我们只能基于这个起始日期来进行追溯,而不能灵活地选定当前日期再进行追溯。举个例子,我假设设定起始日期为2010年3月,在PPS当中通过时间智能表达式可以获取到任何一个时间点的数据,比如2009年3月,那么就可以写成(Year-1).Month,这样就可以实现我们想要的同比数据,但是这里有一个问题,就是这里面的值已经是定死了的,当我想看2011年3月的同比情况时,这时候也只是和2009年的3月做比较,(Year-1).Month当中的这个Year和Month,是你已经设置好的一个初始日期,也就是2010年和3月,这是必须要设置的,并且没有表达式可用,只能选定一个常量,因此很不灵活,也不适用于计算同比。
      因此引入了下面的介绍,使用MDX来对CUBE进行计算,得出我们真正想要的同比数据。
      首先我们要根据当月的值来计算去年当月的值
    WITH MEMBER Measures.[去年本月销售额] AS
      ([Measures].[NMSRVALUE],[日期].[年度].CurrentMember.PrevMember)
      ,FORMAT_STRING='#,##0.00;-#,##0.00'
    SELECT
    {[Measures].[NMSRVALUE], Measures.[去年本月销售额]} ON 0,
    [日期].[年月].[月份].Members
    ON 1
    FROM [MYCUBE]
    在这里NMSRVALUE是当月的值,去年当月的值因为前12行是第一年的,所以没有再上一年的值可查,结果如下
    本月同比销售差额
    WITH MEMBER Measures.[本月同比销售差额] AS  
      IIF(ISEMPTY(([Measures].[NMSRVALUE],[日期].[年度].CurrentMember.PrevMember)), "",  
       [Measures].[NMSRVALUE]-  
      ([Measures].[NMSRVALUE],[日期].[年度].CurrentMember.PrevMember)  
      ),FORMAT_STRING='#,##0.00;-#,##0.00'  
    SELECT  
    {[Measures].[NMSRVALUE], Measures.[本月同比销售差额]} ON 0,  
    [日期].[年月].[月份].Members  
     ON 1  
    FROM [MYCUBE]
     
    销售额本月同比
    WITH MEMBER Measures.[销售额本月同比] AS  
      IIF(ISEMPTY(([Measures].[NMSRVALUE],[日期].[年度].CurrentMember.PrevMember)), "",  
       ([Measures].[NMSRVALUE]-  
      ([Measures].[NMSRVALUE],[日期].[年度].CurrentMember.PrevMember))/  
      ([Measures].[NMSRVALUE],[日期].[年度].CurrentMember.PrevMember)  
      ),FORMAT_STRING='0.00%'  
    SELECT  
    {[Measures].[NMSRVALUE], Measures.[销售额本月同比]} ON 0,  
    [日期].[年月].[月份].Members  
     ON 1  
    FROM [MYCUBE]
     
    我们有了这些值之后,在各个报表设计工具中设置同比KPI的原始值和目标值就很容易了
  • 相关阅读:
    关于w3wp进程占用过多cpu的问题
    调试事务时的小坑
    PowerDesign中的Reverse Engineering
    对数据访问层的重构(及重构中Perl的应用)
    请教关于在asp.net站点中使用静态变量的问题
    .net面试应知应会(zt)
    关于代码运行效率问题的一个总结和一点疑问
    自己写的一个使用游标的小例子
    怎样才能写出尽可能让编译器找出潜在错误的代码?
    关于连接字符串中IMEX参数的一个问题
  • 原文地址:https://www.cnblogs.com/xiongnanbin/p/2984284.html
Copyright © 2020-2023  润新知