SQLBIのYouTubeビデオで学習したこと、何度やっても忘れちゃうので書き留めておくことにします。
英語も得意じゃないので、訳しながらやってみながらなのでもしかしたら、受け止め方が違っている可能性もあります。
CALCULATE in DAX #01 から
自分で用意したデータです。▼
合計額の検証用にあらかじめ金額を計算しておきました。
(ビデオとかで出てくる数字は大きすぎてなかなか正しいかどうかわかんないから、正しい数字がわかってると理解しやすいので)
Power BIに取り込んで、色ごとの売上高をテーブルビジュアルにしました。
おっと!待て待て。
どうやら、ビデオの中はちゃんとモデリングしてあるっぽい。
これはベタ打ちのデータ。ファクトしかないんだよねと。
まぁ、いいか。これでモデリングしてあるときと、どう動きが違うかやってみることにしよう。せっかくだから。
おお、言われてるとおり、みんな同じ値になってますな。
書いたDAX式は↓↓↓だけ
Greenの売上 = CALCULATE('売上'[売上高],'売上'[color]="Green")
ちなみに、この「9000」という数字はGreenの売上合計の数字。でも、どう考えてもblackやGlodの中にGreenの売り上げがあるわけがない。
売上高の中から色がGreenのものをフィルターしているつもりの式だけど実際には違う動きをしているとのこと。
DAX式で実際にはどんな事をしているかを記述すると
Greenの売上 = CALCULATE('売上'[売上高],FILTER(ALL('売上'[color]),'売上'[color]="Green"))
なるほど。「black」の行でもすべての売り上げの中から「Green」のだけでフィルターし、次の「Blue」の行でも同じようにすべての売り上げの中から「Green」だけで売上をフィルターするという具合に、すべての行で同じことをしているから全部が同じ値になっているってことだったんだ。
ではでは、どうしたら正しく集計して数値をだせるの?
続きのビデをを見てみた。
新顔 KEEPFILTERS関数が出てきた!
この関数はどうやら今されているフィルターをキープしてくれそうだ。さっきのDAX式を変更してみた
Greenの売上 = CALCULATE('売上'[売上高],KEEPFILTERS('売上'[color]="Green"))
こうすることで、書いてなくても影響してしまうALL関数の影響をうけずに各色にフィルターされた状態をキープし、そのうえでGreenでフィルターしてくれるということだ!
わーい!当たり前といえば当たり前の結果だが、さっきはできなかった。そう、Greenの売り上げと言っているのだから、Greenの行だけに集計値がでるのが正しい。なるほど、KEEPFILTERS関数覚えておこう。
さて、続きがある。
次はREMOVEFILTERS関数の話のようだ。この関数は今あるフィルターをなしにしてくれる関数とな。
Allcolors = CALCULATE('売上'[売上高],REMOVEFILTERS('売上'[color]))
肝心なのはこの、REMOVEFILTERS関数はすべてのフィルターを解除すること。
テーブルの中の色ごとのフィルターだけでなく、スライサーの選択によるFILTERも解除してくれる事を覚えておかなければ!
確かに色ごとのFILTERもはずれて、合計売上額と同じ値になっている。
スライサーでblack、Blue、Goldに絞ると、売上高は3アイテムの売上額になっているけれど、ALLcolorsはスライサーにも影響されずすべての売上高の合計値を保っている。
全体に対する割合などを出すときは必要になるなぁ。なるほど。
このまま、色ごとの集計ではなく店舗ごとの集計になるように変えてみる。
おお!!なるほど!!!
色ではなく、店舗ごとの集計にしさらにスライサーでBlack、Blue、Goldを選択している。売上高の列はスライサーの影響で今は3色の合計値が表示されているが、REMOVEFILTERS関数を使ってあるAllcolors列では、スライサーに影響されずに店舗ごとのすべての色の売上合計値を保った値になっている。。。という事だね。
今日の学習はここまで。
続きはまた明日!