MDX 系列 - MDX 查询原型

浏览: 3890

本篇文章记录 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].&[20040102]:[Date].[Calendar].[Date].&[20040301])

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].&[20040102]:[Date].[Calendar].[Date].&[20040301]) 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].&[20040301]:[Date].[Calendar].[Date].&[20040304]) 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].&[20040101]:[Date].[Calendar].[Date].&[20040401]) ON COLUMNS
FROM [Step-by-Step]
)
推荐 0
本文由 BIWORK 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册