0

MDX を使用して、クライアントごとに、定義された日付範囲内の最新のステータスを返します。

サンプル データセット:

Client | Status   | Date
A      | Pending  | 30-Jun-12
A      | Pending  | 01-Jul-12
A      | Active  | 02-Jul-12
A      | Active  | 03-Jul-12
B      | Pending  | 01-Jun-12
B      | Active  | 02-Jun-12
B      | Active  | 03-Jun-12
B      | Active  | 04-Jun-12

追加情報: (クライアント A は 2012 年 7 月 3 日以降サービスを受けられなくなったため、記録なし) (2012 年 6 月 4 日以降はサービスを受けられなくなったため、クライアント B については記録なし)

必須出力: 日付ディメンションが 2012 年 6 月全体でフィルター処理されている場合は、返される必要があります。

Client | Status   | Date
A      | Pending  | 30-Jun-12
B      | Active  | 04-Jun-12

環境: SSAS 2005 | SS 2008 R2 | VS 2008

計算されたメンバーまたは名前付きセットを使用することを望んでいますが、ヘルプ/ガイダンスは大歓迎です...

4

1 に答える 1

0

多くの詳細が欠落しているため、欠落している情報を想定しています:

  • 複数選択は必要ありません。
  • クライアント階層の名前は[Client].[Client]です。
  • ステータス階層には という名前が付けられます[Status].[Status]。つまり、ディメンションとは異なるディメンションにありClientます。
  • 日付階層は[Date].[Date]、日レベル[Date].[Date].[Day]と月レベルで名前が付けられます[Date].[Date].[Day]
  • 2012 年 6 月のメンバー キーは201206.
  • 上記のディメンションを接続するメジャー グループは と呼ばれSalesます。
  • キューブの名前はCubeです。

それで

WITH   Set [Days] as
           Descendants([Date].[Date].CurrentMember, [Date].[Date].[Day])
       Member [Measures].[Date] as 
              Exists([Days], {[Client].[Client].CurrentMember}, 'Sales')
                    .Item(Exists([Days], {[Client].[Client].CurrentMember}, 'Sales').Count - 1)
                    .Item(0)
                    .Name
SELECT { [Measures].[Date] }
       ON COLUMNS,
       NON EMPTY
       [Client].[Client].[Client].Members
       *
       [Status].[Status].[Status].Members
       ON ROWS
  FROM [Cube]
 WHERE [Date].[Date].[Month].&[201206]

あなたが望むものを提供する必要があります。

[Days]セットには、フィルタリングされた日付範囲内のすべての日が含まれます。次に、Dateメジャーは次のように計算されます:現在のクライアントのものにExists制限し、最初にこのセットから最後のタプルを抽出し、2 番目にこれをメンバーに変換してから、このメンバーの名前をメジャーとして返します。DaysItemItemDate

編集

ステータスごとに 1 つの行を取得するのではなく、最後のステータスを取得するには (1 日に最大 1 つのレコードがあると仮定)、ステータスをメジャーに変換することもできます。

WITH   Set [Days] as
           Descendants([Date].[Date].CurrentMember, [Date].[Date].[Day])
       Member [Measures].[Date] as 
              Exists([Days], {[Client].[Client].CurrentMember}, 'Sales')
                    .Item(Exists([Days], {[Client].[Client].CurrentMember}, 'Sales').Count - 1)
                    .Item(0)
                    .Name
       Member [Measures].[Status] as 
              Exists([Status].[Status].[Status].Members,
                     { Exists([Days], {[Client].[Client].CurrentMember}, 'Sales')
                            .Item(Exists([Days], {[Client].[Client].CurrentMember}, 'Sales').Count - 1)
                     },
                     'Sales'
                    )
                    .Item(0)
                    .Item(0)
                    .Name
SELECT { [Measures].[Status], [Measures].[Date] }
       ON COLUMNS,
       NON EMPTY
       [Client].[Client].[Client].Members
       ON ROWS
  FROM [Cube]
 WHERE [Date].[Date].[Month].&[201206]

メジャーの外側ExistsStatus、日付のステータスを含む 1 つの要素セットを見つけます。これは、メンバーへの 2 つの呼び出しを介して変換されItem(0)、そこから名前を取得できます。

于 2013-10-16T18:22:36.983 に答える