zoukankan      html  css  js  c++  java
  • MDX Cookbook 11

    这一小节主要介绍如何在一个平行期间的度量值,当前值的对比对象是指当前值的上一年,上一个季度或者其它时间级别上与当前值同一时间点上的的那个对象。有一个非常常见的需求就是对比上一年同一个时间点的某个值来判断在现在同期的时候这个值的大小是上升了还是下降了。

    先显示基于月份成员的销售额情况 -

    使用 PARALLELEPRIOD(Level, N, Member) 先把同比值查询出来,Level 指定的是年,1 表示 1年前,Member 就是指当前成员并且表示月。所以整个表达的意思就是查询当前成员1年前的相对应的那个月的 Reseller Sales Amount 的值是多少。

    WITH
    MEMBER [Measures].[Reseller Sales PP]
    AS
    (
       PARALLELPERIOD(
          [Date].[Fiscal].[Fiscal Year],
          1,
          [Date].[Fiscal].CurrentMember
        ),
       [Measures].[Reseller Sales Amount]
    ),FORMAT = "Currency"
    SELECT {
         [Measures].[Reseller Sales Amount],
         [Measures].[Reseller Sales PP]
    } ON 0,
    {[Date].[Fiscal].[Month].MEMBERS} ON 1
    FROM [Adventure Works]

    由于 2005年之前没有数据,因此就没有上一年的对比,但是从 2006年开始就有对应的对象了。

    全部查询出来,包括上一个同期的对象,PP 值以及同比率。

    WITH
    MEMBER [Measures].[Member PP Name]
    AS
        PARALLELPERIOD(
                                   [Date].[Fiscal].[Fiscal Year],
                                   1,
                                   [Date].[Fiscal].CurrentMember
                                 ).NAME
    MEMBER [Measures].[Reseller Sales PP]
    AS
    (
       PARALLELPERIOD(
                                  [Date].[Fiscal].[Fiscal Year],
                                  1,
                                  [Date].[Fiscal].CurrentMember
                                ),
        [Measures].[Reseller Sales Amount]
    ),FORMAT = "Currency"
    MEMBER [Measures].[Reseller Sales YoY%]
    AS
     IIF(
             [Measures].[Reseller Sales PP] = 0,
             NULL,
             [Measures].[Reseller Sales Amount]/[Measures].[Reseller Sales PP]
           )
    ,FORMAT = "PERCENT"
    SELECT {
                     [Measures].[Reseller Sales Amount],
                     [Measures].[Member PP Name],
                     [Measures].[Reseller Sales PP],
                     [Measures].[Reseller Sales YoY%]
    } ON 0,
    {[Date].[Fiscal].[Month].MEMBERS} ON 1
    FROM [Adventure Works]

    查询结果 -

    其实 PARALLELPERIOD() 函数不光可以用在时间层次结构上,同样它也可以用在其它非时间层次结构中,比如这段代码 - [CA]&[US] 这个州成员在国家这个级别上将自己所在国家成员往前移动两个位置下的同等位置的州成员的销售额。

    SELECT {[Measures].[Reseller Sales Amount]} ON 0,
    {
        ParallelPeriod(
                            [Geography].[Geography].[Country],
                            2,
                            [Geography].[Geography].[State-Province].&[CA]&[US]
                            )
    } ON 1
    FROM [Adventure Works]

    先来看国家, United States 的前两个位置的成员是 Germany。

    California 在 US 下的位置 和 Hamburg 在 Germany 下的位置也是一致的。

    关于 PARALLELPERIOD() 函数的使用,我的这篇 MDX 读书笔记中有详细的解释 - MDX Step by Step 读书笔记(九) - Working with Time 处理时间

    更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)

  • 相关阅读:
    Servlet细节
    https协议
    常用css缩写
    Servlet
    计算机编码总结
    java 中 finally 语句块的 深度解析 总结
    使用DIV之后 table何去何从
    http协议
    web开发基础
    js闭包之我见
  • 原文地址:https://www.cnblogs.com/biwork/p/3460499.html
Copyright © 2011-2022 走看看