こんにちは、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)でも更新中なので、よかったらフォローしてね🧸💡
ではまた次の投稿で〜!
コメント