【保存版】1日1DAX DAY1~DAY10:Power BI初心者のためのDAX入門まとめ

こんにちは、Power BI女子です!

毎日1つずつDAX関数を紹介する【#1日1DAX】チャレンジを始めて、ついに10日目を迎えました
この取り組みは、DAX初心者の方が「毎日少しずつ、無理なくスキルアップできる」ことを目的にしています。

今回は、これまでのDAY 1〜DAY 10までの内容をブログでまとめました。
「見逃してしまった!」「あとで見返したい!」という方は、ぜひブックマークしておいてください

それでは、DAX関数の世界へどうぞ!


DAY 1:CALCULATE

一言でいうと、計算にフィルターをかける関数!

<フィルター関数>

DAX:CALCULATE(<表現式>, <フィルター1>, <フィルター2>, …)

売上全体から東京の売上のみ別で表示したいとき使うよ!

例:東京売上 = CALCULATE(SUM(‘売上'[売上]) ,’地域'[地域] = “東京”)


DAY 2:RELATED

「あっちのテーブルの列、こっちで使いたい…!」って思ったことない? たとえば「売上テーブル」には顧客IDだけあるけど、顧客の名前は「顧客マスタ」にしかない…! そんなときに使うのがRELATED 関数!

<リレーションシップ関数>

DAX:RELATED(戻したい列)

でも待って、ビジュアル作成するときにはリレーションがされていれば、RELATEDしなくても、顧客名追加できるじゃない?と思うよね

それは正しい!RELATEDはビジュアルでは自動でOKだけど、DAXで「新しい列を作る」ときに必要!

顧客名を売上テーブルに入れたい場合に使うよ

例:顧客名 = RELATED(顧客マスタ[顧客名])
この式を使えば、売上テーブルに顧客名を表示できるよ(もちろん、顧客IDでちゃんとリレーションしてあるのが前提ね!)


DAY 3:LOOKUPVALUE

「リレーションないんだけど、別のテーブルの値ほしい…!」 そんなときに活躍するのがLOOKUPVALUE 関数!

<フィルター関数>

DAX:LOOKUPVALUE(戻したい列, 検索列1, 検索値1 [, 検索列2, 検索値2, …])

「売上テーブル」に社員名で表示したい場合! 「社員マスタ」はリレーションないけど、LOOKUPVALUEを使用すると社員名を取り出せるよ

例:社員名 = LOOKUPVALUE(‘社員'[社員名],’社員'[顧客ID],’売上'[顧客ID])

**「このIDが一致するやつの、名前をちょうだい」**って意味になるよ

★RELATEDとのちがいは?

RELATED: リレーションシップ必要!モデルにリレーションがある前提 LOOKUPVALUE:リレーションシップ 不要!値でマッチすれば取得できる!


DAY 4:IF / SWITCHの違い

「条件によって値を変えたい!」 そんなときに大活躍するのがIF関数とSWITCH関数!

<論理関数>

■IF関数の基本形

DAX:IF(条件, TRUEのときの値, FALSEのときの値)

売上が100万円以上なら「優良顧客」、それ以外は「一般」

例:IF([売上] >= 1000000, “優良顧客”, “一般”)

<論理関数>

■SWITCH関数の基本形(複数条件におすすめ!)

DAX:SWITCH(値, 条件1, 結果1, 条件2, 結果2, … それ以外, デフォルト)

売上ランクを数値で分類したい!

例:SWITCH(TRUE(),
 [売上] >= 1000000, “Sランク”,
 [売上] >= 500000, “Aランク”,
 [売上] >= 100000, “Bランク”,”Cランク” )

◆IFが多すぎると… → 読みにくい! → ネスト地獄

◆SWITCHなら… → 条件ごとにスッキリ

→ 見やすくて修正もしやすい!


DAY 5:SUMとSUMXの違い

SUMとSUMXって何が違うの〜?
SUM:列の合計
SUMX:行ごとに計算して合計!

見た目は似てるけど、動きは全然違う!

<集計関数>

DAX:SUM(<合計する数値を含む列>)

例:売上合計 = SUM(‘売上'[金額])

単純に「列の合計」を出す関数 → 売上テーブルの「金額」列をそのまま合計

DAX:SUMX(<式が評価される行を含むテーブル>,<テーブルの行ごとに評価される式>)

例:売上合計(SUMX) = SUMX(‘商品’,[単価]*[数量])

行ごとに計算してから合計する関数→ 各行で「単価×数量」を出してから、それを合計!

列に直接合計できるならSUM、 行ごとの計算が必要なら、SUMXの出番!


DAY 6:FILTER

条件でテーブルを絞り込む関数!そのままだと使いづらいけど、CALCULATEの中に入れると超強力

<フィルター関数>

DAX:FILTER(<フィルター処理するテーブル>,<条件>)

実は… CALCULATEにはFILTERを入れなくても使えるよ!でも

こんなときは入れて使うのが◎

1. 複雑な条件をつけたいとき

2. 複数の列を条件にしたいとき

3. 数式を含む場合(例:単価 × 数量)


例: 売上(FILTER) = CALCULATE( SUM(‘売上'[金額]), FILTER(‘売上’, ‘売上'[金額] > 300 && [数量] < 3) )

→ これは「金額が300超えて、数量が3未満」のデータだけを合計!

FILTERは1行ずつ条件を評価してくれる“便利なフィルター係”

CALCULATEの中でこそ真価を発揮するよ!


DAY 7:ALL vs ALLEXCEPT

どっちも「フィルターを外す関数」だけど、使い方が違う!

<フィルター関数>

DAX:ALL( <フィルターをクリアするテーブル> |<フィルターをクリアする列>)

ALL(テーブル or 列) → 完全にフィルターを無視!

例:売上(ALL) = CALCULATE(SUM(‘売上'[金額]),ALL(‘売上’)) → どのフィルターがかかってても、「全部の売上」を合計!

DAX:ALLEXCEPT( <後続の引数で指定されている列のフィルターを除き、すべてのフィルターが削除されるテーブル> |<フィルターを保持する必要がある列>)

ALLEXCEPT(テーブル, 残したい列) → この列のフィルターだけ残して、他は無視!

例:売上(ALLEXCEPT) = CALCULATE(SUM(‘売上'[金額]),ALLEXCEPT(‘売上’,’売上'[商品コード])) → 「商品」ごとの合計を出したいとき便利!


DAY 8:VALUES

今フィルターされてる値の一覧がほしい!

<テーブル操作関数>

DAX:VALUES(<一意の値が返される列、または行が返されるテーブル>)

VALUESは「指定列のユニークな値(重複なし)を返す」 関数です!

例:顧客数 = COUNTROWS(VALUES(‘売上'[顧客名]))→ 「顧客が何種類あるか」をカウント!


DAY 9:DISTINCT / DISTINCTCOUNT

重複をなくして「ユニークな値」だけ見たい?

<テーブル操作関数>

DAX:DISTINCT(<一意の行が返されるテーブル>)

ユニークな値の一覧を返す

<集計関数>

DAX:DISTINCTCOUNT(<カウントする値を含む列>)

ユニークな値の数だけ返す

例:カテゴリ数(重複なし) = DISTINCTCOUNT(‘カテゴリ'[カテゴリ])→ 「カテゴリ」が何種類あるか数える(例:3)

DISTINCTは「重複しないリスト」、 DISTINCTCOUNTは「重複しないリストの数!」

DAY 10:RANKX

順位を出したい?ランキングを作りたい?

<統計関数>

DAX:RANKX(<対象テーブル>,<対象列>)

例:売上ランキング = RANKX(ALL('売上'[顧客名]),[売上合計])

→売上ランキングなど、順位を出したいときに!

応用編: 同率順位(タイ)は自動で処理される KPI表示や「TOP5商品」抽出にも使えるよ


10日間にわたってお届けしてきた「#1日1DAX」、いかがでしたか?📊💛
DAXって最初はちょっぴり難しそうだけど、
“ちょっとずつ・毎日コツコツ” 覚えていけば、必ず味方になってくれます!

このシリーズが、みなさんのPower BIライフの「ひとくちDAX習慣」になれたらうれしいです。

次回の Day11〜20 も、もっと便利で楽しいDAXをたっぷり紹介予定なのでお楽しみに✨
X(@powerbi_zoshi)でも更新中なので、よかったらフォローしてね🧸💡

ではまた次の投稿で〜!

コメント

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