例文を使って繰り返し業務を時短

【Power BI】Calculate関数

Power BIのCalculate関数の使い方をご紹介 Power BI

シェアなど比率を出すときによく使います

Calculate関数の構文

特定の抽出条件(フィルター・スライサーなど)をクリアする場合に使う。

Sumなどの集計式の対象範囲を変えるときに使います。

CALCULATE(<評価式>,<(フィルター)抽出条件1>,<(フィルター)抽出条件2>…)

例)

  • Calculateの最初の引数は、評価実行する式を取ります。
  • 2つ目以降の引数では、既存のフィルターを置き換える新たな条件を指定します。
=DIVIDE(
SUM('売上明細'[売上]),
CALCULATE(
SUM('売上明細'[売上]),
ALL('商品'[商品カテゴリー])
)
)
  • 第一引数(2行目):売上明細'[売上]を評価し、SUM(‘売上明細'[売上])実行
  • 第一引数(4行目~):ALL(‘商品'[商品カテゴリー])によって、商品カテゴリー列へのフィルターをクリア

Calculate関数と一緒に使うことの多いDAX関数

  • ALL:すべて(抽出条件(フィルター)をすべて無視する)
  • ALLSELECTED:指定した列に係るフィルター”だけ”を除去します
  • ALLEXCEPT :指定した列に係るフィルター”以外の”全てのフィルターを除去します

CALCULATE関数)

Row Context に沿って(1行づつ、どのような属性の情報が記録されているのか判定して)計算を実行する

ALLSELECTED

ALLSELECTEDはレポート上で指定した抽出条件(フィルター、スライサーなど)を残します。

集計項目は指定した項目を削除します。
この例ではテーブルを指定したのですべての集計項目を削除です。

例)

CALCULATE( SUM(‘売上実績'[売上]) ,ALLSELECTED(‘都道府県’))
  • 何を算出したいか?→SUM(‘売上'[売上]:売上テーブルの売上列を合計する
  • フィルター条件は?→

例)売上比率

スライサーで選択した抽出条件を反映して値を算出

売上比率 = SUM('売上'[金額]) / CALCULATE(SUM('売上実績'[金額]),ALLSELECTED('都道府県'))
売上比率 = DIVIDE(SUM('販売実績'[売上]),[売上])

ALL

ALLは全データを取得する関数です。結果として全部の売上合計がでます。

*スライサーなどで抽出条件を設定したとしても、ピポットテーブルの値は、スライサーの抽出条件には従わず、すべてのデータの計算結果を算出する。

例)

*売上実績の売上の合計を算出する。その際、国テーブルのフィルター条件を全て外す

売上 = CALUCULATE(SUM('売上実績[売上]),ALL('国')
CALCULATE(SUM(‘売上'[売上]),ALL(‘売上’))
売上割合 =
DIVIDE(
SUM(売上明細 [売上]),
SUMX(ALL(売上明細), 売上明細[売上])
)

 ALLSELECTEDとALLEXCEPTの違い

大きい違いは抽出条件が残るか残らないか

Calculateの使用(計算式)例

売上げの比率を計算する場合

ALLSELECTEDにすることで、抽出をしても売上比率を合計1にできます。
抽出しても売上比率を変えたくない場合はALLを使用。

売上比率 = SUM('売上'[値]) / CALCULATE(SUM('売上'[値]),ALLSELECTED('売上'))

CALUCULATEとFILTER

引数がひとつ

CALUCULATE(
	SUM(テーブル名[視聴回数]),
      FILTER('テーブル名’,'テーブル名[列名]="PowerBI")
)

フィルターなど抽出の設定がされている場合でもすべてのテーブルを対象にする場合:ALL

FILTER(ALL(’テーブル名’),'テーブル名[列名]="PowerBI")
)

行の特定項目のみの合計

小項目のCTR合計 =
CALCULATE(
    [Sales、],
    FILTER('Product', 'Product'[Color] = "Red")
)

特定の列の条件にあう行のデータを1列抜き出したいとき

新規契約日 = CALCULATE(
   SELECTEDVALUE(
       'テーブル2'[契約(解約)日]),
       FILTER(
           'テーブル2',
           [契約種別]="新規契約"
           )
)

特定の列の複数の条件にあう行のデータを1列抜き出したいとき

新規契約日 = CALCULATE(
   SELECTEDVALUE(
       'テーブル2'[契約(解約)日]),
       FILTER(
           'テーブル2',
    AND(
      [契約種別]="新規契約",
           [契約種別]="休眠契約",
      )
)

特定の項目のみカウントする

〇〇数 = CALUCULATE(
     Count(
           'テーブル名'
           [列名] = '野菜'
      )
)
Average =
VAR numerator =
CALCULATE(SUM(‘テーブル名′[列名]) + SUM(テーブル名′[列名]) + SUM(テーブル名′[列名])
VAR denominator = 3 – ‘テーブル名′[列名] – ‘テーブル名′[列名] – ‘テーブル名′[列名]
Return DIVIDE(numerator, denominator)

コメント

タイトルとURLをコピーしました