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. React Native之ScrollView控件详解

    概述 ScrollView在Android和ios原生开发中都比较常见,是一个 滚动视图控件.在RN开发中,系统也给我们提供了这么一个控件.不过在RN开发中 ,使用ScrollView必须有一个确定的 ...

  2. 递归dict

    一个看起来非常酷的定义 class Example(dict): def __getitem__(self, item): try: return dict.__getitem__(self, ite ...

  3. Android Studio下多渠道打包

    Android Studio下实现多渠道打包 直接上步骤 步骤 1. 清单文件添加属性(以友盟统计为例) 在application标签下添加meta-data属性 <application -- ...

  4. EBS业务学习之应付INVOICE类型

    INVOICE类型 类      型 描           述 标准INVOICE 是指由于采购货物或接受劳务,从供应商处取得的INVOICE (标准INVOICE,既可以和订单匹配,也可以不匹配) ...

  5. ZAB协议

    zookeeper依赖zab协议来实现分布式数据一致性.基于该协议,zookeeper实现了一种主备模式的系统架构来保持ZooKeeper为高可用的一致性协调框架,自然的ZooKeeper也有着一致性 ...

  6. actionbar详解(二)

    经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对较为深刻的理解了.唯一欠缺的是,前面我们都只是学习了理论知识而已,虽然知识点已经掌握了,但是真正投入到项目实战当中时会不会掉链子还很 ...

  7. Android图片setBackgroundResource和setImageResource的区别

    网上对于这2个的区别大都是如下所示: setImageResource與xml中的src的屬性才是相匹配的,而setBackgroundResource是與xml中的background屬性相匹配 的 ...

  8. 【Android应用开发】Android Studio 简介 (Android Studio Overview)

    一. Intelij IDEA 环境简介 Android Studio 来源 : Android Studio 是 Intelij IDEA 的免费版本 + Android SDK 集成的; -- I ...

  9. 数据库再设计(Database Redesign)

    数据库设计有三个来源:(1)可以从现有数据开始设计数据库,例如从excel表格等,这种模式下需要考虑的问题是数据的normalization,最终通常将数据转化为BCNF范式:(2)设计新的数据库,这 ...

  10. 【原创】Eclipse vs. IDEA快捷键对比大全

    花了一天时间熟悉IDEA的各种操作,将各种快捷键都试了一下,感觉很是不错!于是就整理了一下我经常用的一些Eclipse快捷键与IDEA的对比,方便像我一样使用Eclipse多年但想尝试些改变的同学们. ...