18
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Microsoft Power BIAdvent Calendar 2022

Day 11

Power BIで和暦の日付変換でつまづいた話

Last updated at Posted at 2022-12-10

はじめに

Power BIを使ってPower Queryでのデータ変換の勉強をしていた時につまづいた話を紹介します。ちょっとしたつまづきかもしれませんが、一つの学びを得られたので経緯をまとめたいと思います。

首相官邸のWebサイトから歴代内閣の一覧を取得

そもそもは、Power BIのデータの取得元としてWebサイトから取れるので、試してみようと思ったところからでした。
何を取ろうかと思ってとりあえず見てみたのが首相官邸ホームページの歴代内閣のページ。

上記のURLをデータの取得元として指定してからPower Queryを開くと案外きれいにとれていました。あとは下図の「Column5」のように在職日数がFrom~Toで一項目となっているのをFrom,Toで2項目に分け、和暦表示でテキスト形式になっているのを日付形式にしようと考えました。

キャプチャ5.PNG

最初にやったこと(エラーになった操作)

「例からの列」を使用して、From-ToのFromの和暦を入力するとそれっぽく取れました。

キャプチャ6.PNG

表示される変換式も、以下のようにおかしくなかったので、そのまま「OK」で確定させました。

Text.BeforeDeliminater([Column5],"~")

同様に「例からの列」を使ってFrom-ToのToの和暦を入力し、同様に不自然でなかったので「OK」で確定させました。

すっかり満足したので、それぞれの項目のデータ型を「日付」に変換して「閉じて適用」でPower Queryを終了させました。

ところがそこで意外なエラーが。

キャプチャ7.PNG

原因

エラーとなった原因を確認するため、まず「表示」タブから「データのプレビュー」にある「列の品質」にチェックをつけます。
確かに該当項目にエラーがあります(ちょうど100件なので3個=3%)。

キャプチャ8.PNG

下にスクロールすると確かにErrorとなっているデータがありました。クリックすると下にエラーの原因が出てきます。

キャプチャ9.PNG

・・・なるほど、和暦のテキストから日付に変換するときに、「元年」はうまく変換できないということがわかりました。

対応

うーんと考えた結果、抽出した和暦の"元"の文字を"1"に置き換えることで対応しました。

Text.Replace([区切り記号の前のテキスト], "元", "1")

これで無事エラーが解消されました。

おわりに

画面に表示されている範囲には元年のレコードが含まれていなかったので、その場でエラーに気づけませんでした。いずれにせよ、「原因」で触れたように「列の品質」を使えばエラーの割合が表示されるので、エラーの割合が0から3%になった、と途中で気づけたかもしれません。

「データのプレビュー」では、ほかにも「列の分布」や「列のプロファイル」といった、直感的にデータを変換、クリーンアップ、解釈するための機能が提供されています。

今までこれらの機能の持つ意味がピンと来ていなかったのですが、今後はこのような便利な機能を活用し(既定では最初の1000件でプロファイリングすることに注意ですが)、ステップごとに意図せぬエラーを生んでいないか確認しながら操作を進めたほうがよいと学べました。

18
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?