2016-10-07 54 views
2

我有2個MDX語句的問題,第一個給出正確的結果,但第二個與預期的不同。MDX:計算的度量給出了不同的結果,其中「where」和「from select」

由於MDX是動態構建的,我寧願使用第二個。

create calculated member [Sejours Ambulatoire] as sum([Ambu].[Ambu].[Ambu].[Ambulatoire], NbSejours) 
create calculated member [Taux Ambulatoire] as IIF([Ambu].[Ambu].current is [Ambu].[Ambu].[Non Ambulatoire], 0, divN([Sejours Ambulatoire], [Measures].[NbSejours] , 0) ), format_string='percent' 

第一代碼:

select [Measures].[Taux Ambulatoire] on 0 
from [Cube] 
where {[Ambu].[Ambu].[Non Ambulatoire]} * {[Etablissement].[Lieu établissement].[All-M].&[CHU de Brest]} * { [Periode].[Periode].[All-M].&[2014] } 

- 結果0,00%正確

第二代碼:

SELECT 
{ [Measures].[Taux Ambulatoire] } ON 0 
FROM (SELECT 
{ [Periode].[Periode].[All-M].&[2014] } ON 0, 
{ [Etablissement].[Lieu établissement].[All-M].&[CHU de Brest] } ON 1, 
{ [Ambu].[Ambu].[Non Ambulatoire] } ON 2 
    FROM [Cube]) 

- 結果120,86%不正確

有人可以解釋這種差異?

+0

我會在本週末回答,這是MDX覆蓋層次結構的複雜性之一。需要一段時間才能使用,定義元組的位置,改變它們的計算方式。你也可以嘗試where選項,這更接近第一版 – ic3

回答

1

不要忘記,在icCube中你有一個MDX調試器,它可以幫助你理解MDX語句的不同部分是如何解決的。

的問題是,這種表達是如何解決:

[Ambu].[Ambu].current 

電流爲從子查詢過濾器定義取值。它從其他來源獲取值:在計算成員中定義的子句,軸和元組。

兩種可能的解決方案

1)把在過濾器,而不是在where子句過濾器,所以電流打算作爲where子句中定義爲返回該元組。

2)爲了得到IIF工作,就可以使用GetFilterInfo函數返回子選擇的內容和where子句

isIn(GetFilterInfo([Ambu].[Ambu]) , [Ambu].[Ambu].[Non Ambulatoire]) 

不過我會仔細檢查我的發言。

0

我試過iSin(GetFilterInfo())的建議。

with member [Taux Ambulatoire Test] as iif(isIn(GetFilterInfo([Ambu].[Ambu]) , [Ambu].[Ambu].[Non Ambulatoire]), 0, divN([Sejours Ambulatoire], [Measures].[NbSejours] , 0) ), format_string='percent' 
SELECT 
{ [Measures].[Taux Ambulatoire Test] } ON 0 
, [Ambu].[Ambu] on 1 
FROM (SELECT 
{ [Periode].[Periode].[All-M].&[2014] } ON 0, 
{ [Etablissement].[Lieu établissement].[All-M].&[CHU de Brest] } ON 1 
--,{ [Ambu].[Ambu].[Non Ambulatoire] } ON 2 
    FROM [Cube]) 

它工作得更好,但不是在我想所有的[安布]。對行[安布],我仍然得到120,86%爲NonAmbulatoire的情況下...

唯一我發現的解決方案是爲SejoursNonAmbulatoire創建一個度量。然後,[Taux Ambulatoire]正在檢查整個選擇是否爲NonAmbulatoire ...

create calculated member [Sejours Ambulatoire] as sum([Ambu].[Ambu].[Ambu].[Ambulatoire], NbSejours) 
create calculated member [Sejours NONAmbulatoire] as sum([Ambu].[Ambu].[Ambu].[Non Ambulatoire], NbSejours) 
create calculated member [Taux Ambulatoire] as IIF([Sejours NONAmbulatoire] = [Measures].[NbSejours], 0, divN([Sejours Ambulatoire], [Measures].[NbSejours] , 0) ), format_string='percent' 
相關問題