鷹尾祥(アキラ)のExcel BI ブログ

Excelの革新的機能であるパワーピボット/パワークエリ/DAXについて紹介します。

ピボット解除応用:多階層クロス集計表のデータ化

ピボット解除応用:多階層クロス集計表のデータ化

パワークエリのテクニックで人気の高いピボット解除ですが、今回は上に多階層乗ったクロス集計表の解体=データ化がテーマです。

ヘッダー部分が1階層(一行)であった場合はすんなりとピボット解除できるのですが、複数階層あった場合はひと工夫が必要です。

Before

※ 上から年月予実区分PL科目分類が3階層ならんでいます。

f:id:modernexcel7:20191005220455p:plain

After

いつものようにテーブルの形に変換します。

f:id:modernexcel7:20191005221112p:plain

技術的なポイント

端的に言うと、上部の3階層をいったん1階層にしてからピボット解除します。


列のピボット解除(複数階層)

参考資料

こちらのテクニックは『M Is for Data Monkey: The Excel Pro's Definitive Guide to Power Query』で紹介されていたものです。
この本はパワークエリの入門書として最適な本で、私がPower Queryの素晴らしさを知った本です。Power Queryの基本を学びたい方はぜひご購入ください。

M Is for Data Monkey: The Excel Pro's Definitive Guide to Power Query

M Is for Data Monkey: The Excel Pro's Definitive Guide to Power Query

実践

多階層クロス集計表をPower Query Editor に読み込む

まず、多階層クロス集計表の上にカーソルを置きます。

f:id:modernexcel7:20191005221325p:plain


そのままデータ→データの取得と変換→テーブルまたは範囲からをクリックします。 

f:id:modernexcel7:20191005213912p:plain


テーブルの作成ダイアログボックスでは、先頭行をテーブルの見出しとして使用するにチェックを入れないでOKを押します。

f:id:modernexcel7:20191005213935p:plain


Power Query Editor が開きます。
先頭行をテーブルの見出しとして使用するにチェックを入れなかったので列の名前はそれぞれ列1、2…です。

f:id:modernexcel7:20191005214026p:plain

一時的に縦と横を入れ替える(転置)

次に変換メニューの入れ替えをクリックします。

f:id:modernexcel7:20191005214121p:plain


そうすると、テーブルの中身が転置され、縦と横が入れ替わります。

f:id:modernexcel7:20191005222436p:plain

列のマージで3階層を1列に結合する

まずは空白データ(null)を埋めるために、Ctlrキーを押しながら、列1、列2をクリックします。

f:id:modernexcel7:20191005222526p:plain

次に変換メニューのフィルをクリックし、を選択します。

f:id:modernexcel7:20191005222927p:plain


これで、空白データ(null)が埋まりました。

f:id:modernexcel7:20191005223117p:plain

今度は列をマージするために、Ctlrキーを押しながら、Column1、Column2、Column3 をクリックします。

f:id:modernexcel7:20191005223242p:plain


次に変換メニューの中の列のマージをクリックします。

f:id:modernexcel7:20191005223410p:plain


区切り記号の選択には、これら3つのデータに絶対に存在しない値を選んでください。
今回はカスタム→ _ (アンダースコア)を選びましたが、データに存在しない値なら何でも構いません。

f:id:modernexcel7:20191005223622p:plain


これで3つの列が1つの列にマージされました。だいぶ近づいてきた感じがします。

f:id:modernexcel7:20191005223828p:plain

ふたたび縦と横を入れ替えて元に戻す

次に縦横を元に戻すため、変換メニューの入れ替えをクリックします。

f:id:modernexcel7:20191005214121p:plain


これで縦横が元に戻りましたが、今回は上にあった三階層が結合されて一階層になっていることに注意してください。
そして、その一階層の中身は「_(アンダースコア)」でマージされています。

f:id:modernexcel7:20191005224118p:plainf:id:modernexcel7:20191005224158p:plain

ピボット解除

ピボット解除をするためには、縦に属性として並べるための列名=ヘッダー行を用意する必要があります。
変換メニューの一行目をヘッダーとして使用するをクリックします。

f:id:modernexcel7:20191005224748p:plain


これで先ほど1階層に結合した情報が列名になり、ピボット解除をする準備が整いました。

f:id:modernexcel7:20191005225200p:plain


Ctrlキーを押しながら、会社名__、氏名__をクリックして選択します。

f:id:modernexcel7:20191005225328p:plain


変換メニューの列のピボット解除→その他の列のピボット解除を選んでください。
※ 毎回データを読み込む時に横に並ぶ列の件数に増減がある場合は、必ず残る列(今回は、会社名__、氏名__)を選択して、その他の列のピボット解除をすると増減があっても対応可能です。

f:id:modernexcel7:20191005225256p:plain


これで先ほど選択されなかった列名属性として縦に並びました。
(私はいつもそれまでの長い準備段階を経てピボット解除を行うとき、ヒーローが必殺技でトドメを刺すような気持になります。)

f:id:modernexcel7:20191005225718p:plain

1つに結合した3階層を分割して元に戻す

これで最後の仕上げです。属性列を選択します。

f:id:modernexcel7:20191005230640p:plain


変換メニューで列の分割→区切り記号による分割を選択します。

f:id:modernexcel7:20191005230848p:plain


区切り記号には列のマージで入力した「_(アンダースコア)」を入力します。
また、分割区切り記号の出現ごとになっていることに注意して、OKを押します。

f:id:modernexcel7:20191005231215p:plain


これで3階層が分割され、データ化されました!

f:id:modernexcel7:20191005231426p:plain


最後に列名を整えて完成です。

f:id:modernexcel7:20191005231543p:plain


閉じて読み込むを実行し、テーブルに読み込んで出来上がりです。

f:id:modernexcel7:20191005231635p:plain