本篇文章记录 SBS 中 MDX 查询原型,可以根据这些查询原型来解决实际项目中的问题。

1. 查询在 2004年1月2日 - 2004年3月1日之间购买过 Bikes 产品的用户。

SELECT ([Product].[Category].[Bikes],[Measures].[Internet Sales Amount]) ON COLUMNS,
NON EMPTY [Customer].[Customer].[Customer].MEMBERS ON ROWS
FROM [Step-by-Step]
WHERE ([Date].[Calendar].[Date].&[]:[Date].[Calendar].[Date].&[])

2. 查询在 2004年1月2日 - 2004年3月1日之间购买过 Bikes 或 Clothing 产品的用户。

SELECT {
([Product].[Category].[Bikes],[Measures].[Internet Sales Amount]),
([Product].[Category].[Clothing],[Measures].[Internet Sales Amount])
}ON COLUMNS,
NON EMPTY [Customer].[Customer].[Customer].MEMBERS ON ROWS
FROM (
SELECT ([Date].[Calendar].[Date].&[]:[Date].[Calendar].[Date].&[]) ON COLUMNS
FROM [Step-by-Step]
)

3. 计算2004年3月1日 - 3月4日之前60天购买了 Bikes 或者 Clothing 产品的用户数量。

WITH
MEMBER [Measures].[CustomerCounts] AS
-- 计算用户总数
COUNT(
NONEMPTY (
-- 取购买过 Bikes 的用户 (当前时间-60天 至 当前时间)
{[Customer].[Customer].[Customer].MEMBERS},
{([Product].[Category].[Bikes],[Measures].[Internet Sales Amount])}
*LASTPERIODS(60,[Date].[Calendar].CurrentMember)
)
+ -- UNION 去掉重复的用户集合
NONEMPTY (
-- 取购买过 Clothing 的用户 (当前时间-60天 至 当前时间)
{[Customer].[Customer].[Customer].MEMBERS},
{([Product].[Category].[Clothing],[Measures].[Internet Sales Amount])}
*LASTPERIODS(60,[Date].[Calendar].CurrentMember)
)
)
-- 前60天的时间名称
MEMBER [Measures].[Pre60DateName] AS
LASTPERIODS(60,[Date].[Calendar].CurrentMember).Item(0).Name
SELECT {
[Measures].[CustomerCounts],
[Measures].[Pre60DateName]
} ON COLUMNS,
[Date].[Calendar].[Date].MEMBERS ON ROWS
FROM
(
-- 测试时间范围
SELECT ([Date].[Calendar].[Date].&[]:[Date].[Calendar].[Date].&[]) ON COLUMNS
FROM [Step-by-Step]
)

4.计算每个月第一天到前60天购买了 Bikes 或者 Clothing 产品的用户数量

WITH
MEMBER [Measures].[CustomerCounts] AS
-- 计算用户总数
COUNT(
NONEMPTY (
-- 取购买过 Bikes 的用户 (当前时间-60天 至 当前时间)
{[Customer].[Customer].[Customer].MEMBERS},
{([Product].[Category].[Bikes],[Measures].[Internet Sales Amount])}
*LASTPERIODS(60,[Date].[Calendar].CurrentMember.FIRSTCHILD)
)
+ -- UNION 去掉重复的用户集合
NONEMPTY (
-- 取购买过 Clothing 的用户 (当前时间-60天 至 当前时间)
{[Customer].[Customer].[Customer].MEMBERS},
{([Product].[Category].[Clothing],[Measures].[Internet Sales Amount])}
*LASTPERIODS(60,[Date].[Calendar].CurrentMember.FIRSTCHILD)
)
)
-- 前60天的时间名称
MEMBER [Measures].[Pre60DateName] AS
LASTPERIODS(60,[Date].[Calendar].CurrentMember.FIRSTCHILD).Item(0).Name
SELECT {
[Measures].[CustomerCounts],
[Measures].[Pre60DateName]
} ON COLUMNS,
[Date].[Calendar].[Month].MEMBERS ON ROWS
FROM
(
-- 测试时间范围
SELECT ([Date].[Calendar].[Date].&[]:[Date].[Calendar].[Date].&[]) ON COLUMNS
FROM [Step-by-Step]
)

更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)

如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在 BIWORK 博客推荐栏中快速看到这些文章。


MDX 查询原型的更多相关文章

  1. SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表

    SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 2013-10-09 23:09 by BI Wor ...

  2. 微软BI 之SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表

    基于数据仓库上的 SSRS 报表展示,一般可以直接通过 SQL 查询,存储过程,视图或者表等多种方式将数据加载并呈现在报表中.但是如果是基于 Cube 多维数据集的数据查询,就不能再使用 SQL 的语 ...

  3. 微软BI 之SSRS 系列 - 如何在 MDX 查询中获取有效的 MEMBER 成员属性作为参数传递

    这篇小文章的来源是 天善问答,比如在报表中要根据点击某一个成员名称然后作为参数传递给自身报表或者下一张报表,这个在普通的 SQL 查询中没有任何问题.但是在 MDX 中查询是有区别的,比如在 MDX ...

  4. 微软BI 之SSRS 系列 - 基于时间段参数的 MDX 查询以及时间日历 Date Picker 的时间类型参数化

    今天在天善问答里看到一个问题,如果我没有理解错的话,它应该是指比如在一个报表中选取一个时间段,然后求出这个时间段的某个 Measure 的 SUM 和.并且同时求出这两个时间点对应的上一年的时间点之间 ...

  5. 微软BI 之SSRS 系列 - 在 Cube 中通过 MDX 查询实现基于父子递归关系的汇总报表

    之前我写了一篇在 SSRS 开发中处理这种父子关系的汇总与聚合的文章 (SSRS 系列 - 使用分组 Group 属性实现基于父子递归关系的汇总报表),示例中的查询是基于 SQL Server 关系型 ...

  6. MDX查询语句

    另:15个经典的MDX查询语句 另:http://www.cnblogs.com/biwork/p/3437959.html 1.排名+排序+量值过滤: WITH member [Measures]. ...

  7. MDX查询SSAS结果--通过adomd.net展示到客户端

    SSAS多维模型建好之后,除了在excel客户端直接链接ssas源拖拽pivot分析使用外,还可以讲要展示的结果集通过MDX语句查询出来,嵌入到程序中,通过运行程序跑出完整的报表.如图所示:

  8. SQL Analysis Services MDX 查询超时 解决办法

    当页面有很多MDX语句查询的时候,会发生超时的情况. 解决办法: SQL Analysis Services所在的服务器(OLAP的文件夹下) 找到: msmdpump.ini 将: <Conf ...

  9. MDX Cookbook 03 - MDX 查询中负数,零和空值 NULL 的格式化处理

    FORMAT_STRING 属性在处理计算成员(通常是度量值成员)的时候会经常使用到,比如指定标准 Standard, 货币 Currency 或者 Percent 百分比格式.除此之外,还可以自定义 ...

随机推荐

  1. Python 索引迭代

    1.使用enumerate函数 L = ['Adam', 'Lisa', 'Bart', 'Paul'] for index, name in enumerate(L):     print inde ...

  2. python 全栈开发,Day15(递归函数,二分查找法)

    一.递归函数 江湖上流传这这样一句话叫做:人理解循环,神理解递归.所以你可别小看了递归函数,很多人被拦在大神的门槛外这么多年,就是因为没能领悟递归的真谛. 递归函数:在一个函数里执行再调用这个函数本身 ...

  3. scanf的一个问题(暂未解决)

    如下代码,没有按照预想的那样运行: int a; char b; printf("input a integer\n"); scanf("%d", &a ...

  4. 《剑指offer》-栈的压入、弹出序列

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一 ...

  5. -webkit-line-clamp超出省略

    以前只用过超出一行显示省略号 有时候会碰到只显示两到三行,超出省略 -webkit-line-clamp属性就能解决这个问题 text-overflow: -o-ellipsis-lastline; ...

  6. DevExpress学习笔记之如何获取Repository Item的值

    上一章我们看到了如何在TreeList的单元格中动态绑定不同的控件,此类控件被称为In_Place Control.所谓“In_Place”,我的理解为“内置”控件,既然有“内”就相对的会有“外”,其 ...

  7. BZOJ1076 [SCOI2008]奖励关 概率 状态压缩动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1076 题意概括 有n个东西,k次扔出来.每次等概率扔出其中一个. 你可以拿这个东西,但是有条件,得 ...

  8. Github+阿超运算

    感谢自己寒假能够稍稍做一点努力. Github个人页面<构建之法阅读笔记二可见>: https://github.com/Heartxy8990 申请教程: http://jingyan. ...

  9. 【Java】 剑指offer(27) 二叉树的镜像

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 思路 画图可 ...

  10. win10 更新之后,无法开启wifi,“组或资源的状态不是执行请求操作的正确状态”

    netsh wlan netsh wlan start hostednetwork 请参考最新博客:http://www.cnblogs.com/tanrong/p/8184325.html 已尝试解 ...