【Tableau】個人的Tips②

個人的Tips①に引き続き
頭の整理と機能の復習のためのTips、個人的備忘録です👍

Tips1 : WINDOW_MAXの使い時

WINDOW_MAX(式,[開始,終了])

公式の説明では
ウィンドウ内の式の最大値を返します
とありますが、イマイチしっくりこないので具体的に見てみます。

これを見ると、WINDOW_MAX()はビュー内のディメンションの粒度かつ
表計算で指定した向きに応じて最大値を返すようです。
3行目:WINDOW_MAX(SUM(売上))は、表(横)に沿った計算なので
各年度ごとに、3つのカテゴリの売上の最大値を算出します。
2013年であれば、家電が最大のため、919,537円が3列に入っています。

また、
4行目は、表(下)に沿った計算なので
各カテゴリごとに、4年間で最大の売上を算出します。
家具であれば、2016年が最大のため、1,420,503円が各年に入っています。

関数自体はだいたい理解できたので
どんな場面で使われるのか、具体例を挙げます。

WINDOW_MAX(SUM([売上]))=SUM([売上])

アドホック計算で上記の式を作成して”色”に入れると、
ウィンドウ内の最大売上のところだけ協調することができます!
DATASaberのOrdでもよく出てくる使い方かと思います。

Tips2 : IF/IIFとCASEの使い分け

あまりプログラミングが得意ではないので
結構こういった初歩的なところの理解が浅い気がします…

業務中、なんとなくいつもIFを使ってしまいますが
ふと、CASEと何が違うのか気になりました。
具体例を挙げて使い分けについてまとめていきます。

IFとIIFの違いについて

IF <test1> THEN <then1>
ELSEIF <test2> THEN <then2>
ELSEIF.....
[ELSE <default>]
END

具体例としては

IF SUM([売上])>=100,000 THEN "優良顧客"
ELSEIF SUM([売上])>=50,000 AND SUM([売上])<100,000 THEN "見込み顧客1"
ELSEIF SUM([売上])>=25,000 AND SUM([売上])<50,000 THEN "見込み顧客2"
ELSE ”一般顧客
END

売上額をもとに顧客を4つのグループに分割する例です。
3つ以上のパターン分けをするときにはIF文を使うと良さそうです。

IIF(<test>,<then>,<else>)

具体例としては

IIF(SUM([売上])>300,000, "達成", "未達成")

これを見ると、IIF文は返り値がブール値、
つまりTRUEかFALSEで値が返ってきます。
この構文だと、条件に対して真か偽どちらかを返すことになります。
IF文は複数分岐であるのに対し、IIF文は2つにしか分岐できない点が違いといえます。
よって、

  • IF文を使うとき

    • 3つ以上の条件分岐にしたいとき

  • IIF文を使うとき

    • 2つの条件分岐で返り値をブールにしたいとき

IIFで表現できる式はIFでも書くことができます。
ですが、IIFで書けるものはこちらで書いたほうがシンプルかつ
処理速度も速いので、IIFも使いこなせるほうが良さそうです👍

CASEはいつ使う?

ではIFとCASEはどう使い分けるのでしょうか。

CASE <expression>
WHEN <value1> THEN <then1>
WHEN <value2> THEN <then2>
...
[ELSE <default>]
END
CASE YEAR([出荷日])
WHEN 2017 THEN ‘2017年出荷’
WHEN 2018 THEN ‘2018年出荷’
WHEN 2019 THEN ‘2019年出荷’
WHEN 2020 THEN ‘2020年出荷’
ELSE ‘それ以外’
END

このように、特定の値にラベルを付けたいときに有効です。
しかし、CASE文は指定した条件と一致しているかどうか(=)しか判定できません。
つまり前述のIF文の具体例のような不等号(<>)を使った式はCASE文では書けません。逆に多数のラベリングをしたい場合はCASEのほうが向いていますね。

よって、

  • IF文は汎用性が高い

  • 返り値がブールでよい場合はIIF文を使ったほうがシンプルかつ処理速度がはやい

  • CASE文は条件が等号で表現でき、複数項目をラベリングするときに有効


個人的Tips③に続く…

この記事が気に入ったらサポートをしてみませんか?