2017-04-30 10 views
0

私は多種多様なジョインが必要な状況があります。 ファクトテーブルとディメンションテーブルが2つあります。 ファクトテーブルには口座番号(GL口座のように)と金額が含まれています。プラス日付フィールド、アカウント番号は一意ではないので。 最初のディメンション表には、アカウントをさまざまな方法で組み合わせて作成できるレポートの列が1つだけあります。 2番目のディメンション表は、「ロールアップ」表と呼ぶことができます。レポート、アカウント、広告申込情報の説明フィールドの3つの列があります。後者は、それぞれのレポートのどの行にアカウントをマップするかを定義します。パワーピボットの "ダイナミック"ジョイン

したがって、行エリアに行明細の説明があり、値域に金額が含まれているピボットテーブルが必要です。ユーザーがどのレポートを表示するかを指定するための仕組み。しかし、ロールアップテーブルとファクトテーブルの間のアカウントフィールドの結合は、多対多です。ロールアップテーブルが、ユーザが選択した特定のレポートに基づいて何らかの形でフィルタリングされた場合、それは1対多になります。したがって、私のタイトルの "動的な"結合。

私は何らかの接続テーブルを思いついていますが、これまでのところ運がありません。もし誰かが何か提案や指摘があれば、それは非常に感謝しています。

答えて

0

私は値フィールドに配置するフィールドを計算するDAX式を使用してその方法を考え出しました。動的結合を行うには、FILTERとCROSSJOINの組み合わせを使用します。 CROSSJOINを使うためには、フィールド名にいくつかのプレフィックス文字を付けることで、それらを一意にすることに注意してください。また、レポート表(説明した最初のディメンション表)には、ユーザーが表示したいレポートを含む行が1つしかありません。次のように

DAXの式は:

SUMX (
    FILTER (
     CROSSJOIN (
      fBalances, 
      FILTER (
       CROSSJOIN (
        dRollUp, 
        dReport 
       ), dRollup[Report] = dReport[uReport] 
      ) 
     ), fBalances[fAccount] = dRollUp[Account] 
    ), fBalances[Amount] 
) 

後続の更新:私はレポートを指定するユーザのために(MYREPORT呼ばれる)パラメータを追加パワーBIにそれを移動させます。その結果、私はdReportテーブルを削除しました。

だから、パワーBI DAX式は次のようになります。

SUMX (
    FILTER (
     CROSSJOIN (
      fBalances, 
      FILTER (
       CROSSJOIN (
        dRollUp, 
        myReport 
       ), dRollup[Report] = FIRSTNONBLANK (myReport[myReport], TRUE()) 
      ) 
     ), fBalances[fAccount] = dRollUp[Account] 
    ), fBalances[Amount] 
) 
関連する問題