本篇文章記錄 SBS 中 MDX 查詢原型,能夠根據這些查詢原型來解決實際項目中的問題。html
1. 查詢在 2004年1月2日 - 2004年3月1日之間購買過 Bikes 產品的用戶。web
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 產品的用戶數量。spa
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 產品的用戶數量orm
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]
)
更多 BI 文章請參看 BI 系列隨筆列表 (SSIS, SSRS, SSAS, MDX, SQL Server)htm
若是以爲這篇文章看了對您有幫助,請幫助推薦,以方便他人在 BIWORK 博客推薦欄中快速看到這些文章。blog