PowerBI/Power Pivotにおける重要な要素に、計算列とメジャーがあります。これらはとても良く似た機能に見えますが、使われている概念はそれぞれ全く異なっています。この違いを理解することがPowerBI/Power Pivotを理解するための重要な一歩となります。
計算列について
計算列を追加することは、Excelで列を追加する場合とほぼ何も変わりません。計算列は、PowerBI/PowerPivot内で使われるテーブル内の他の列と全く同じで、他のテーブルの行、列でも使用(参照)できます。
Excelの場合と概念が若干異なっているのは、PowerBI/PowerPivotの計算列が「行コンテキスト」で動作する点です。計算列の評価および処理は、テーブル内の現在の処理行を参照して行われます。同じテーブル内の他の行の値に直接アクセスすることはできません。(現在の処理行を無視して、他の行を直接参照することはできません)
メジャーについて
メジャーとは一言で言えば「集計処理」を行うものです。計算列は現在の処理行を参照して行われますが、メジャーはテーブルの合計を参照します。
全体の合計値を基にして計算を行う場合に便利です。例えば、各商品別に売上と利益をデータとして持つテーブルから、売上総利益率を出したい場合を考えてみます。この場合は、まず総売上高と総利益を集計し、割合を計算する必要があります。全体の合計値を参照する必要があるため、行レベルの参照ではうまくいきません(上記の例では、各行においては間違いではありませんが、「総計」において、割合を合計することになってしまいます)
計算列とメジャーの使い分け
計算列とメジャーをどう使い分けるかについては、「何を計算したいか」が判断基準になります。
計算列は行レベルの参照になりますので、例えばある列の文字列から数値を抽出したい場合や、列同士を加算、減算する場合(この場合は「総計」も正しい計算結果となります)などに使用できます。
メジャーは、合計値を参照します。各列の合計値には暗黙的にメジャーが使用されます。そのほか標準集計 (SUM、COUNT、MIN、MAX、DISTINCTCOUNT、または AVG) で暗黙的なメジャーが使用されます。
また、合計値の割合を算出する際にもメジャーが使われます。
両者は計算処理のタイミングも異なります。計算列はデータベース処理中に計算され、モデルに保存されます。つまり、メモリを占有するということです。非常に複雑な計算列を作成する場合には、中間的な計算列を作成することでクエリ時間の短縮につながりますが、一方でメモリ消費量が増えるという欠点も抱えることになります。一方、メジャーはクエリ時に処理されるため、メモリを消費しません。ただし、場合によってはクエリ処理時間が増えることになります。
これらは非常に大きなデータを扱う際にのみ関係することですが、処理方法の違いについては覚えておいたほうがよいでしょう。