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的原始值和目标值就很容易了
  • 相关阅读:
    005 字符串
    004 变量
    003 python中的内置函数
    002 如何在一台PC上装两个版本的python
    在github上创建新的分支(包括管理分支)
    使用git工具上传自己的程序到github上
    004 Java的一次面试题,学长列举
    为什么分布式一定要有Redis?
    027 ResourceBundle.getBundle方法
    Jenkins下载安装
  • 原文地址:https://www.cnblogs.com/xiongnanbin/p/2984284.html
Copyright © 2011-2022 走看看