SQL MDX 计算 KPI(去年当月值、差值、同比)

在制作报表的过程中少不了的一项就是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行是第一年的,所以没有再上一年的值可查,结果如下

SQL MDX 计算 KPI(去年当月值、差值、同比)_第1张图片

本月同比销售差额

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]

 

SQL MDX 计算 KPI(去年当月值、差值、同比)_第2张图片

销售额本月同比

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]

SQL MDX 计算 KPI(去年当月值、差值、同比)_第3张图片

我们有了这些值之后,在各个报表设计工具中设置同比KPI的原始值和目标值就很容易了。

你可能感兴趣的:(sql,String,工具,报表,SharePoint,2010)