Tableau Tips: 『数値のゼロ埋め』周りに関する小ネタメモ
小ネタです。
Tableauでワークブックを作成する際、体裁を整える為に情報の桁数部分を編集したいというケースは割とあったりします。分かり易い例が『数値のゼロ埋め』です。日付部分の情報で二桁に満たない数値の場合に『01』というような感じで桁数を補完する為にゼロを埋めるようなケースですね。当エントリではその辺りの処理を行いたい時に使えそうな小ネタをまとめてみました。
日付の書式設定で日付データの桁数を0埋め
単一の日付型データ(DATE,TIMESTAMP)については、『日付の書式設定』を行う事で足りない桁数を補完する事が出来ます。デフォルト設定のままであれば1桁数値の日付部分は1桁のままですが、
日付項目を右クリックして『書式設定』を選択、
『標準の短い日付形式』を選択する事で0が補完されました!『カスタム』を指定&未設定のままでも同じ挙動になるようです。
カスタム指定で任意のフォーマットを指定する事も勿論可能です。
NULL値を0で置換 - 数値関数zn()を使う
『データがあればその数値を出すが、無ければ代わりに0を出したい』という要件もあるかと思います。Tableauではzn関数というものが用意されており、こちらを使って要望を実現する事が出来そうです。詳細な内容については以下ドキュメント等をご参照ください。
LPAD/RPADのような『ゼロ埋め』をして文字列として表示したい
任意の数値項目を文字列として取得し、足りない桁数分を任意の文字列で埋める...SQLや各種プログラミング言語に於けるLPAD・RPAD関数の様な事をしたい、というケースも往々にしてあるかと思います。
ここは『LPAD・RPAD関数的なものがあるんならそれを使えば良いんじゃない?』とシンプルに考えたのですが、残念ながら該当する関数は現時点では用意されていないようです。orz
TableauのCommunityに、今回言及したテーマに関する内容が投稿されていました。力業で解決した様です。うーむ...w
日付型項目であれば『1桁部分の十の位を0で埋める』程度なので、そこまでアレな感じはしないのでひとまずこんな感じでそれぞれのパーツをゼロ埋めする関数を設け、最終的にはそれらの関数を使って1つのカスタマイズ文字列を作成する、というものを作ってみました。(※書いた後で思いましたが、STR(DATEPARTの部分はDATENAME関数でも行けそうですね)
IF ( LEN(STR(DATEPART('month',[受注日]))) = 1 ) THEN "0" + STR(DATEPART('month',[受注日])) ELSE STR(DATEPART('month',[受注日])) END
IF ( LEN(STR(DATEPART('day',[受注日]))) = 1 ) THEN "0" + STR(DATEPART('day',[受注日])) ELSE STR(DATEPART('day',[受注日])) END
IF ( LEN(STR(DATEPART('month',[発送日]))) = 1 ) THEN "0" + STR(DATEPART('month',[発送日])) ELSE STR(DATEPART('month',[発送日])) END
IF ( LEN(STR(DATEPART('day',[発送日]))) = 1 ) THEN "0" + STR(DATEPART('day',[発送日])) ELSE STR(DATEPART('day',[発送日])) END
[受注日の月部分(文字列)] + "/" + [受注日の日部分(文字列)] + "〜" + [発送日の月部分(文字列)] + "/" + [発送日の日部分(文字列)]
生成された文字列はこの様な感じです。若干手間は掛かりますが、やりたい事は実現出来ました。
追記:LPAD/RPADのような『ゼロ埋め』をして文字列として表示したい
社内でもっとスマートな対処方法が挙がっていましたので追記。
日付部分を抽出した後埋める桁数分の文字列を左側に付与し、その状態の文字列をRIGHT関数で右から桁数分のところでカットする事で『0埋め』を実現しています。こちらの方がよりシンプルでオススメですね!
RIGHT("00"+STR(DATEPART('day',[受注日])),2)
まとめ
という訳でゼロ埋め、所謂『パディング』処理で使えそうなネタを集めてみました。この辺りはもうちょっとスマートな手法もあるような気がしますので、『こんな使い方もあるよ』という方がいらっしゃいましたら是非コメント等で情報を共有頂けますと幸いです(というか普通にLPAD/RPAD関数作って欲しい...)。こちらからは以上です。