MDX语句的特点:

大小写不分。members等于Members;downloads等于Downloads

维度的统计量指定要选择准确。downloads等于[Downloads]

[]可以少,不能多。members外部不能有[],否则报错

TopCount函数格式。

members是属性中所有成员的枚举。

同一维度下的属性组合,用Hierarchize:

SELECT

NON EMPTY {[Measures].[Downloads]} ON COLUMNS,

NON EMPTY {Hierarchize({{[appTag.default].[dimstore].Members}, {[appTag.default].[Class].Members}})} ON ROWS

FROM [aso]

不同维度的属性组合,用CrossJoin:

SELECT

NON EMPTY {[Measures].[Downloads]} ON COLUMNS,

NON EMPTY CrossJoin([dimInterval.default].[Interval].Members, CrossJoin([dimStoreName.default].[storeName].Members, [dimDate.default].[year].Members)) ON ROWS

FROM [aso]

举几个具体的例子:

下面两个语句是一样的:

1.SELECT

NON EMPTY {downloads} ON COLUMNS,

TopCount([dimStoreName].[storeName].members,2,[downloads]) ON ROWS

FROM [aso]

2.SELECT

downloads ON COLUMNS,

{TopCount([dimStoreName].[storeName].members,2,[measures].[downloads])}ON ROWS

FROM [aso]

aso是一个cube,总体。如果需要在结果集中筛选出某个属性取特定值的结果,用where 子句

略(有空再写)

查看downloads的top 15:前15计算函数topcount(set,topK,依据统计量),排序后取前15

SELECT

NON EMPTY {downloads} ON COLUMNS,

TopCount([dimApp].[appName].members,15,[downloads]) ON ROWS

FROM [aso]

如果查询跨越来两个不同维度,需要crossjoin,

SELECT

NON EMPTY {downloads} ON COLUMNS,

TopCount(

          CrossJoin([dimStoreName.default].[storeName].Members,[dimApp].[appName].members),15,[downloads]

  ) ON ROWS

FROM [aso]

先交叉,确定查询结果集(交叉连接),再筛选

不能先统计,后交叉,错误:

SELECT

NON EMPTY {downloads} ON COLUMNS,

CrossJoin([dimStoreName.default].[storeName].Members,

          (topcount([dimApp].[appName].members,15,[downloads]))

    )

ON ROWS

FROM [aso]

top5实例进阶:

SELECT

{[downloads]} ON COLUMNS,

Generate(

TopCount([dimStore].[store_name].Members, 5, [downloads]),

{ [dimStore].CurrentMember } * TopCount( [appName].[AppName].Members, 5, ([downloads],[dimStore].CurrentMember) )

) on ROWS

FROM [ASO]

标准格式的例子,猜猜什么意思:

SELECT

NON EMPTY {[Measures].[Downloads], [Measures].[AppCount]} ON COLUMNS,

NON EMPTY Hierarchize(

    Union( CrossJoin({[appTag.default].[anzhi]}, [dimDate.default].[year].Members),

        Union( CrossJoin({[appTag.default].[anzhi]}, [dimDate.default].[day].Members),

            Union( CrossJoin({[appTag.default].[hiapk]}, [dimDate.default].[year].Members),

                   CrossJoin({[appTag.default].[hiapk]}, [dimDate.default].[day].Members)

            )

      )

 )

) ON ROWS

FROM [aso]

骂娘了吗?

解析一下,简化的例子:

SELECT

NON EMPTY {[Measures].[Downloads]} ON COLUMNS,

NON EMPTY Hierarchize(

               Union(CrossJoin([dimDate.default].[year].Members, [appTag.default].[dimstore].Members),

             Union(CrossJoin([dimDate.default].[month].Members, [appTag.default].[dimstore].Members),

             CrossJoin([dimDate.default].[day].Members, [appTag.default].[dimstore].Members)

       )

     )

     ) ON ROWS

FROM [aso]

执行结果如下:

如果只是date维度的下的月日年,很简单,Hierarchize就可以了,如

SELECT

NON EMPTY {[Measures].[Downloads]} ON COLUMNS,

NON EMPTY {Hierarchize({{[dimDate.default].[year].Members}, {[dimDate.default].[month].Members}, {[dimDate.default].[day].Members}})} ON ROWS

FROM [aso]

但是当两个维度下的多个维度组合在一起,就要进行笛卡映射,分别crossjoin,在总体合并。两个维度属性集,分别crossjoin,然后再将所有crossjoin结果集进行union。

union就是并集(合并两个结果集)。

intersect是交集

MDX的实例讲解(排名前15的小例子)的更多相关文章

  1. 2017年排名前15的数据科学python库

    2017年排名前15的数据科学python库 2017-05-22 Python程序员 Python程序员 Python程序员 微信号 pythonbuluo 功能介绍 最专业的Python社区,有每 ...

  2. Html代码seo优化最佳布局实例讲解

    搜索引擎对html代码是非常优化的,所以html的优化是做好推广的第一步.一个符合seo规则的代码大体如下界面所示. 1.<!–木庄网络博客–> 这个东西是些页面注释的,可以在这里加我的& ...

  3. 如何做到机器学习竞赛Kaggle排名前2%

    原创文章,同步首发自作者个人博客 .转载请务必在文章开头显眼处注明出处 摘要 本文详述了如何通过数据预览,探索式数据分析,缺失数据填补,删除关联特征以及派生新特征等方法,在Kaggle的Titanic ...

  4. TCP入门与实例讲解

    内容简介 TCP是TCP/IP协议栈的核心组成之一,对开发者来说,学习.掌握TCP非常重要. 本文主要内容包括:什么是TCP,为什么要学习TCP,TCP协议格式,通过实例讲解TCP的生命周期(建立连接 ...

  5. [转]Scrapy简单入门及实例讲解

    Scrapy简单入门及实例讲解 中文文档:   http://scrapy-chs.readthedocs.io/zh_CN/0.24/ Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用 ...

  6. 【转】GitHub 排名前 100 的安卓、iOS项目简介

    GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...

  7. S3C2440上RTC时钟驱动开发实例讲解(转载)

    嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤.一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便.如有错误之处,谢请指正. 共享资源,欢迎转载:http:/ ...

  8. GitHub 上排名前 100 的 Objective-C 项目简介

    主要对当前 GitHub 排名前 100 的项目做一个简单的简介, 方便初学者快速了解到当前 Objective-C 在 GitHub 的情况.   项目名称 项目信息 1. AFNetworking ...

  9. 2016年GitHub 排名前 100 的安卓、iOS项目简介(收藏)

    排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不相关的项目, 所以排名并不具备任何官方效力, 仅供参考学习, 方便初学者 ...

随机推荐

  1. Dynamics CRM 权限整理二

    接上篇http://blog.csdn.net/vic0228/article/details/50510605,继续列举CRM相关权限 prvReadBusinessUnit privilege(I ...

  2. 源码篇——AsyncTask机制

    AsyncTask new AsyncTask<String,String,String>(){ // 运行在主线程中,做预备工作 onPreExecute(){ } // 运行在子线程中 ...

  3. [Flask]学习杂记--模板

    这个学习杂记主要不是分享经验,更多是记录下falsk的体验过程,以后做东西在深入研究,因为django之前用的时间比较长,所以很多概念都是一看而过,做个试验了解下flask的功能. flask中使用是 ...

  4. JSP1.x 自定义标签

    Tag接口 任何一个标签都对应着一个java类,该类必须实现Tag接口,JSP遇到一个标签后后,将通过一个tld文件查找该标签的实现类,并运行该类的相关方法 import javax.servlet. ...

  5. Eclipse中设置VM参数

    eclipse.ini -Xms256m //设置堆最小值 -Xmx1024m //设置堆最大值 Eclipse 做JVM 的分析时,需要动态设置JVM的参数来进行各种测试, 可以在下图地方进行设置 ...

  6. Dynamics CRM2013/2015 插件注册工具登录后无法显示assembly列表问题的解决办法二

    本篇接前面的一篇博文:http://blog.csdn.net/vic0228/article/details/47079717,前篇提供了一种解决方案,将本机系统的语言切换成英文即可,今天再来介绍第 ...

  7. android开发之this.finish()的使用

    在一个Activity用完之后应该将之finish掉,但是,之前在学校里自己摸索着开发时并没有太注意这个问题,因为activity无论是否finish掉对功能的影响貌似都不是那么明显(这是读书时候的观 ...

  8. (NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 用plist列表文件来表示游戏数据 因为在这个炸弹人游戏中有很多 ...

  9. Hessian源码分析--总体架构

    Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协 ...

  10. Swift基础之OC文件调用Swift代码(在上次的基础上写的)

    前两天刚写过Swift调用OC,今天在原来的基础上,实现OC调用Swift. 首先,创建一个OneSwiftFile.swift文件,创建一个继承于NSObject的类(这个地方你可以自己选择继承的父 ...