
パワークエリのピボット解除は便利ですよね。一括で縦横並びを縦縦並びに変えられます。ところが、元データに空欄が混じると2つ問題が出てきます。1つ目は空欄を含むデータが非表示になることです。
こちらは「値置換」で対応できます。ところが元データに列を追加した時、追加した「値置換」が追加列に対して行われなくなります。これが2つ目の問題です。
原因は値置換を行う時に、対象列名が記録されてしまっていて、追加列に対しては「値置換」が行われないのです。こちらはコードを直接置き換えることで対応できます。
今回の課題は、実際の業務ではあまり遭遇する機会が少ないかもしれませんが、Power Queryの「ハードコード」という特性を掴むにはとてもいい課題です
ぜひ、手を動かしてPower Queryの特性を掴んでみてください!
では、上記の①/1つ目の問題から②/2つ目の問題の順番で解説を行って行きます!
①空欄の置換
下の図は、上の表がピボット解除前の元データです
下の表は、元のデータをピボット解除したデータです

ピボット解除時は元データに空欄が含まれていると、空欄のデータは出力されません
例えば、図の下の表では「かつ丼の2020/01/02」の空欄データは抜けてしまっています
空欄データを「0」で表示したい時には、値置換で対応します

ピボット解除を行うクエリをPower Queryエディタ(以降、エディタ)で開くと、上の画像の図のように空欄は「null」で表示されます
こちらの「null」を「0」で置き換えます

置換処理を行う前は、Ctrl+Aで全データを選択しておいてください
値置換を行えば、下の画像のように空欄が0で表示されます

②コード変更
①で置換を行いましたが、次の画像のように元データに列を追加すると置換に関する問題が発生します

下の画像のように、追加された2020/01/08のかつ丼の空欄が0で反映されません
この理由は、Power Queryの特性であるハードコードにあります
ハードコードとは、エディタ内のステップに処理の内容が値とともに記録されることです
では、0への置換を行ったクエリの中味をエディタで見てみます

上の画像は、空欄から0への置換を行ったコードです
このコードを見ると、0への置換処理は「2020/01/07」までの列に対して行うことが記録されています
ですので、ハードコードされていない列、上記のコードに記載されていない列が追加されると「置換」は行われません
この状況をどのように改善するかというと、コード自体の置換を行います
まずは、列名が記載されたコードは削除します

その後削除したコードを、下の図のようにテーブル内の全ての「列名」を表示するTable.ColumnNamesで置き換えます

そうすれば、いくら列を追加しても置換が行われるようになります

今回の解説は以上になります
②のコード変更については、概要だけを解説しました
Power Queryの言語である「M言語」については、別途、シリーズで記事を書きますので、そちらでは詳細な解説を行いたいと思います
記事を最後まで読んで下さり、誠にありがとうございました


コメントを残す