0

親ごとに、子の親からファクト金額をロールアップしながら、最新の孫のディメンション情報を取得する方法に関して問題があります (これが理にかなっている場合、私は SSAS と MDX にかなり慣れていないので、ご容赦ください。さらに説明します)。

テーブルを構造化する方法 (dim キーまたはグループ キーを使用) やディメンション内の属性の関係、およびセルごとではなくブロック モードでキューブを効率的に検索する方法が正確にはわかりません。

土地のレイアウトは次のとおりです。

財務に調整が加えられた5億行以上のファクトテーブルなので、日付から時間の最初までを合計することが現在取り組んでいるものです。

7,000 万行以上のディメンション テーブルには、1:M のクレーム (親) を持つことができるアカウント (祖父母) があり、これはまた、ディメンションの変更がそれぞれに発生するレコードの開始日と終了日を持つクレーム レベル情報 (孫?) を持つタイプ 2 です。個人の主張。孫レベルには Dim キーがあり、クレーム (親) レベルにはグループ キーがあります。

これまでのところ、Fact と Dim の間のブリッジ テーブルの使用を試み、次の MDX ロジックを使用しました。これは、非常に小規模なアカウントでは問題なく機能しますが、大規模なアカウントではうまく拡張できません。注意すべきことの 1 つは、大規模なアカウントでは約 60,000 件のクレームが発生する可能性があることです。

以下では、思考プロセスは、渡された日付 <= 各クレームのテールを取得することでした。次に、この情報を事実データに対して使用して、グループキーを介して渡された日付までの各クレームのデータをスライスして合計します (財務の合計が必要なため、薄暗いキーではありません)。

with 
set [FilterRecBeginDate] as 
Generate([CLAIM].[Claim Number].Children,
Tail(Filter(
    CrossJoin([CLAIM].[Claim Number].CurrentMember,
          {[CLAIM].[Claim Record Begin Date].Children},
          {[CLAIM].[Claim Status Code].Children}
          )
, [CLAIM].[Claim Record Begin Date].CurrentMember.Name <= '2009-08-23'
)
)
)
select 
{[Measures].[Paid Amount], 
 [Measures].[Paid Loss Amount]}on columns,
non empty [FilterRecBeginDate] on rows
from [Cube]
where ([CALENDAR DATE].[Date].&[19000101]:[CALENDAR DATE].[Date].&[2009-08-23T00:00:00]) *
{([CLAIM].[Claimant Name].&[xxxxx])}

1.) パラメータとして Account と Date のみが与えられた場合、キューブを別の方法で構成したり、Dim Attribute Relationships を使用してこのタイプのクエリをより適切にサポートしたりするにはどうすればよいですか?

2.) MDX Generate と Desendants をいじってみましたが、どちらも 1 つずつループしているようです。おそらくループが唯一のオプションですが、より良い方法があることを願っています。MDX を別の方法で記述して、ブロック モードを利用できますか?

前もって感謝します。

4

1 に答える 1

0

FilterRecBeginDateクロスジョインのサイズを小さくすることで、の計算を最適化できると思います。Filter を 1 回計算することもできます。

with 
set [tmp] as 
    CrossJoin(
        Filter([CLAIM].[Claim Record Begin Date].Children, 
               [CLAIM].[Claim Record Begin Date].CurrentMember.Name <= '2009-08-23'
        ), 
        [CLAIM].[Claim Status Code].Children
    )
set [FilterRecBeginDate] as 
    Generate([CLAIM].[Claim Number].Children,
        Tail(
            CrossJoin({[CLAIM].[Claim Number].CurrentMember}, [tmp])
        )
    )
于 2012-09-14T14:45:14.907 に答える