3

組織構造階層が定義された単純なデータ キューブがあります。キューブ内の計算では、MDX クエリのWHERE句で現在使用されている組織アイテムのレベルに応じて、異なる計算を行いたいと考えています。

たとえば、5 つのレベルの組織構造があり、最後のレベル (店舗レベル) では、式を使用して計算方法を変更したいとします。

IIF([Organization Structure].[Parent Id].LEVEL IS [Organization Structure].[Parent Id].[Level 05], 'THIS IS STORE', 'THIS IS NOT')

データキューブからの式

これにより、Visual Studio ブラウザーで実際に必要なものが得られます。 ブラウザからの結果

次のような MDX クエリを使用する場合も同様です。

SELECT { [Measures].[TEST] } ON COLUMNS
FROM [DataCubeName]
WHERE
{
[Organization Structure].[Parent Id].&[123]
}

問題が発生するのは、 WHERE句で複数の組織構造項目を使用したい場合です。この句には同じレベルのアイテムのみを含めることができます。どのレベルか知りたいのですが、もちろんWHEREに 2 番目のアイテムを追加すると、次のようになります。

SELECT { [Measures].[TEST] } ON COLUMNS
FROM [DataCubeName]
WHERE
{
[Organization Structure].[Parent Id].&[123],
[Organization Structure].[Parent Id].&[124]
}

「属性の座標にセットが含まれているため、現在のメンバーが失敗しました」というエラーが表示されます。

そのため、私の式では ITEM(0) 関数をさまざまな構成で使用しようとしましたが、現在WHERE句で使用されている一連の項目で使用する方法が見つかりませんでした...質問は:

現在実行されている WHERE 句にリストされているアイテムのセットを取得して、そのセットで Item(0) を使用できるようにする方法、または現在選択されているアイテムのレベルを取得する他の方法はありますか?同じレベル?

4

1 に答える 1

0

句内でのCurrentmembercombined withの使用は、問題になる可能性があります。setwhere

chris Webb からのこの投稿を参照してください: http://blog.crossjoin.co.uk/2009/08/08/sets-in-the-where-clause-and-autoexists/

状況に応じて考えられる回避策は次のとおりです。状況に合わせて試すことができます。

WITH 
  MEMBER [Measures].[x] AS 
    IIF
    (
       (existing [Geography].[Geography].[State-Province].members).item(0).Level
      IS 
       [Geography].[Geography].[State-Province]
     ,'THIS IS state'
     ,'THIS IS NOT'
    ) 
SELECT 
  {[Measures].[x]} ON COLUMNS
FROM [Adventure Works]
WHERE
(
{[Geography].[Geography].[State-Province].&[77]&[FR],
[Geography].[Geography].[State-Province].&[59]&[FR]}
);

上記を拡張して、機能することを証明します。

WITH 
  MEMBER [Measures].[x] AS 
    IIF
    (
        (EXISTING 
          [Geography].[Geography].[State-Province].MEMBERS).Item(0).Level
      IS 
        [Geography].[Geography].[State-Province]
     ,'THIS IS state'
     ,'THIS IS NOT'
    ) 
  MEMBER [Measures].[proof] AS 
    (EXISTING 
      [Geography].[Geography].[State-Province].MEMBERS).Item(0).Member_Caption 
  MEMBER [Measures].[proof2] AS 
    (EXISTING 
      [Geography].[Geography].[State-Province].MEMBERS).Count 
SELECT 
  {
    [Measures].[x]
   ,[Measures].[proof]
   ,[Measures].[proof2]
  } ON COLUMNS
FROM [Adventure Works]
WHERE 
  {
    [Geography].[Geography].[State-Province].&[77]&[FR]
   ,[Geography].[Geography].[State-Province].&[59]&[FR]
  };

結果は次のとおりです。

ここに画像の説明を入力

したがって、式は次のようになります。

IIF
(
    (EXISTING 
      [Organization Structure].[Parent Id].MEMBERS).Item(0).Level
  IS 
    [Organization Structure].[Parent Id].[Level 05]
 ,'THIS IS STORE'
 ,'THIS IS NOT'
)
于 2015-05-27T10:42:50.573 に答える