計算列を作成する

完了

場合によっては、データ内に存在する列よりも多くの列が必要になることがあります。 理想的には、これらの列をデータ ソースに直接追加します。これにより、メンテナンスが容易になり、列のロジックを他のモデルやレポートで再利用できるようになります。 ただし、Power BI のデータに接続した後に列を追加する必要がある場合、Power Query エディターでカスタム列を作成するか、セマンティック モデルに計算列を追加することができます。 列を追加する方法に関わらず、レポート ユーザーの観点からは結果は同じになります。

一般に、Power Query のカスタム列の方が、よりコンパクトかつ最適な方法でモデルに読み込まれるため、推奨されます。 計算列は、計算テーブルに列を追加する場合、または数式が次の場合にのみ推奨されます。

  • 集計されたモデル データに依存します。
  • RELATEDRELATEDTABLE、親子階層の関数など、DAX でのみ使用可能な特殊なモデリング関数が必要です。

計算列を作成する

DAX 数式を使用して、モデル内の任意のテーブルに計算列を追加できます。 数式は、各行に対して単一の値 (スカラー) を返す必要があります。

インポート モデル内の計算列により、ストレージ サイズが増加し、特に更新される他のテーブルに依存している場合、データの更新時間が長くなる可能性があります。 したがって、計算列を多用しすぎる場合には注意し、代わりにメジャーを使用できるかどうかを検討してください。

次の例では、計算列の汎用性を示すため、財務分析をサポートするためにいくつかの計算列が作成されます。

会計年度

この列により、各日付の会計年度が決定されます。 会計年度は 7 月に始まるため、7 月から 12 月までの日付が次の暦年に割り当てられます。 この数式は、"FY" を年と連結し、年の後半の日付に対して年を 1 ずつ増加させます。

Due Fiscal Year =
"FY"
    & YEAR('Due Date'[Due Date])
        + IF(
            MONTH('Due Date'[Due Date]) > 6,
            1
        )

次の手順では、Microsoft Power BI が計算列の式を評価する方法について説明します。

  1. 加算演算子 (+) が、テキスト連結演算子 (&) の前に評価されます。
  2. YEAR 関数は、期日年の整数値を返します。
  3. IF 関数は、期日月数が 7 ~ 12 (7 月~ 12 月) の場合は値を返し、それ以外の場合は BLANK を返します。 (たとえば、Adventure Works の会計年度は 7 月から 6 月であるため、暦年の最後の 6 か月では、会計年度として次の暦年が使用されます)。
  4. 年の値は、IF 関数によって返される値 (1 または BLANK) に追加されます。 値が BLANK の場合は、加算によって会計年度の値が生成されるように、暗黙的にゼロ (0) に変換されます。
  5. リテラル テキスト値 "FY" は会計年度値と連結され、暗黙的にテキストに変換されます。

会計四半期

この列は、第 1 四半期が 7 月から 9 月である会計年度構造に基づいて、各日付に会計四半期を割り当てます。 この数式は、会計年度ラベルに Q と四半期番号を追加します。

Due Fiscal Quarter =
'Due Date'[Due Fiscal Year] & " Q"
    & IF(
        MONTH('Due Date'[Due Date]) <= 3,
        3,
        IF(
            MONTH('Due Date'[Due Date]) <= 6,
            4,
            IF(
                MONTH('Due Date'[Due Date]) <= 9,
                1,
                2
            )
        )
    )

月キー

MonthKey 式は、期日の年を値 100 で乗算し、期日の月番号を加算します。 これは、Due Month テキスト値を時系列順に並べ替えるために使用できる数値を生成します。

MonthKey =
(YEAR('Due Date'[Due Date]) * 100) + MONTH('Due Date'[Due Date])

完全な日付ラベル

FORMAT 関数は、書式設定文字列を使用して Due Date 列の値をテキストに変換します。 この場合、書式設定文字列は、年、月名の短縮形、および日を説明するラベルを生成します。

Due Full Date =
FORMAT('Due Date'[Due Date], "yyyy mmm, dd")

ユーザー定義の日付および時刻形式が多数存在します。 詳しくは、FORMAT 関数のカスタム日付と時刻の書式をご覧ください。

これらを追加すると、Due Date テーブルには、元の日付列と 5 つの計算列の 6 つの列が含まれます。 これらの列では、タイム インテリジェンス機能とレポート利用者の読みやすさの両方がサポートされます。

スクリーンショットは、期日テーブルのデータ ビューを示しています。6 つの列があり、最初の 7 行が表示されています。

行コンテキストについて

Power BI は、テーブル内の各行 (行コンテキストと呼ばれる) の計算列の数式を評価します。 行コンテキストは、単に "現在の行" を意味します。 たとえば、Due Fiscal Year 計算列は次のとおりです。

Due Fiscal Year =
"FY"
    & YEAR('Due Date'[Due Date])
        + IF(
            MONTH('Due Date'[Due Date]) <= 6,
            1
        )

Power BI がこの数式を実行すると、'Due Date'[Due Date] は現在の行の値を返します。 Excel テーブルを使用したことがある場合は、この考え方には馴染みがあるかもしれません。

行コンテキストは、現在のテーブルにのみ適用されます。 別のテーブルの値が必要な場合は、主に次の 2 つのオプションがあります。

  • 2 つのテーブル間にリレーションシップが存在する場合は、RELATED 関数または RELATEDTABLE 関数を使用します。 RELATED は、リレーションシップの "一" 側から値を取得します。 RELATEDTABLE は、"多" 側から値のテーブルを取得します。
  • リレーションシップがない場合は、LOOKUPVALUE 関数を使用します。

可能な場合は RELATED を使用してみてください。 Power BI がデータを保存およびインデックスする方法により、通常は LOOKUPVALUE よりも高速に動作します。

以下に例を示します。 この数式は、Sales テーブルに Discount Amount 列を追加します。

Discount Amount =
(
    Sales[Order Quantity]
        * RELATED('Product'[List Price])
) - Sales[Sales Amount]

Power BI は、Sales テーブルの各行に対してこの数式を計算します。 現在の行から Order QuantitySales Amount を取得します。 Product テーブルから List Price を取得するには、RELATED 関数を使用して各売上の適切な値を見つけます。

Power BI が計算列の数式を評価するときは、行コンテキストが常に適用されます。 また、反復子関数も使用して、より高度な要約を作成することもできます。 このモジュールの後半では、反復関数について学習します。