カテゴリー別アーカイブ: コラム

【M言語実践】顧客の2回目のリピート率を分析する方法

 パワークエリはとても便利ですが、M言語となると使い道がよく分からないと思います

今回は、M言語を使用した実践的な分析手法を紹介したいと思います

私は以前、EC通販会社に勤めていました

 EC通販では顧客の顔が見えないので、データからどういう顧客がいて・どういう行動をしているのか・を分析する必要があります

様々な分析を行いましたが、指標として一番重視していたのが「顧客の2回目リピート率」です

顧客の2回目のリピート率が何故重要なのか?

 これには様々な理由がありますが、一番の理由は2回目のリピート率を少しでも改善すれば、売上が長期的に増加するからです

読者の方でも外食をした際に「あの店には2度と行かない・・・」という経験をした方も多いと思います

 逆に同じ店で2度食事をして、その店に慣れてくると3回目、4回目とリピートする意欲する気が高くなると思います

 ビジネスでも「2回目のリピート」というハードルをクリアすることの意義はとても大きいのです

ただし、普通にエクセルで2回目のリピート率を算出しようとするとかなり面倒です

私は一時期、IF関数で注文回数を付与して、2回目の注文だけシートを分けたりしていました

ましてや、2回目のリピートの有無別に顧客分析をしようとするとかなりハードルが高いです 

ところが、M言語を使えば2回目のリピート率は意外と簡単に算出できます!

ポイント

今回使用するデータは会員別の注文データです

 上の画像では2回目の注文があった会員に黄色の印を付けましたが、2回目の注文があった会員もいれば、そうでない会員もいます

ここからまず、会員番号毎に注文回数を付与します

そして、上の画像の表から次のような表を作成します

上の画像では、その前の画像の表から注文回数を「1回」に絞り込んであります

結果として、会員番号の列は会員番号が重複なく並んでいます

そして「2回目判定用」なる列が追加されています

こちらは注文回数の差分です

こちらの差分は注文回数を「1回」に絞り込んだ場合にはになります

この列が1の会員は2回目の注文があった会員です

 つまり、「2回目判定用」の列の合計を「注文回数」の列の合計で割れば2回目のリピート率が出るという仕掛けになります

(注)尚、上記の画像のデータ以前に注文履歴は無いという前提で解説を行わせて頂きます。ですので、本当は初回の注文ではないのでは?という疑問は持つ必要はありません

注文回数の付与

ポイントで解説した通り、まずは会員番号別に注文回数を付与します

こちらについての詳細については、過去の記事をご確認をお願いします

大きく分けて2つ行うことがあります

1つ目は、グループ化です

会員ID別(会員番号別)に「すべての行」でグループ化を行い、会員ID別にテーブルを作成します

次にカスタム列・作成画面にて、テーブル別にM関数/Table.AddIndexColumnを使用して連番を付与します

すると、注文回数が連番で付与されます

注文回数の差分の算出

こちらについても詳細は過去の記事をご参照願います

この差分を算出するには、パワークエリでは本来は困難な「セル単位」や「行単位」の処理に踏み込む必要があります

ポイントとなるのは、こちらも「連番」です

上の画像のように連番をつけると、連番と画面左の行番号とが対応するようになります

ちなみに、M言語は0ベースなので、実際にM言語で使用する1行目は0になります

ここから波括弧:{}を使用します

波括弧は行番号を表します

例えば、注文回数{0}とした場合には、注文回数列の1行目のデータなります

この波括弧と連番をうまく組み合わせることで、注文回数の差分を算出します

上の画像にて黄色の印を付けた波括弧内は、注文回数の各行の1つ下の行番号の値になります([注文回数]の前のDataは前ステップの名称になります)

つまり上の画像内では、注文回数列をA列だとすると<=A3-A2>と同様の計算が行われています

ちなみに、try~otherwiseとすることでエラーを回避しています

注文回数の絞り込み

 上記まで行ったところで、エディタを確認すると以下の画像のような状態になっています

ここから注文回数の列にフィルターをかけます

こうすれば注文回数の列は「1」のみ、2回目判定用の列は0か1になります

ここまでくれば、後は各列を合計して2回目のリピート率を算出するだけです

合計にはM関数/List.Sum関数を使用します

 上の画像では、2つの合計値を/で割り算をすることでリピート率を算出しています

%の表示にしたい場合には、List.Sum関数でリスト化した内容をテーブル化した上で%に型式を変えます

<まとめ>

今回はM言語の仕組みを使用して、2回目のリピート率を算出しました

2回目のリピート率を算出するのに、主に2つのM言語の技術を活用しました

1つ目はグループ化を通じて各グループ毎に連番を付与する仕組みです

2つ目は注文回数の差分を連番と波括弧を組み合わせて算出する仕組みです

 この2つの技術を通じて、注文回数と2回目の注文有無を0か1で表現できるようにしました

 今回は2回目のリピート率を算出しましたが、本当に大事なのは2回目のリピートがあった会員とそうでない会員との違いは何かを調べることです

 今回作成したクエリを複製して途中のステップを削除すれば、会員番号別に注文の有無が表示できます

 他のデータを会員別に紐づければ、2回目の注文があった会員とそうでない会員の購入している商品の違いなども調べることができるはずです

 更に注文回数の差分を抽出する仕組みを応用して、初回から2回目までの日数なども調べることができます

M言語が本当に有効なのはこういった複雑な分析が必要な場面だと思います

 特にグループ化から連番を付与する仕組みと差分を算出する仕組みは、分析作業にて使う場面も多いと思いますので、しっかり活用できるようにしておきましょう!


にほんブログ村

【M言語実践】グループ別に指定桁数にて連番を付与してIDを設定する裏技

 パワークエリはとても便利です。利用者もどんどん増えていると思います。ただ、パワークエリの言語のM言語となると「何ができるの?」となると思いますので、今回は実践での活用例を紹介したいと思います

今回は下の画像の表にある商品に、「グループ別に1から始まる番号」で採番した連番を付与した商品IDを付けたいと思います

今回のポイント

今回はM言語を使用して「グループ別に連番」を付与した後に、”0”で桁数を揃えます

グループ別に連番を付与する方法については過去の記事を参照してください!

こちらは、グループ化機能とM関数のTable.AddIndexColumnを組み合わせます!!

では「”0”で桁数を揃える」という点について、詳細に解説します

例えば、連番が2の場合には「002」にします。もし10の場合には「010」とします

 こちらの桁数を揃える方法については、「例からの列」機能を活用する方法もありますが、今回はM関数の「Text.PadStart」を使用します

このText.PadStartは下のように使います

=Text.PadStar(文字列,桁数,”補う文字列”)

今回は、”0”を補って下の画像のように指定の桁数にします

上の画像では、”1”に”0”を4つ補って5桁にしています

それでは、今回のポイントとなるM関数/Text.PadStartを解説したところで、実際の商品コードの設定に入りたいと思います

文字コードの付与

 今回は、商品グループがCDの場合には「A」、DVDの場合には「B」という風に、商品コードの一桁目を商品グループで表現します

この場合は、条件列を使用するのが一番、手っ取り早いです

例えば、商品グループ名がCDに等しい場合は、Aを出力するといった具合で条件列を設定します

グループ別連番の付与

こちらについての詳細については、過去の記事をご参照願います

概要だけを解説しますと、まずは「すべての行」にてグループ化を行います

すると、グループ別にテーブルが作成されます

その後、カスタム列・作成画面でTable.AddIndexColumnを追加してグループ別に連番を作成します

上の画面でカスタム列を作成した結果が次の画像です

M関数により”0”を補う

 では、グループ別に連番を作成できたので、グループコード/A,B,Cと連番を組み合わせて4桁の商品コードを作成します

グループコード以降は”0”を補って3桁(全体で4桁)にします

M関数/Text.PadStartは次のように使用します

=Text.PadStart(Text.From([連番]),3,”0″)

1番目の引数で「Text.From関数」にて文字列にするのがポイントです

これで”0”を補った3桁が作成できました

この3桁をグループコード/と結合(列のマージ)させれば4桁の商品コードは完成です

次の画像が4桁の商品コードの完成後です

<まとめ>

今回はM言語を使用して、グループ別に1からはじまる連番を採番した上で商品コードを作成しました

ポイントとしてはM関数/Text.PadStartを使用して”0”を指定桁数になるように補う点になります

M関数を使用しない方法もありますが、M関数を使用した方がミスなく作成が行えます

最後に、グループ別に連番を採番する技術はとても実践的な技術です

ぜひ早めに習得しておきましょう!


にほんブログ村

マスタデータの履歴管理を行う方法

パワークエリの「クエリのマージ機能」はとても便利で、エクセル関数のVLOOKUP関数より使いやすいです

「クエリのマージ機能」を有効活用すれば、参照表(マスタデータ)の活用もかなり手軽に行えます

 今回の記事では、「クエリのマージ機能」に加えて「グループ化機能」も活用して、マスタデータを更に有効に活用できるようにする方法を解説します!

マスタデータの履歴管理

マスタデータには顧客マスタや商品マスタなど様々なものがあります

種類は様々でも、絶対的なルールが一つあります

これは、マスタデータには重複があってはならないということです

もし、マスタデータのIDが「1,2,3・・・」と採番されていたとしたら、IDの1が2つあってはならないということです

ところが、

マスタデータの変更履歴を残す必要がある場合があります

例えば、以下の画像のケースです

顧客マスタ

上の画像は顧客マスタです

ID:1番の中尾さんのマスタデータが重複しています

何故かというと、IDが1番の中尾さんが名古屋市から東京に引っ越ししているからです

ただし、データ管理上は前の住所も残しておく必要があります

この場合は、日付が最新(最大)のもののみマスタデータとして表示できるように工夫する必要があります

では次から、日付が最新(最大)のもののみをマスタデータとして表示する為のポイントを2つ紹介します

ポイント

グループ化

パワークエリにはグループ化という機能があり、重複を排除してグループ化しつつ合計処理などの操作を行えます

 今回はグループ化機能の操作を「最大」で指定して、IDの重複がある場合には「最大の日付」のものを抽出できるようにします

複数キーによるマージ

エクセル関数のVLOOKUP関数では、検索値は一つのみ指定できます

パワークエリのマージ機能では、実は、複数列を照合列として指定できます

手順

マスタデータからクエリ作成

解説は、前述のマスタデータをテーブル化してエディタを開くところからははじめさせて頂きます

エディタを開いたら、下の画像の日付の列が時刻表示になってしまっています

こちらは、日付形式に直しておいてください

日付形式に直したら、クエリ名を「顧客マスタ_元」としてください

グループ化による最大日付の抽出

まずは「顧客マスタ_元」クエリを「複製」してクエリ名を「顧客マスタ_グループ化」に変更してください

この後、ポイントで前述したように下の画像のような設定でグループ化を行ってください

グループ化(最大)

グループ化を行うと、前述のID:1番の方の日付が最新の日付になっているはずです

クエリのマージ処理

 では、次にクエリのマージを指定しますが、下の画像の「新規としてクエリをマージ」を指定して、新規にクエリを作成できるようにします

マージ対象のクエリは下の画像のように「顧客マスタ_元」を指定します

ポイントの章で前述したように、複数の列を照合列として指定します

 今回のケースの場合は、IDだけでなく「日付」も指定することで、IDに重複がある場合には、日付も一致したマスタデータのみをマージできるようにします

下の画像のように照合列として複数列を指定する場合には、Ctrlキーを押しながら指定します

画像に alt 属性が指定されていません。ファイル名: image-106.png

マージする条件を指定した後は、マージされたクエリの中かから「ID列と日付」以外を展開します

マージされた列を展開した後は、列の順番等を整えてください

<まとめ>

 今回は、パワークエリのグループ化機能とマージ機能をうまく組み合わせてマスタデータの履歴管理を行う方法を解説しました

今回の最大のポイントはグループ化機能です

グループ化を行う際に、操作を「最大」にして日付が最大のもののみを抽出できるようにします

今回解説した内容で一点、注意点があります

マージする際に、グループ化した内容は1番目にくるようにしてください

画像に alt 属性が指定されていません。ファイル名: image-114.png

元の顧客マスタは、上の画像にて黄色の印をつけた箇所のように、2番目に来るようにしてください

この順番が狂うと、IDが重複したままになってしまいますので注意が必要です


にほんブログ村

ピボット解除を複数列を軸にして実行する

パワークエリのピボット解除はとても便利ですね

 1つ列を軸として選択 ⇒ その他の列のピボット解除、これだけでデータの縦横/↓→並びを縦縦/↓↓に変更できます

でも、複数列を軸にしてピボット解除をする場合にはどうするんだろう?

実はこちらについてもとても簡単にできます

ピボット解除の前に軸にする列を指定するだけです

今回の内容

ピボット解除を行うデータは下の画像です

上の画像の黄色い箇所、カテゴリー地区を軸にして「4月~6月」を横並びから縦並びにかえます

複数列を軸にしたピボット解除

解説はPower Queryエディターからはじめさせて頂きます

ピボット解除を行う前に、軸にする列を下の画像のように選択しておいてください

複数列を同時に選択する場合には、Ctrlキーを押しながら選択してください

このまま「その他の列のピボット解除」をクリックしましょう

そうすれば、選択した列以外の並びが変わります

<まとめ>

ピボット解除はとても便利です

データの並べ替えによるデータのクリーニングはとても重要な作業です。ミスが起こっては困ります

このピボット解除を適切に実行すれば、データクリーニングの質は格段に向上します

今回の内容はぜひ有効活用して頂きたいと思います


にほんブログ村

パワークエリエディターで行コピーを行う方法

今回は、通常は行列単位で一括処理を行うパワークエリで「行コピー」を行う方法を解説します

行コピーを行うのに「M言語」が出てきますが、M言語の概念に触れるのにいい題材だと思います

ところで、

空のクエリ波括弧:{}を使用したらどのようになるでしょう?

ちなみに、空のクエリはここから起動できます

*データタブ➡データの取得➡その他のデータソースから➡空のクエリ

では、

試しに、下の画像のように空のクエリの数式タブに{2020,2021}と入力してみます

すると、上の画像のように2020と2021の値から構成されるリストが作成されます

このリストを作成する仕組みを行コピーにも活用します

行コピー

では、実際に行コピーをしてみたいと思います

上のデータがエディタに表示されている状態からカスタム列・作成画面をクリックします

そして、先ほどの波括弧:{2020,2021}を入力します

すると、2020と2021の2つの値から構成されるリストが含まれた列が新たに作成されます

次に、下の画像にて黄色く印を付けた箇所をクリックしてリストを展開します

すると、2020と2021の値に対応するように行コピーが作成されます

もし、波括弧の中味を「2020と2021」でなく「2020,2021,2022」とすれば1行でなく2行がコピーされます

<まとめ>

今回は波括弧:{}を使用してリストを作成した上で、行コピーを行いました

とても簡単な内容ですが、パワークエリをサポートするM言語の仕組みに触れる上ではとてもいい内容です

特に、波括弧の使用の仕方に慣れるだけでもM言語の根幹に触れることができます!

ぜひ実際に手を動かして試してみてください


にほんブログ村

Power Queryのステップ数を減らす3つの工夫

 Power Queryの便利な点の一つは、「適用したステップ欄」に操作履歴が自動記録される点です

 ただ、後々のクエリの操作性を考えると「ステップ数」は少ない方がいいですよね?

今回は「ステップ数」を減らす工夫を3つ紹介します!

「変更された型」のステップを減らす

 こちらは、過去の記事でも同じような事を書いていますので、ぜひそちらもご参照ください

 Power Queryでは列のデータ型とヘッダーの自動検出により、「ソース」ステップの次に、必ず「変更された型」のステップが追加されます

 後、途中でステップを追加した際、下のGIF画像のように自動的に「変更された型」が自動追加されることもあります

 一方で、変換タブにはきちんと下の画像のように「変更された型/列のデータ型とヘッダーの自動検出」のステップを追加する機能があります

ですので、変更された型ステップは「自動追加」する必要は必ずしもありません

 クエリを読み込む前、もしくは必要になった箇所に「手動追加」すれば変更された型ステップは減らすことができます

 変更された型ステップの自動追加を止める処理は、エディタ内の下の画像の箇所から行います

 ファイルタブ➡オプションと設定 とクリックすると「クエリのオプション」がクリックできるようになります

 クエリのオプションが開いたら、下の画像のように「型の検出」から3つの選択行えるようになっています

 一番下の「非構造化ソースの列の型とヘッダーを検出しない」にチェックを入れると「変更された型」ステップの自動追加は行われないようになります

同じ処理をまとめて行う

仮に、下の画像のようなデータがあったとします

このデータ内で次のように4つの処理を行ったとします

①フィルター:部門の列で「東京」のみを選択

②列の名前変更:部門➡東京

③フィルター:受注金額の列で「150万以上」のみを選択

④列の名前変更:受注金額➡150万以上

すると、次の画像のように4つのステップが①~④の処理に応じて追加されます

4つのステップが追加された結果、エディタ内は次の画像のようになっています

では、前述の①~④の処理の順番を次のように変えてみます

1.フィルター:①と③

2.列の名前の変更:②と④

すると、ステップは4つでなく2つとなります

 このように、同じ種類の処理をまとめて行えば、ステップ数は減らすことができます

列名の変更

 エディタ内で処理を行った際に、自動的に名前が変更、もしくは追加されている時があります

 上のGIF画像では、列の分割処理を行った際に「部門.1」と「部門.2」という名前が自動的についています

この場合、数式バー内では新たに追加された「列名」は赤字になっています

 では、この追加された「部門.1」「部門.2」の列名を下の画像のようにそれぞれ「」「」に変更してみます

 すると、下の画像のように「名前が変更された列」が適用したステップ欄に追加されています

 このステップについては、数式バーで直接、前述赤字 部分を変更することで減らすことができます

 数式バーで名前を直接・変更すれば、下の画像のように「位置によって分割された列」のステップの後のステップは消えています

<まとめ>

今回は、ステップを減らす為の工夫を3つ解説しました

 特に、最初に紹介した「変更された型」のステップを減らすについては、すぐに削減効果が出ると思います

 後に紹介した2つの削減工夫については、「効率的なクエリ作成」を意識していけば、自ずと「ステップ数の削減」につながるものです

今回の記事を機に、「効率的なクエリ作成」をぜひ意識してみてください

長文に最後までお付き合い頂き誠にありがとうございました

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村

 

エディタからデータ入力してクエリ作成

 Power Queryというと、エクセルシート上に入力してあるデータをPower Queryエディタ(以降、エディタ)に読込んで使用するイメージが強いと思います

実は、エディタ上でデータ入力を行うこともできます

今回は、短い内容ですが「直接入力」する方法と「修正方法」を紹介します

データの直接入力

データを直接入力する作業は、ホームタブの次の画像の画面から行います

上の画像の「データの入力」をクリックすると次の画面が開きます

 通常のエクセルシートと違うのは、見出しの入力とデータの入力が明確に区別されているところです  

*下の画像の商品コードが見出し、下の10001がデータ

上の画像の右側にある「*マーク」をクリックすると新規に列が挿入されます

行の挿入についても同様です

 もし、行列のどちらかを削除したい場合には、該当する行列の上で右クリックすると次の画像が出て削除が行えます

入力が完了して、入力画面下のOKボタンを押せば、クエリが新たに作成されます

作成されたクエリは、通常のクエリと同じ様にエディタ画面左に表示されます

直接入力したデータの修正

 入力したデータを修正する際には、適用したステップの欄の「ソース」の右横にあるマークをクリックします

すると、下の画像のようにデータ修正画面が表示されます

<まとめ>

 今回は、エディタ画面から直接データ入力を行ってクエリを作成する方法を解説しました

使う機会は少ないとは思いますが、マージ用クエリとして新規に作成する場合で、データ入力量が少ない場合には有効なクエリ作成方法だと思います

ですので、覚えておいて損はないかと思います!

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村

【豆知識】どこの行が変わったかを調べる方法

大量のデータを扱っていると、2つの表を比べて「一体、どこの行が変わったのか?」を調べる時がたまにありますよね?

1万行を超すデータだと、関数を使ってもとても面倒な作業です

実はPower Queryの「クエリのマージ」において、結合種類を「完全結合(両方の行すべて)」に指定した上で、「条件列」を組み合わせると、簡単にできます

使用データと行いたいこと

下の図のように、「元データ」と「修正後」の2つの表があったとします

元データと修正後の間で「金額」が変わった行を「OK」「×」で判定して、新たな列に出力します

この「金額」が変わったという判定に当たっては、「ID」「客先」の組み合わせも考慮します

ですので、判定すべき個所は次の画像のようになります

今回のポイント

通常、クエリのマージを行った場合、結合の種類は次の画像の方法を使用するのが一般的だと思います

この場合は、2つのクエリの結合関係は次の画像のようになります

ところが、マージ方法を「完全外部」とすると次の画像のようになります

このマージ方法の場合、「片方の円しか無いものはどう出力されるか?」が今回の大きなポイントです!

では、それぞれの表からクエリ名が「元データ」「修正後」という2つのクエリが作成してあることを前提として、本格的な解説を始めます

2つのクエリのマージ

今回、2つのクエリをマージする際に気を付けることは、次の画像(列名の右横に番号が採番されていることに注目)のように照合列を複数指定することです

でないと、行の列の中で「客先」が変わっていても「判定」されません

照合列を複数指定する時は、Ctrlキーを押しながら選択を行ってください

条件列の追加

前述のクエリのマージを、展開する際には2つのクエリの違いが分かるように「元の列名のプレフィックス」にチェックを入れておきます

そして、マージしたクエリを展開すると次の画像のようになります

ちょっと上の画像だと見づらいので、1つのクエリの列だけ表示したのが次の画像です

「元データ」のクエリにしかない行は、プレフィックスが「修正後」の列では全て「null/空欄」となります

逆に「修正後」のクエリにしかない行は、プレフィックスが無い列が「null」になります

今回のポイントでも前述しましたが、金額が変わった行とは「金額自体」が変わった行と、「ID」や「客先」などの「行の情報」が変わった行の2つのケースがあります

「金額の列」はプレフィックスが「無し」と「有り」の2つがありますが、「行の情報」が変わった場合はどちらかが「null」になります

つまり、条件列を挿入して「金額」を比べれば、金額変更の2のケースが網羅できます

ですので、次のように条件列を指定します

まず条件設定です

上の条件が満たされた場合は「OK」を出力します

条件が満たされない場合には「×」を出力します

条件列を指定してエクセルシートに出力すると、次の画像のようになります

IDに注目して、「×」を見ていくと変わった行が一目瞭然です

<まとめ>

 今回は、マージの結合にて「完全結合」の仕組みを活用して2つの表から「変化した行」を判定する方法を解説しました

 Power Queryでは「元の列名のプレフィックス」を指定すれば、マージしたク エリを展開した際に「どのクエリ」の分なのかが列名で分かるのも便利です

 今回はクイズやパズルのような内容でしたが、Power Queryの便利さに触れるにはとても良い内容だったと思います

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村

【豆知識】ピボット/縦縦並び➡縦横に並び替え集計

 これまで何度か縦横並びを縦縦並びに変える「ピボット解除」については解説を行ってきました

 今回は、逆に縦縦並びのデータを「縦横」並びに変える「列のピボット」について解説します

 今回解説する「列のピボット」は、「集計」というステップも必要な場合には、相当便利な処理になります!

解説に使用する「元データ」は次の画像のデータです

こちらのデータを「地域」を軸にして、横展開します

実は、元データには「重複」データが含まれていますので、横展開する際には「合計」処理も必要になります

1.Power Queryエディタを開く

元データの上で右クリックし、Power Queryエディタ(以降、エディタ)を開きます

2.ピボットする列を選択

今回は、記事の冒頭で紹介したように「地域」を横展開します

3.「列のピボット」を実行

「列のピボット」はピボット解除のように右クリックではなく、「変換タブ」の「列のピボット」から指定します

上の画像の「列のピボット」をクリックすると次の画像が開きます

要は表の中味となるものを指定するわけですが、こちらは「売上金額」になります

値を指定して「OKボタン」を押すと次の画像のように、記事の冒頭で紹介した重複データも「合計」され、「列のピボット」が完成しています

4.合計以外の計算

前述の3.では「合計」処理を行いましたが、「平均」や「カウント」も計算できます

「列のピボット」ダイアログで「詳細設定オプション」の左横にある▼マークをクリックすると「合計」以外の方法も指定できます

平均を選択すると次の画像のように表示されます

もし、エクセルシートに読込んだ際に、エラーが発生した場合には、自動追加された「変更された型」ステップが不適切に行われている可能性があります

その場合には、上の画像の「変更された型」を削除するか、データ形式を変更するなどの処理が必要になります

今回の解説は以上です

最後まで記事を読んで下さり、誠にありがとうございました

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村

【豆知識】ピポット解除時の空欄の扱い

 パワークエリのピボット解除は便利ですよね。一括で縦横並びを縦縦並びに変えられます。ところが、元データに空欄が混じると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言語」については、別途、シリーズで記事を書きますので、そちらでは詳細な解説を行いたいと思います

記事を最後まで読んで下さり、誠にありがとうございました

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村