Transcript 12_MDX陳述句
MDX陳述句
開啟MDX查詢
開啟「SQL Server Management Studio」
點選工具列:
並選擇所使用的資料庫:
即可編輯或執行所有的MDX查詢
MDX查詢
在MDX語法中,是透過ON句型來指定維度所放置的軸位
分析人員可以透過Axis(代碼),直接寫代碼或是直接指定軸位
英文名稱的方式來表示。
代碼
英文名稱
中文意義
0
Columns
列
1
Rows
行
2
Pages
頁
3
Chapters
章節
4
Sessions
區段
多維度軸定義
MDX查詢基本型
MDX查詢句型
CrossJoin({成員/集合},{成員/集合}) :
可產生如同交叉分析表的報表形式
From句型
資料源
WHERE句型
Filter({成員集合},邏輯運算式)句型
因在where句型不能加入運算式,必須改用filter函數才能達
到過濾的效果。
Having句型-Having 邏輯運算式
簡化的過濾語句
CrossJoin({成員/集合},{成員/集合})
WHERE句型 & Filter句型&Having句型
WHERE句型
在MDX中WHERE句型與T-SQL的用法不同
在這邊,可以透過WHERE句型的方式來表達「切片」
WHERE (成員/集合) –不能加入任何運算式
Filter句型
可利用此句型達到過濾效果
基本句型:Filter ({成員集合},{邏輯運算式})
使用時,在前方需加入要過濾的維度成員,然後在
後方加入過濾條件
Having句型
•簡化的過濾條件式
MDX陳述句的執行流程
Step01
解析FROM,找出資料源
Step02
解析WHERE,進行切片
Step03
解析WITH,產生導出成員與命名集
Step04
解析軸定義,包含成員集合、過濾(Filter)、排序。
Step05
產生資料集
Step06
解析NonEmpty,排除空值
Step07
解析Having,做資料最後過濾
在一般狀態下,Filter與Having結果相同。
但是,當資料中有包含NonEmpty句型進行排除空值,則Filter代表
的前置過濾與Having的後置過濾,結果就可能會有不同。
排序:Order句型
連續量值排序
Order({維度},量值[,{asc/desc/basc/bdesc}])
ASC & DESC
•表示階層內成員排序
BASC & BDESC
•表示跟階層打散後,同一層級的成員排序。
導出成員
WITH子句須置於SELECT查詢子句之前
WITH MEMBER [父階層].[導出成員名稱] AS ‘MDX運算式公式內容’
Ex:將銷售金額除以銷售數量來產生平均銷售單價
當不只一個導出成員時,計算的狀況就會變得較為
複雜。
Ex:希望產生平均銷售單價以及年度成長這兩個座
落在不同維度的導出成員。
可能會產生兩種不同的結果
使用「解決順序(Solve Order)」
在SSAS 2008 中,SOLVE_ORDER的值域:-8181~65535
有些解決順序已經被特定運算所佔用
在指定時,須要特別注意
計算
解決順序
自訂成員公式
-5119
一元運算子
-5119
視覺化總計計算
-4096
其他所有計算
(若沒有指定)
0
Create Member
使用Create Member產生伺服器端的導出成員,會儲
存於伺服器端,任何前端使用者都可以存取。
使用Create Member產生成員後,也可以使用Drop語
法進行刪除
WITH SET
WITH SET [命名集名稱] as ‘{成員集合}’
成員篩選查詢
排序過濾函數
TopCount
DrillDownLevelTop
• 取母成員內排序後的前N名
DrillDownLevelBottom
•取母成員內排序後的倒數N名
TopCount函數
使用TopCount函數產生 銷售量最高的前五項產品
DrillDownLevelTop函數
使用DrillDownLevelTop函數 產出 每個類別內銷售量
最高的前三項產品
動態指定對應的軸位
在SSAS 2008可以有兩種不同的表示法
指定階層:通常多維度分析時會採用此法
•[產品別].[產品階層].[產品大分類].MEMBERS
指定屬性:僅取用單一屬性,與其他屬性無任任何階層
的關係
•[產品別].[產品階層]..MEMBERS
VisualTotals
視覺化加總(VisualTotals)
是將展示成員進行加總,來產生新的去重複總
計的加總小計項目。
SubCube查詢
SubCube是Cube的子集合,透過SubCube運算式定義
SubCube的範圍之後,在工作階段中,就可以僅針對
SubCube範圍進行後續的查詢。
使用SubCube最大的好處,在於事前將資料格縮小至
一定的範圍,可以有效的提升查詢效率
建立SubCube
CREATE SUBCUBE SubCube名稱 AS SubCube運算式
關閉SubCube
DROP SUBCUBE SubCube識別名稱
集合成員必須符合以下規則
SubCube是定義了Cube的子集合,其中集合成員必須
符合以下規則
如果包含階層(ALL)的成員,該階層的所有成員就會
包括在內。
如果包含任何成員,該成員的上階及下階就會包括
在內。
如果包含層級的每個成員,該階層的(ALL)成員就會
包括在內。
SubCube永遠包含Cube的每個(ALL)成員。