zoukankan      html  css  js  c++  java
  • MDX Step by Step 读书笔记(六) Building Complex Sets (复杂集合的处理) Combining Sets

    Combining Sets

    不同的集合可以通过一定的方式组成新的集合,常提到的几种联合集合的方式如下图所示:

                           

    • Union 模式 – 两个集合连接在一起形成一个新的集合,这个新集合包含了左右两边集合的内容。
    • Intersection 模式 – 只有内容相同的一部分才能被保留下来形成一个新的集合。
    • Exception 模式 – 第一个集合不在第二个集合的范围,保留下来形成一个新的集合。

    语法 –

    Union ({Set1}, {Set2} [, ALL])

    Intersect ({Set1}, {Set2} [, ALL])

    Exception ({Set1}, {Set2} [, ALL])

    这三个函数都要求作为参数的两个集合必须属于同一个纬度,被函数返回的集合中的元组都是唯一的,相当于在返回的集合上使用了 DISTINCT 一样,除非使用 ALL 来标示不需要DISTINCT。

    通常情况下,Union 和 Exception 使用的频率会多一些,所以MDX 语言为它们提供了一种更简单的表达方式。可以使用 + 和 – 来替代,但是这时就不能使用 ALL 标志了。

    示例一 – 查询2004年零售额最高的10个产品

    SELECT
    {([Measures].[Reseller Sales Amount])} ON COLUMNS,
    TopCount(
    {[Product].[Product].[Product].Members},
    10,
    ([Measures].[Reseller Sales Amount], [Date].[Calendar Year].[CY 2004])
    ) ON ROWS
    FROM [Step-by-Step];

    示例二 – 使用UNION 查询2003年和2004年各自零售额最高的10个产品

    SELECT
    {([Measures].[Reseller Sales Amount])} ON COLUMNS,
    Union(
      TopCount(
        {[Product].[Product].[Product].Members},
        10,
        ([Measures].[Reseller Sales Amount], [Date].[Calendar Year].[CY 2003])
      ),
      TopCount(
        {[Product].[Product].[Product].Members},
        10,
        ([Measures].[Reseller Sales Amount], [Date].[Calendar Year].[CY 2004])
      )
    ) ON ROWS
    FROM [Step-by-Step];

    总共只有12个产品查询出来,很显然有一些产品既在第一个集合中也在第二个集合中存在。

    示例三 – 看看2013年的前10产品跌出了2014年前10

    SELECT
    {([Measures].[Reseller Sales Amount])} ON COLUMNS,
    Except(
        TopCount(
          {[Product].[Product].[Product].Members},
          10,
          ([Measures].[Reseller Sales Amount], [Date].[Calendar Year].[CY 2003])
        ),
        TopCount(
          {[Product].[Product].[Product].Members},
          10,
          ([Measures].[Reseller Sales Amount], [Date].[Calendar Year].[CY 2004])
        )
    ) ON ROWS
    FROM [Step-by-Step];

    示例四 – 2004年前10的产品不在2003年前10的有哪些

    SELECT
    {([Measures].[Reseller Sales Amount])} ON COLUMNS,
    Except(
      TopCount(
          {[Product].[Product].[Product].Members},
          10,
          ([Measures].[Reseller Sales Amount], [Date].[Calendar Year].[CY 2004])
        ),
      TopCount(
          {[Product].[Product].[Product].Members},
          10,
          ([Measures].[Reseller Sales Amount], [Date].[Calendar Year].[CY 2003])
      )
    ) ON ROWS
    FROM [Step-by-Step];

    示例五 – 查看有哪些产品在2003年和2004年都是前10的

    SELECT
    {([Measures].[Reseller Sales Amount])} ON COLUMNS,
    Intersect(
        TopCount(
          {[Product].[Product].[Product].Members},
          10,
          ([Measures].[Reseller Sales Amount], [Date].[Calendar Year].[CY 2004])
        ),
        TopCount(
          {[Product].[Product].[Product].Members},
          10,
        ([Measures].[Reseller Sales Amount], [Date].[Calendar Year].[CY 2003])
        )
    ) ON ROWS
    FROM [Step-by-Step]

    更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)  如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在 BIWORK 博客推荐栏中快速看到这些文章。

  • 相关阅读:
    0129 System类 Math类 Arrays类 大数据运算
    0127 基本类型包装类
    'telnet' 不是内部或外部命令,也不是可运行的程序 解决方案
    删除时报org.springframework.dao.DataIntegrityViolationException
    mapper自动识别驼峰配置 spring MVC
    spring Security如何debug源码
    公司tomcat项目启动
    java.util.ConcurrentModificationException: null 异常解决
    @Transactional 学习
    mangoDB初探
  • 原文地址:https://www.cnblogs.com/biwork/p/3045432.html
Copyright © 2011-2022 走看看