0

次の行のファクトテーブルがあります。

WorkerName、OrderId、NumberOfPackagesPerOrder

このファクトテーブルでは、 WorkerNameOrderIdも一意ではないことに注意してください。複数のユーザーが単一のOrderIdで作業する可能性もあります。NumberOfPackagesPerOrderはOrderIdにのみ依存することにも注意してください。つまり、すべてのOrderIdについて、 NumberOfPackagesPerOrderの数は同じになります

このデータから従業員階層ごとに階層レポートを報告するキューブを作成しようとしています。

ManagerLevel1[完了した注文の総数][出荷されたパッケージの総数]
    Managerlevel2
      ....。
        ManagerLevelN
                  ワーカー

複数のワーカーが同じ注文で作業する可能性があるため、 マネージャーレベル(リーフノード以外)のPackagesPerOrderを二重にカウントしないようにする必要があります。

マネージャの階層は再帰的に定義されます。つまり、静的ではありません。

管理者はパッケージを発送することもできます。

これを行う方法?OrderIdによってこれらをDISTINCした後にのみこれらを合計することにより、NumberOfPackagesPerOrderを適切に合計するために必要なMDXスクリプトは何ですか?

4

1 に答える 1

2

これを行う最も簡単な方法は、MDXスクリプトをまったく使用せずに、多対多の関係を実装することです。あなたの説明に基づいて、必要なものの完全な説明を提供することはできませんが、例をモックアップして正しい値を取得しました。親子構造を使用して、あなたが説明するように、マネージャーとの階層関係でワーカーディメンションを設定しています。ワーカー、注文ID、パッケージ数を含むファクトテーブルがあります。この最後のケースでは、パッケージの数は実際には必要ありません。無視する必要があります。2番目のファクトテーブルを追加して、注文IDとパッケージ数に個別の値を設定しました。

次に、SSASプロジェクトでは、2つのディメンションがあります。1つはワーカー用で、もう1つは注文ID用です。

次に、2つのメジャーグループ(ファクトテーブルごとに1つ)を持つキューブを作成します。ワーカーと注文IDを持つものは、パッケージの数または行の数を使用できます。問題ではありませんが、メジャーを非表示にする必要があります。多対多の中間ファクトテーブルとして使用されます。

次に、個別の注文IDとパッケージ数を持つファクトテーブルが2番目のメジャーグループです。注文数を追加し、パッケージの数をこのメジャーグループの2つの別個のメジャーとして使用できます。

[ディメンションの使用法]タブで、ワーカーIDと注文IDは、中間ファクトテーブル(そのファクトテーブルのワーカーID列と注文ID列)と関係があります。注文IDは、注文IDとパッケージの数を含むファクトテーブルとも定期的に関係しています。ワーカーは、他のファクトテーブルを中間メジャーグループとして使用して、このファクトテーブル(一意の注文IDを持つファクトテーブル)と多対多の関係にあります。

このように設定すると、注文数とパッケージ数は、階層のすべてのレベルでワーカーとマネージャーによって正しくロールアップされます。MDXは必要ありません。

于 2012-06-11T17:29:31.080 に答える