MDX常见操作

MDX是多维数据查询语言,类似于SQL,它的基本语法如下:

SELECT SET ON COLUMNS,SET ON ROWSFROM CUBEWHERE TUPLE

对SET、TUPLE、CUBE、成员的定义,可以参考百度,有的文章对概念的解释很详细。

下面我列出常见的操作:

单行单列查询:

这个结果值就一个,比如查询某个班总共有多少人

SELECT
{[人数度量维度].[总人数]} ON COLUMNS,
{[班级维度].[三年一班] } ON ROWS
FROM CUBE_NAME

单行多列:

比如查询某个班男生和女生各有多少人

SELECT 
{[人数度量维度].[男生人数],[人数度量维度].[女生人数]} ON COLUMNS,
{[班级维度].[三年一班]}  ON ROWS
FROM CUBE_NAME

多行单列:

比如查询每个班级的总人数:

SELECT 
{[人数度量维度].[总人数]} ON COLUMNS,
{[班级维度].children}  ON ROWS
FROM CUBE_NAME

多行多列:

比如查询每个班级,男生和女生的人数:

SELECT 
{[人数度量维度].[男生人数],[人数度量维度].[女生人数]} ON COLUMNS,
{[班级维度].children}  ON ROWS
FROM CUBE_NAME

上面的行和列,都只有一层。

列只有一级,行有两级:

查询每个班级,男生和女生的平均成绩:

SELECT 
{[成绩度量维度].[分数]} ON COLUMNS,
{[班级维度].children}*{[性别维度].children}  ON ROWS
FROM CUBE_NAME

行和列都有两级:

查询每个班级,男生和女生的上个月平均成绩、本月平均成绩:

SELECT 
{[月份维度].[上月],[月份维度].[本月]}*{[成绩度量维度].[分数]} ON COLUMNS,
{[班级维度].children}*{[性别维度].children}  ON ROWS
FROM CUBE_NAME

对某个轴去零值:

查询各个班级的总吃到人数,如果人数为零,去除掉这个班级的数据:

SELECT 
NON EMPTY {[迟到人数度量维度].[总人数]} ON COLUMNS,
{[班级维度].children}  ON ROWS
FROM CUBE_NAME

获取某个维度的所有成员:

比如获取班级维度的所有成员,也就是所有班级:

WITH MEMBER [度量维度].[班级名称] AS [班级维度].currentMember.name
SELECT 
{[度量维度].[班级名称]} ON COLUMNS,
{[班级维度].members}  ON ROWS
FROM CUBE_NAME

获取直接下级成员:

不包含下级成员的下级成员,比如获取机构维度的所有成员,也就是所有班级:

WITH MEMBER [度量维度].[机构名称] AS [机构维度].currentMember.name
SELECT 
{[度量维度].[机构名称]} ON COLUMNS,
{[机构维度].[某机构].children}  ON ROWS
FROM CUBE_NAME

获取默认成员:

WITH MEMBER [度量维度].[班级名称] AS [班级维度].currentMember.name
SELECT 
{[度量维度].[班级名称]} ON COLUMNS,
{[机构维度].defaultMember}  ON ROWS
FROM CUBE_NAME

获取树形机构:

WITH MEMBER [度量维度].[机构名称] AS [机构维度].currentMember.properties('名称')MEMBER [度量维度].[机构编码] AS [机构维度].currentMember.nameMEMBER [度量维度].[父机构编码] AS [机构维度].currentMember.parent.nameSELECT {[度量维度].[机构编码],[度量维度].[机构名称],[度量维度].[父机构编码]} ON COLUMNS,{[产品].members} ON ROWS FROM CUBE_NAME

这个查出来的是所有的集合,然后使用代码,两层循环,组成树形结构。

排除某些成员:

比如就是不让某机构出现在结果中

WITH MEMBER [度量维度].[机构名称] AS [机构维度].currentMember.name
SELECT 
{[度量维度].[机构名称]}
ON COLUMNS,
{EXCEPT([机构维度].MEMBERS,{[机构维度].[某机构]})} ON ROWS 
FROM CUBE_NAME

MDX一方面是学习它的查询语法,另一方面是要学会组装它返回的结果,这也是一个需要动脑筋的地方。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容