在MDX中處理邊界情況
Member不存在的情況
在使用Member的一些函式(比如:Lag,Lead,ParalledPeriod等)的時候,我們經常需要得到當前的Member相對的一個Member(比如:前一個Member,父級Member,或去年同期的一個Member等等)。然而由於維度和Hierarchy中的Member是有限的,所以這個相對的Member有時並不存在。在這種情況下,我們可以用IIF判斷這個Member是否為Null來解決這個問題(z)。比方說,計算過去6個月的平均銷售額。這裡需要注意的是如果 Cell(也就是Turple)不存在也會發生和Member不存在的相同的問題,其實如果Member不存在,Cell是一定不存在的,所以“Member不存在的情況”也可以被看作是“Cell不存在的情況”。
IIF (
[Date].[Calendar].CurrentMember.Lag(5) IS NULL,
NULL,
Avg (
{[Date].[Calendar].CurrentMember.Lag(5): [Date].[Calendar].CurrentMember},
[Measures].[Internet Sales Amount]
)
), FORMAT_STRING="Currency"
SELECT
{[Measures].[Internet Sales Amount], [Measures].[Last 6 Month Average Sales Amount]} ON 0,
{[Date].[Calendar].[Month].Members} ON 1
FROM [Adventure Works]
Level錯誤的情況
有的時候,Axis中的Set包含了位於不同Level的Member,而且每個Level中對於Member的處理方式不同,這種情況下的處理也要小心。比方說,在計算每種產品和其所屬SubCategory,Category的銷售量的時候,對於產品我們需要顯示其標準價格(List Price),我們可以象下面這樣來寫。
IIF (
[Product].[Product Categories].CurrentMember.Level IS [Product].[Product Categories].[Product Name],
[Product].[Product Categories].CurrentMember.Properties("List Price"),
NULL
)
SELECT
{[Measures].[Internet Sales Amount],[Measures].[Product List Price]} ON 0,
{DESCENDANTS([Product].[Product Categories].[All], [Product].[Product Categories].[Product Name], SELF_AND_BEFORE )} ON 1
FROM [Adventure Works]
被0除的情況表示式出現0為除數的情況有兩種:1)Member, Cell(也就是Turple)不存在SSAS中,如果Member, Cell不存在,其返回的值是0。比如:統計每個月每種產品的銷售額時,但是有可能在某個月份某個產品由於沒有賣出一個。這種情況下,上文已有說明。2)Cell統計的值為0比如:統計每個月份佔所處季度利潤百分比的時候,有可能該季度的利潤為0。
無論是那種情況,對於被0除你可以用判斷表示式是否為0來處理,像下面這樣計算同期比:
IIF (
(
[Measures].[Internet Sales Amount],
ParallelPeriod(
[Date].[Calendar].[Calendar Year],
1,
[Date].[Calendar].CurrentMember
)
) = 0,
NULL,
[Measures].[Internet Sales Amount]/
(
[Measures].[Internet Sales Amount],
ParallelPeriod(
[Date].[Calendar].[Calendar Year],
1,
[Date].[Calendar].CurrentMember
)
) - 1
), FORMAT_STRING="Percent"
SELECT
{[Measures].[Internet Sales Amount], [Measures].[Same Period Ratio]} ON 0,
NON EMPTY{DESCENDANTS([Date].[Calendar].[All Periods], [Date].[Calendar].[Month], SELF)} ON 1
FROM [Adventure Works]
本文來自:http://www.cnblogs.com/microsheen/archive/2006/11/11/557715.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7600305/viewspace-891196/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- FE.UX-常見CSS邊界情況防禦處理UXCSS
- SQL中除數為0處理情況演示SQL
- xcodebuild -workspace 情況下,部分坑的處理XCodeUI
- Java程式異常處理的特殊情況Java
- 如何處理瀏覽器的斷網情況?瀏覽器
- session儲存資料庫中以及禁用cookie情況下的處理Session資料庫Cookie
- Laravel-admin 處理 select 有 data 鍵的情況Laravel
- Invoca:85%的客戶互動在沒有人工的情況下得到處理
- 哪些情況應該廢標,廢標後如何處理
- 影像處理_切邊
- Oracle 無備份情況下undo檔案損壞處理Oracle
- 成都現在的情況
- 關於docker-compose up -d 出現超時情況處理Docker
- Mercury Research:2021年 x86處理器市場份額情況
- 《超越邊界》
- ORA-00059: maximum number of DB_FILES exceeded 情況分析及實驗處理
- 總結kafka的consumer消費能力很低的情況下的處理方案Kafka
- 突破設計邊界,盡在AutoCAD2020!
- 二分查詢左邊界,右邊界,>=,>,<=,<
- 使用 VSTS 進行 CI 的過程中,無法識別 .NET Core 2.x 的情況處理
- mount程式在systemctl守護的情況下,mount dir程式被oom後重新啟動失敗的處理方法OOM
- Redis實現分散式鎖(setnx、getset、incr)以及如何處理超時情況KJBPRedis分散式
- DOM在Ahooks中的處理過程Hook
- netty系列之:在netty中處理CORSNettyCORS
- [20231024]NULL值在索引的情況.txtNull索引
- SYSAUX表空間佔用過大情況下的處理(AWR資訊過多)UX
- 29. - -次js請求- -般情況下有哪些地方會有快取處理?JS快取
- 如何在不使用POJO程式碼的情況下建立Java批處理插入 -DZone JavaPOJOJava
- 在 Vue 中如何避免在動態繫結 類 出現空 類 的情況?Vue
- QA在整個專案中的職責和任務情況
- 在 Laravel 中優雅處理 Form 表單LaravelORM
- 在 C 程式中處理 UTF-8 文字
- 說說在 Python 中如何處理異常Python
- 怎樣在 Laravel 中處理前端認證Laravel前端
- 【翻譯】在Spring WebFlux中處理錯誤SpringWebUX
- 【AutoCAD .NET】如何在無邊界Hatch上選擇邊界點?
- Flutter實現一個邊讀邊處理邊傳送檔案的功能Flutter
- js中this指向有幾種情況JS
- jQuery 在圖片和文字中插入內容(多種情況考慮)jQuery