在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
- 外邊距在定位元素中的情況
- 在Struts中如何處理ActionForm中包含日期型別屬性的情況ORM型別
- SQL中除數為0處理情況演示SQL
- 處理表鎖定的情況
- oradebug處理DB hang情況
- Java程式異常處理的特殊情況Java
- Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測PythonOpenCV
- xcodebuild -workspace 情況下,部分坑的處理XCodeUI
- 如何處理瀏覽器的斷網情況?瀏覽器
- session儲存資料庫中以及禁用cookie情況下的處理Session資料庫Cookie
- body在預設情況下是具有margin外邊距的
- Redo丟失的4種情況及處理方法
- Redo 丟失的4種情況的處理方法
- Invoca:85%的客戶互動在沒有人工的情況下得到處理
- 哪些情況應該廢標,廢標後如何處理
- 動態sql查詢結果多行的處理情況SQL
- oracle 字符集錯誤情況處理簡單方法Oracle
- 沒有備份的情況下處理undo損壞
- 對於邊界值中有不確定字串時該怎麼處理字串
- 表在表空間中的儲存情況
- Oracle 無備份情況下undo檔案損壞處理Oracle
- Laravel-admin 處理 select 有 data 鍵的情況Laravel
- 影像處理_切邊
- 在oracle中處理日期Oracle
- 《超越邊界》
- DBMS_FLASHBACK_ARCHIVE在Oracle版本中的支援情況HiveOracle
- 在不重灌Windows情況Ç(轉)Windows
- 二分查詢左邊界,右邊界,>=,>,<=,<
- jmeter問題處理隨筆1 - CSV取值資料異常處理(包含"號,","號的情況)JMeter
- 在處理鏈中呼叫APD
- 請教Golang處理Json, 處理的是 List of Json這種情況,大家有何高見?GolangJSON
- 第十八篇:批量處理情況下的回射客戶端客戶端
- undo表空間出現問題的幾種情況與處理
- 沒有備份的情況下如何處理logical & physical corrupt blockBloC
- 關於docker-compose up -d 出現超時情況處理Docker
- 微服務邊界微服務
- ORA-00059: maximum number of DB_FILES exceeded 情況分析及實驗處理