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

    有时候需要从集合中取出特定的成员但是又不能执行遍历操作,这个时候就可以使用 GENERATE 函数来解决这个问题。

    根据地区查询每年的销售额 -

    SELECT
    NON EMPTY { [Date].[Calendar].[Calendar Year].MEMBERS * [Measures].[Sales Amount]} ON 0,
    NON EMPTY { [Sales Territory].[Sales Territory Country].MEMBERS } ON 1
    FROM [Adventure Works]

    现在需要查询每年销售额最高的那个月在各个地区的销售情况。

    WITH SET [Best month per year] AS
    Generate(
              [Date].[Calendar].[Calendar Year].MEMBERS,
              TopCount(
                        Descendants( [Date].[Calendar].CurrentMember,
                        [Date].[Calendar].[Month],
                         SELF
                      ),
                      1,
                      [Measures].[Sales Amount]
                     )
    )
    SELECT NON EMPTY {[Best month per year] * [Measures].[Sales Amount] } ON 0,
    NON EMPTY {[Sales Territory].[Sales Territory Country].MEMBERS} ON 1
    FROM [Adventure Works]

    在这个查询中 Generate() 函数就相当于一个 For-each 循环,根据指定的集合去遍历集合中每一个成员,然后根据条件中判断情况抽取符合条件的成员形成一个新的集合。 由于使用了 TOPCOUNT 函数,因此根据参数 1 每一次循环只会返回一个成员,这些成员就最终形成了一个新的集合。

    在 MDX 中实际上没有 FOR 循环的概念。在其它的编程语言中,循环遍历可能要基于数字之类的,但是在 MDX中,这种类似遍历的操作是基于集合的。

    其它 BI 博客系列看参看 - BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)

  • 相关阅读:
    第04组 Alpha冲刺(4/6)
    第04组 Alpha冲刺(3/6)
    第04组 Alpha冲刺(2/6)
    第04组 Alpha冲刺(1/6)
    第04组 团队Git现场编程实战
    第04组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    第04组 Alpha冲刺(6/6)
    第04组 Alpha冲刺(5/6)
  • 原文地址:https://www.cnblogs.com/biwork/p/3454915.html
Copyright © 2011-2022 走看看