集計関数の使用
メジャーをスライスするためにディメンションを使用する場合、メジャーはそのディメンションに含まれる階層に沿って集約されます。 この集約動作は、メジャーに指定される集計関数に依存します。 数値データが含まれているほとんどのメジャーでは、集計関数は Sum です。 メジャーの値は、階層のどのレベルがアクティブであるかによってその合計値はさまざまです。
Analysis Services の場合、作成したすべてのメジャーは、メジャーの操作を決定する集計関数に基づきます。 定義済みの集計の種類としては、Sum、Min、Max、Count、Distinct Count、およびより特化した他のいくつかの関数などがあります。 または、複雑な数式やカスタムの数式に基づく集計を必要とする場合、作成済みの集約関数を使用する代わりに、MDX 計算を作成できます。 たとえば、割合の値のメジャーを定義する場合、計算されるメジャーを使用して MDX で行えます。 「CREATE MEMBER ステートメント (MDX)」を参照してください。
キューブ ウィザードを使用して作成されるメジャーには、メジャーの定義の一部として集計の種類が割り当てられます。 集計の種類は、ソース列に数値データが含まれる場合には必ず Sum となります。 ソース列のデータの種類に関係なく、Sum が割り当てられます。 たとえば、キューブ ウィザードを使用してメジャーを作成し、ファクト テーブルのすべての列を含めた場合、ソースが日時列であったとしても、結果のメジャーすべてに Sum の集計が含まれることになります。 ウィザードによって作成されたメジャーに関して事前に割り当てられた集計方式を必ず確認し、集計関数が適切であることを確かめてください。
キューブ定義の集計方法は SQL Server Data Tools - Business Intelligence と MDX のいずれかによって割り当てたり変更したりできます。 詳細については、「メジャーおよびメジャー グループの作成」または「Aggregate (MDX)」をご覧ください。
集計関数
Analysis Services には、メジャー グループに含まれるディメンションに従ってメジャーを集計するための関数があります。 集計関数の加法性によって、キューブのすべてのディメンションにわたってメジャーがどのように集計されるかが決まります。 集計関数の加法性は、3 つのレベルに分類されます。
加算
加法メジャーは完全加法メジャーとも呼ばれ、メジャーが含まれているメジャー グループ内のすべてのディメンションに従って制限なく集計できます。準加法
準加法メジャーは、メジャーが含まれているメジャー グループ内のすべてではなく一部のディメンションに従って集計できます。 たとえば、在庫の数量を表すメジャーは、地理ディメンションに従って集計してすべての倉庫の合計在庫数量を生成できますが、このメジャーは在庫数量の定期的なスナップショットを表しているため、時間ディメンションに従って集計できません。 そのようなメジャーを時間ディメンションに従って集計すると、間違った結果が生成されます。 詳細については、「準加法の動作の定義」を参照してください。非加法
非加法メジャーは、メジャーが含まれているメジャー グループ内のどのディメンションに従っても集計できません。 代わりに、このメジャーは、メジャーを表すキューブのセルごとに計算する必要があります。 たとえば、利益率などの比率を返す計算されるメジャーは、どのディメンションの子メンバーのパーセンテージ値からも集計できません。
次の表は Analysis Services の集計関数を示しています。関数の加法性と予想される出力が記載されています。
集計関数 |
加法性 |
戻り値 |
---|---|---|
Sum |
加算 |
すべての子メンバーの値の合計を計算します。 これは既定の集計関数です。 |
Count |
加算 |
すべての子メンバーの数を取得します。 |
Min |
準加法 |
すべての子メンバーの最低値を取得します。 |
Max |
準加法 |
すべての子メンバーの最高値を取得します。 |
DistinctCount |
非加法 |
すべての一意の子メンバーの数を取得します。 詳細については、次のセクションの「About Distinct Count Measures」を参照してください。 |
None |
非加法 |
集計は行われず、ディメンションのリーフ メンバーおよび非リーフ メンバーのすべての値が、メジャーが含まれているメジャー グループのファクト テーブルから直接入力されます。 ファクト テーブルからメンバーの値を読み取ることができない場合は、そのメンバーの値は Null に設定されます。 |
ByAccount |
準加法 |
勘定科目ディメンションのメンバーの勘定科目の種類に割り当てられている集計関数に従って集計します。 勘定科目ディメンションがメジャー グループに存在しない場合は、None 集計関数として扱われます。 勘定科目ディメンションの詳細については、「親子型ディメンションの財務アカウントの作成」を参照してください。 |
AverageOfChildren |
準加法 |
空ではないすべての子メンバーの値の平均を計算します。 |
FirstChild |
準加法 |
最初の子メンバーの値を取得します。 |
LastChild |
準加法 |
最後の子メンバーの値を取得します。 |
FirstNonEmpty |
準加法 |
空ではない最初の子メンバーの値を取得します。 |
LastNonEmpty |
準加法 |
空ではない最後の子メンバーの値を取得します。 |
個別のカウント メジャーについて
Aggregate Function プロパティ値が Distinct Count のメジャーは、"個別のカウント メジャー" と呼ばれます。 個別のカウント メジャーを使用すると、ファクト テーブルにおけるディメンションの最下位レベル メンバーの出現数をカウントできます。 カウントは重複しないため、メンバーが複数回発生した場合も 1 つとしてカウントされます。 個別のカウント メジャーは、常に、専用のメジャー グループに置かれます。 デザイナーに構築されているパフォーマンスの最適化手法として、独自のメジャー グループに個別のカウント メジャーを配置することをお勧めします。
個別のカウント メジャーを使用するのは、あるディメンションの各メンバーについて、別のディメンションの重複しない最下位レベルのメンバーが、ファクト テーブル内で行をいくつ共有しているかを調べる場合です。 たとえば、Sales キューブの場合、顧客および顧客グループごとに、何種類の製品が購入されたかを調べます。 つまり、Customers ディメンションの各メンバーに対して、Products ディメンションの重複しない最下位レベル メンバーがファクト テーブル内でいくつの行を共有しているかを調べます。または、Internet Site Visits キューブの場合、サイト閲覧者や閲覧者グループごとに、インターネット サイト上で閲覧された重複しないページ数を調べる場合もあります。 つまり、Site Visitors ディメンションのメンバーごとに、Page ディメンションの重複しない最下位レベルのメンバーがファクト テーブル内の行をいくつ共有しているかを調べます。これらの各サンプルでは、2 番目のディメンションの最下位レベル メンバーが個別のカウント メジャーによってカウントされます。
このような分析では、ディメンションを 2 つに制限する必要はありません。 実際、カウント対象となるメンバーを含んでいるディメンションなど、キューブ内のディメンションを自由に組み合わせることによって個別のカウント メジャーを分割およびスライスできます。
メンバーをカウントする個別のカウント メジャーは、ファクト テーブル内の外部キー列に基づきます。 つまり、メジャーの Source Column プロパティでこの列を識別します。この列は、個別のカウント メジャーによってカウントされたメンバーを識別するディメンション テーブル列と結合します。