2016-10-07 1 views
2

2つのMDXステートメントに問題があります。最初のステートメントは正しい結果を返しますが、2番目のステートメントは期待どおりです。MDX:計算された数値が "where"と "from select"で異なる結果を示します

MDXは動的に構築されるので、私はむしろ第2のものを使用することを好むでしょう。

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]) 

- 結果INCORRECT 120,86%

誰かがその違いを説明することはできますか?

+0

...チェックして、それはMDXの複雑さ、上書きされた階層の一つです。あなたのタプルを定義するところで、それらが計算される方法を変える、時間をかけて使用されます。また、最初のバージョンに近いwhereオプションを試すこともできます – ic3

答えて

1

icCubeには、MDXステートメントのさまざまな部分がどのように解決されるかを理解するのに役立つMDXデバッガがあることを忘れないでください。

質問は、この表現が解決される方法です。

[Ambu].[Ambu].current 

現在は副選択フィルタの定義から値を取ってではありません。それは、他のソースから値を取ります:計算されたメンバーで定義された節、軸、およびタプル。

2つの解決策

1)そう電流がWHERE句で定義されたタプルを返すために起こっている、where句の代わりにフィルタで、フィルタを置きます。

2)は、副選択の内容とはいえ、私は慎重に私の文をチェックしたい句

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

を返すGetFilterInfo機能を使用することができます作業IIFを取得します。

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]) 

。[アンビュー]の列に、私はまだNonAmbulatoireため120,86%を取得...

のみ私が見つけた解決策は、SejoursNonAmbulatoireのための尺度を作成することです。全体の選択がNonAmbulatoireされている場合は、[TAUX Ambulatoire]私はこの週末にお答えします

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' 
関連する問題