2

私はMDXに比較的慣れておらず(現在本を注文している最中)、設定された日付の範囲に基づいて、ファクトテーブルの1つからの値を合計する計算メジャーを作成することに亀裂があります(時間ディメンション)、別のディメンションの属性でフィルタリングする必要があります。残念ながら、私は少し状況に陥ったようで、明確な道を見つけることができません。私は他の同様の質問に目を通しましたが、これと同じことをしようとしているものは見当たりませんでした。単一の次元の測定値だけでした。

物理的な測定値を含む測定値グループがありますSourceMeasure

[Time]計算の範囲を指定するために使用する、という名前の時間ディメンションがあります。これは、私の日付キーによる上記のメジャーグループに関連しています。

、という名前のAccountディメンションがあり[Dim Account]、これには2つの日付属性が含まれています:[Account Start Date][Account End Date]。これは、アカウントIDを介して上記のメジャーグループに関連付けられています。

私がやろうとしているのは、と[Time]に基づいてディメンションを範囲にフィルタリングし、そのアカウントに指定された期間の合計を返すことです。[Account Start Date][Account End Date][SourceMeasure]

明らかに、これはアカウントごとに異なるため、[Dim Account]ディメンションを除いて集計しないでください(適用されていない場合はおそらく0またはnullを返します)。

以下のテスト式の例。これは、FORMAT_STRING構文(MDX Studioによる)のエラーのため、現在機能していません。

WITH 
  MEMBER [Measures].[LifetimeMeasure] AS 
    Sum
    (
      {
          StrToMember
          (
        "[Time].[Date].&[" 
            + Format([Dim Account].[Account Start Date].CurrentMember.MemberValue,"yyyy-MM-ddThh:mm:ss")
            + "]"
          )
        : 
          StrToMember
          (
            "[Time].[Date].&[" 
            + Format([Dim Account].[Account End Date].CurrentMember.MemberValue,"yyyy-MM-ddThh:mm:ss")
            + "]"
          )
      }
     ,[Measures].[SourceMeasure]
    ) 
SELECT 
{
    [Measures].[LifetimeMeasure]
    ,[Measures].[SourceMeasure]
}
ON COLUMNS
,{
    [Dim Account].[Account].[AccountName]
} 
ON ROWS
FROM 
    [MyCube]

いくつかの異なるアプローチ(SCOPE、Filter、IIF)を試しましたが、同じ問題点に戻るたびに、[DimAccount]の開始と終了の値に基づいて[Time]ディメンションをフィルタリングする方法日付。

さて、ディメンション間の関係がどのように機能するか、および/または計算されたメジャーがSSASによってどのように計算されるかを完全に誤解している可能性がありますが、まだ何を探すべきかわからないレベルにあります。 mは円を描いて回ります。

私がやろうとしていることは可能ですか?もしそうなら、どこが間違っているのかを理解するのに役立つどこを見ればよいかについての指針はありますか?代わりに計算ディメンションを使用することを検討する必要がありますか?

これがすべて理にかなっていることを願っています。何かを見逃した場合、または詳細が必要な場合はお知らせください。MDXStudioを使用してテストしています。

4

1 に答える 1

0

StrToMember関数にCONSTRAINEDフラグを追加して、エラーを見つけました。

[Time]ディメンションの日付エントリのデフォルトは「00:00:00」であるのに対し、[DimAccount]ディメンションの日付エントリのデフォルトは「12:00:00」のようです。24時間制と12時間制の不一致のようです。[Dim Account]ディメンションの日付フィールドは、ディメンションが自然な時間ディメンションではないため、「日付」ではなく「通常」としてマークされています。ミスマッチの原因はこれである可能性があると思います。

今のところこの問題を回避するために、Format式からTime形式を削除し、根本原因を検索するときに文字列に「00:00:00」を追加しました。解決したら更新します。

更新:不一致の原因はディメンションではなく、StrToMember式で使用したフォーマット文字列にあります。MSDNには記載されていませんが、次の文字列は12時間の時間形式を出力します。

"yyyy-mm-ddThh:mm:ss"

この文字列は24時間形式を出力しますが、次のようになります。

"yyyy-mm-ddTHH:mm:ss"
于 2012-11-15T15:10:19.323 に答える