LoginSignup
0
0

More than 1 year has passed since last update.

PowerQueryの列追加で型指定したら、条件列で「演算子 を型 Number および Text に適用できません」が発生した

Posted at

Power Queryに慣れてくると、ステップ数を減らしたくなりませんか?
私はなります。
そして頑張ってステップ数を減らした結果、エラーが発生しました。
同じ事象にぶち当たっている方の参考になれば幸いです。

【やりたかったこと】

サンプルのテーブル
image.png

  • 開始時刻データを「時(Hour)」と「分(Minute)」に分割
  • 分割後の「時(Hour)」の値が10時以降の場合、「10時以降です」と新規列に表示する

ゴールイメージ
image.png

それでは早速データを読み込み、ステップを作成していきます。
image.png

(以下コードは「詳細エディター」よりコピペしたものです)

let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    区切り記号の前に挿入されたテキスト = Table.AddColumn(ソース, "区切り記号の前のテキスト", each Text.BeforeDelimiter([開始時刻], ":"), type text),
    変更された型 = Table.TransformColumnTypes(区切り記号の前に挿入されたテキスト,{{"区切り記号の前のテキスト", Int64.Type}}),
    追加された条件列 = Table.AddColumn(変更された型, "開始時刻判定", each if [区切り記号の前のテキスト] >= 10 then "10時以降です" else null)
in
    追加された条件列

元の「開始時刻」列は残しておきたかったため、「列の分割」ではなく「列の追加(Table.AddColumn)」で開始時刻からHour・Minuteを抽出しました。

【データの型変更】

今回読み込んだ「開始時刻」は「08:45」のように秒数がなく、ゼロパディングされています。
そのため値は「テキスト型」として認識されています。

最終的には「Hourが10時以降か」という数値の比較を行いたいので、型変更(Table.TransformColumnTypes)で整数(Int64.Type)を指定しました。

【ステップを減らす】

ここで「列の追加(Table.AddColumn)」に戻って引数を確認すると、「type text」と型の指定が行われていることに気が付きます。
image.png

これって、初めからこの引数に整数(Int64.Type)を指定おけば、その次の「型の変更」ステップを削除できるのでは・・・?

ということで、ステップを以下のように変更してみました。

let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    // Table.AddColumnの引数で型を指定する
    区切り記号の前に挿入されたテキスト = Table.AddColumn(ソース, "区切り記号の前のテキスト", each Text.BeforeDelimiter([開始時刻], ":"), Int64.Type),
    // 型変更ステップは削除
    追加された条件列 = Table.AddColumn(区切り記号の前に挿入されたテキスト, "開始時刻判定", each if [区切り記号の前のテキスト] >= 10 then "10時以降です" else null)
in
    追加された条件列

【エラー発生】

image.png

勘のいい方は↑のキャプチャを見た時点でお気づきかもしれません。
Hour(区切り記号の前に挿入されたテキスト)列のヘッダーが「123」と整数アイコンになっているにも関わらず、値は「08」などゼロパディング(=テキスト型として認識)されています。
※勘の悪い私はここで何も気づかず、ハマりまくりました。

そして、先ほどまで問題なかった「Hourが10時以降か」の条件列でエラーが発生しています。

image.png

Expression.Error: 演算子 < を型 Number および Text に適用できません。
詳細:
    Operator=<
    Left=10
    Right=08

Power Queryに限った話ではないですが、エラーメッセージって初心者には呪文にしか見えません。
「つまり何をすればいいの?」ってしばらく悩みました。。

【解決策】

ステップを減らすのは諦め、最初に作成したステップ(列追加でテキスト型指定後、整数に型変更)に戻したところ、エラーは解消されました。
image.png

初心者的には、Table.AddColumnの引数で型指定するのと、Table.TransformColumnTypesで後から型指定するの、どう異なるのかが分かりません…。
何か分かれば追記しようと思います。

【補足】

今回のサンプルデータは開始時刻が全てHH:MM形式で入力されている前提としています。
もし「未入力の場合はハイフンが入る」などの場合は、整数型へ変換できないので更に注意が必要ですね…。

【参考情報】

実際のデータでは正確な時間計算が必要だったため、以下サイトを参照に時・分値を分割して使用しました。
HH:MM形式の時刻を扱う際は注意です(自戒)。

0
0
0

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
0
0