zoukankan      html  css  js  c++  java
  • 【转载】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的原始值和目标值就很容易了
  • 相关阅读:
    PAT (Advanced Level) Practice 1055 The World's Richest (25 分) (结构体排序)
    PAT (Advanced Level) Practice 1036 Boys vs Girls (25 分)
    PAT (Advanced Level) Practice 1028 List Sorting (25 分) (自定义排序)
    PAT (Advanced Level) Practice 1035 Password (20 分)
    PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) (进制转换,回文数)
    PAT (Advanced Level) Practice 1120 Friend Numbers (20 分) (set)
    从零开始吧
    Python GUI编程(TKinter)(简易计算器)
    PAT 基础编程题目集 6-7 统计某类完全平方数 (20 分)
    PAT (Advanced Level) Practice 1152 Google Recruitment (20 分)
  • 原文地址:https://www.cnblogs.com/xiongnanbin/p/2984284.html
Copyright © 2011-2022 走看看