結構使えるかもしれないPowerQuery関数② 月の数字の頭に0を追加する

年月の「月」を表すカラムのデータ型がテキストで1~9月の頭に0がない場合、
1-10-11-2-3-4-5-6-7-8-9-10の順になり、1から12月まで順に並んでくれません

そんな時はクエリ上で1桁の月の頭に0をくっつけてあげることで解消します。
では、クエリ上で1から9までの数字だけに”0″を追加するにはどうしたらよいでしょうか

並びだけなら月のデータ型を数値にすれば一発解決なんですが
他クエリとの結合時に型の不一致でエラーになったり、数値だと勝手に計算をされたりしてしまうので、何かと不便です。
出来ればそのままテキスト型で作りたいですよね。
f:id:frogwell_powerBI_blog:20170824142734p:plainこうなっちゃうんですよね。

そこで、「Text.PadStart」 を使ってみます

  ★Text.PadStart (目的の文字列,桁数,追加したい文字)
=文字列が指定した桁数になるまで先頭に指
定の文字を追加します

①カスタム列を作るので、カラム名をわかりやすく変えておきます。

f:id:frogwell_powerBI_blog:20170824144720p:plain

②以下の関数をカスタム列作成で記述します。

f:id:frogwell_powerBI_blog:20170824144849p:plain
※0を“ ”(ダブルコーテーション)で囲うのを忘れずに。

・桁が2になるまで
・”0″を繰り返し
・文字列の先頭に追加する

という動作をしてくれます。
10以上の月はすでに2桁持っているので、0は追加されません。
結果、こうなります↓

f:id:frogwell_powerBI_blog:20170824145214p:plain

これなら軸の並びも

f:id:frogwell_powerBI_blog:20170824145432p:plain

正しくなりますね。

同じような関数で、Text.PadEnd もあります
PadStartと逆で、こちらは文字列のお尻に文字を追加してくれます。

それぞれ、「コードの桁数をそろえ」たり、
if 関数と合わせれば、「▼▼で始まるものには●●を追加」のように
コードに法則を持たせたりしたいときに使えると思います。

少しややこしくなりますが参考に。

f:id:frogwell_powerBI_blog:20170824152742p:plain

if Text.Range([商品番号],0,1)=”A” then Text.PadStart([商品番号],10,”1″) else if
…(略)…
else Text.PadStart([商品番号],10,”9″)

・if /もし
・Text.Range([商品番号],0,1) /商品番号の0文字目からの1文字が
・=”A”  / Aだった場合
・then Text.PadStart([商品番号],10,”1″]) /10桁になるまで1を繰り返しくっつける
・else /それ以外の場合は
・Text.PadStart([商品番号],10,”9″) /10桁になるまで9を繰り返しくっつける

というようにAで始まるものには頭に1を、bで始まるものには2を、Cで始まるものには3を、それ以外は9を、10桁になるまで繰り返し付与する
というような条件作成もできます。

Power Queryの関数は、
リファレンスをみてどんなものがあるかを一通り頭にとどめておくと、
いろいろと組み合わせてどこかで便利に使える機会が必ずあると思います

PowerQueryの式について 公式の詳細はこちら