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. OpenCV +Python 制作画板

    效果图 画图工具实现 代码 运行结果 程序分析 窗体自由度 如何退出程序 滚动条相关 支持的事件 首先声明一下,本例思路不是博主原创,博主在前人的代码上进行了个性化的修改,制作了一个简单的画图工具.下 ...

  2. [线程]Thead 中传参数RuntimeError: thread.__init__() not called

    在写一个多线程类的时候调用报错 RuntimeError: thread.__init__() not called class NotifyTread(threading.Thread): def ...

  3. Android插件化的思考——仿QQ一键换肤,思考比实现更重要!

    Android插件化的思考--仿QQ一键换肤,思考比实现更重要! 今天群友希望写一个关于插件的Blog,思来想去,插件也不是很懂,只是用大致的思路看看能不能模拟一个,思路还是比较重要的,如果你有兴趣的 ...

  4. 带你深入理解STL之Set和Map

    在上一篇博客带你深入理解STL之RBTree中,讲到了STL中关于红黑树的实现,理解起来比较复杂,正所谓前人种树,后人乘凉,RBTree把树都种好了,接下来就该set和map这类关联式容器来" ...

  5. Microsoft Dynamics CRM 2013/2015 选项集的多选

    CRM中的选项集多选一直是客户需求中的必选项,但从CRM进国内的3.0时代开始到目前的2015版本均没有提供该功能,但既然客户要了就得想办法满足,既然CRM本身的功能上不支持,那我们只有使用非官方支持 ...

  6. LATEX TEMPLATE (SPRINGER) (*.BST)

    该模板在哪里下载? http://www.springer.com/computer/image+processing/journal/11263, Instructions for Authors, ...

  7. java虚拟机 jvm java堆 方法区 java栈

    java堆是java应用程序最密切的内存空间.几乎所有的对象都存在堆中.java堆完全自动化管理,通过垃圾回收机制,垃圾对象会自动清理,不需要显式释放. 根据java垃圾回收机制的不同,java堆可能 ...

  8. 在Linux环境下实现一个非常好的bash脚本框架

    为了方便我日常工作中的编译环境,免去我敲命令行所浪费的时间,我个人写了一个非常有用而又简单的脚本框架,该框架即可以完成的工程源码编译,也可以清除,拷贝等等操作,具体需要开发者自己来实现细节,我的框架思 ...

  9. COM原理与实现之一

    COM原理与实现之一 COM组件其实是一种特殊的对象体系,遵循一个统一的标准,使到各个软件都可以通过某种方法访问这个对象的方法,也就可以做到组件调用.COM就是统一的标准--通过接口来调用COM组件. ...

  10. 1090. Highest Price in Supply Chain (25) -计层的BFS改进

    题目如下: A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyon ...