※シェアなど比率を出すときによく使います
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)
コメント