【パワークエリ】データに小計・合計行を追加し、更に列のピボット、合計列を追加する。

以前、「データに小計・合計行を追加する。」記事を書きましたが、今回はそれの続編で更に列にピボット展開し、列の合計までをパワークエリで作る方法について書いてみます。ただ、やることはさほど難しくはないのですが、ワークシート上でピボットテーブルで集計するほうが数十倍速いです。あくまでこうゆうこともできるよという紹介となりますのでご承知おきください。

 1.やりたいこと

 下図の通りBEFOREのようなデータから、AFTERのように部門小計・合計行を追加、更に日付を列に展開し、部門・商品毎の合計列を追加した集計表をパワークエリで作成します。

f:id:shusoshin:20210426231700g:plain

2.実践(1)基データ取込み~クエリの複製(下準備)

まず、基となるデータをエディタに取込みます。

f:id:shusoshin:20210426231711g:plain 日付列の左端をクリックし、型を日付に変更しておきます。

f:id:shusoshin:20210426231721g:plain

この状態のクエリ(名前を集計表としています)をベースに以下でパーツとなる小計・合計行/列を作成していきます。クエリの設定ペインの適用したステップは変更された型までの状態です。

f:id:shusoshin:20210426231730g:plain

左側の集計表クエリ名上で右クリックし、複製をクリックします。

f:id:shusoshin:20210426231738g:plain

集計表(2)が作成されます。同じ作業をあと3回繰り返し、下図左のような状態にします。その後、集計表(2)〜集計表(5)の名前を下図右の名前に変更します。名前は後でわかるようにしておけば何でも構いません。今作成したクエリの中身をこの後作っていきます。

f:id:shusoshin:20210426231746g:plain

次のステップの前に、この後に中身を作るクエリ(テーブル)と最終形の集計表との関係を下図にまとめておきます。すべて表現できていませんがおおよそ下図の通りです。

f:id:shusoshin:20210426231754g:plain

3.実践(2)各小計・合計行/列クエリの編集(パーツ作成)

各クエリの中身を作っていきます。まず、合計列クエリを選択します。この時点では先ほどの集計表クエリと同じ状態です。

f:id:shusoshin:20210426231809g:plain

列の追加タブ→カスタム列 をクリックします。

f:id:shusoshin:20210426231819g:plain

下図の通り式を入力し、OKをクリックします。

f:id:shusoshin:20210426231828g:plain

日付列の上で右クリックし、削除をクリックします。

f:id:shusoshin:20210426231839g:plain

カスタム列の名前を「日付」に変更します。

f:id:shusoshin:20210426231846p:plain

このクエリはここまでです。このクエリは合計列自体ではなく、最後に集計表クエリでピボットする前の合計列のもととなるデータを作成したものとなります。

f:id:shusoshin:20210426231855g:plain

続いて部門合計列クエリを選択します。ホームタブ→グループ化 をクリックします。

f:id:shusoshin:20210426231903g:plain

下図の通り、選択/入力し、OKをクリックします。

f:id:shusoshin:20210426231910g:plain

部門毎に売上がグループ化されました。

f:id:shusoshin:20210426231919g:plain

列の追加タブ→カスタム列 をクリックします。

f:id:shusoshin:20210426231928g:plain

下図の通り、列名と式を入力し、OKをクリックします。

f:id:shusoshin:20210426231936g:plain

日付列が挿入されました。部門合計列クエリはここまでです。

f:id:shusoshin:20210426231945g:plain

続いて、部門小計行&部門合計クエリを選択します。ホームタブ→グループ化 をクリックします。

f:id:shusoshin:20210426231955g:plain

詳細設定のラジオボタンを選択し、日付、部門列を選択します。新しい列名等は先程同様に入力/選択し、OKをクリックします。

f:id:shusoshin:20210426232004g:plain

数式バーの左のfxボタン(ステップの追加)をクリックします。

f:id:shusoshin:20210426232013g:plain

適用したステップにカスタム1が追加され、数式バーは前ステップのグループ化された行を参照した状態になります。

f:id:shusoshin:20210426232022g:plain

この数式バーを直接次の数式に書き換えます。

f:id:shusoshin:20210426232030g:plain

変更前:

  = グループ化された行

変更後:

  = Table.Combine( {グループ化された行,部門合計列})

この関数は複数テーブルをひとつに結合するものです。つまり、前ステップのグループ化された行 と 先程作成した部門合計列 が下図の通りひとつになります。

f:id:shusoshin:20210426232039g:plain

続いて日付列を選択した状態から、変換タブ→列のピボット をクリックします。

f:id:shusoshin:20210426232048g:plain

値列は売上を選択し、OKをクリックします。

f:id:shusoshin:20210426232057g:plain

行が部門小計で日付が列に並び最後が合計列のピボットされた表になりました。

f:id:shusoshin:20210426232108g:plain

列の追加タブ→カスタム列 をクリックします。

f:id:shusoshin:20210426232115g:plain

カスタム列の式を下図の通り入力し、OKをクリックします。もとの部門列に (半角スペース+)小計を追加した列にします。

f:id:shusoshin:20210426232123g:plain

部門列を削除します。

f:id:shusoshin:20210426232132g:plain

先ほど作成したカスタム列の名前を 部門 に変更します。これでこのクエリは終わりです。

f:id:shusoshin:20210426232140g:plain

次に最後の日付合計行クエリを選択します。ホームタブ→グループ化 をクリックします。

f:id:shusoshin:20210426232148g:plain

グループ化のキーを日付とし、その他下図の通り選択/入力し、OKをクリックします。

f:id:shusoshin:20210426232156g:plain

グループ化されたらfxボタンをクリックし、適用されたステップ カスタム1が挿入された状態にします。

f:id:shusoshin:20210426232203g:plain

数式バーを直接以下の数式に書き換えます。

f:id:shusoshin:20210426232213g:plain

変更前:

 =グループ化された行

変更後:

= Table.InsertRows( グループ化された行,Table.RowCount(グループ化された行),{[日付="合計", 売上 =List.Sum(グループ化された行[売上]) ]})

 

数式の詳細について次の画像で説明します。

f:id:shusoshin:20210426232221g:plain

合計行が追加されました。この合計値 90,230 が行列の合計値となります。

f:id:shusoshin:20210426232230g:plain

変換タブ → 入れ替え をクリックします。

f:id:shusoshin:20210426232239g:plain

前ステップの行と列が入れ替わった状態になります。この時点での列名はColumn1~5が自動的に割り当てられます。左上のワークシートマークのよいなボタンをクリックします。

f:id:shusoshin:20210426232247g:plain

1行目をヘッダーとして使用 をクリックします。

f:id:shusoshin:20210426232255g:plain

1行目がヘッダー(列名)となりました。列の追加タブ → カスタム列をクリックします。

f:id:shusoshin:20210426232303g:plain

新しい列名を 部門 とし、カスタム列の式を下図の通り入力してOKをクリックします。

f:id:shusoshin:20210426232311g:plain

これで日付合計行クエリの作成は完了です。

f:id:shusoshin:20210426232319g:plain

 

4.実践(3)集計表の作成(組み立て)

集計表クエリ を選択します。

f:id:shusoshin:20210426232328g:plain

fxボタン をクリックし、適用されたステップ:カスタム1 が挿入された状態にします。

f:id:shusoshin:20210426232336g:plain

数式バーを次の数式に直接書き換えます。

f:id:shusoshin:20210426232344g:plain

変更前:

 = 変更された型

変更後:

 = Table.Combine( {変更された型,合計列})

 

前述と同じ関数で、前ステップ:変更された型 と 合計列クエリ(テーブル)がひとつに結合されます。

続いて、日付列を選択した状態で ホームタブ → 昇順で並べ替えボタンをクリックします。これはこの後に列のピボットを実行する際に列を日付順に並べる為の操作です。(基データが日付順に入力されているとは限らないという前提)

f:id:shusoshin:20210426232352g:plain

日付列を選択した状態で、変換タブ → 列のピボット をクリックします。

f:id:shusoshin:20210426232401g:plain

値列を 売上 とし、OKをクリックします。

f:id:shusoshin:20210426232411g:plain

ピボットされました。これに小計・合計行を加えていきます。

f:id:shusoshin:20210426232418g:plain

fxボタン をクリックし、適用されたステップ:カスタム2 が挿入された状態にします。

f:id:shusoshin:20210426232427g:plain

数式バーを次の数式に直接書き換えます。

 f:id:shusoshin:20210426232435g:plain

変更前:

 =ピボットされた列

変更後:

 = Table.Combine({ピボットされた列,#"部門小計行&部門合計",日付合計行})

 

前述と同じ関数ですが、今回は3つのテーブル(前ステップ:ピボットされた列、部門小計行&部門合計、日付合計行)を結合します。

続いて、部門列を選択した状態で ホームタブ → 昇順で並べ替えボタンをクリックします。

f:id:shusoshin:20210426232442g:plain

更に、商品列を選択した状態で同様に 昇順で並べ替えをします。

f:id:shusoshin:20210426232451g:plain

最後の仕上げに、数値がnull(空白)のものを 0 に置き換えたいのですが、ここは少し工夫が必要です。まず、置換したい日付列を選択した状態で、ホームタブ → 値の置換 をクリックします。f:id:shusoshin:20210426232458g:plain

下図の通り、検索する値を null 、置換後を 0 とし、OKをクリックします。

f:id:shusoshin:20210426232507g:plain

各日付列のnull が 0 に置換されました。しかし、自動生成された数式をよく見ると各列名に対して値の置換処理が実行されています。このままだと、新たな日付がデータに追加された場合に置換がされなくなってしまいます。

f:id:shusoshin:20210426232515g:plain

これを回避するため、数式の一部を以下に書き換えます。

f:id:shusoshin:20210426232522g:plain

変更前:

= Table.ReplaceValue(並べ替えられた行,null,0,Replacer.ReplaceValue,{"2021/04/01", "2021/04/02", "2021/04/03", "2021/04/05"})

変更後:

= Table.ReplaceValue(並べ替えられた行,null,0,Replacer.ReplaceValue,Table.ColumnNames(並べ替えられた行) )

※ステップの追加から直接上記変更後の数式を入力する方法でも構いません。

 

下図は上記変更後の数式の補足となります。

f:id:shusoshin:20210427123024g:plain

テーブルのすべての null が 0 へ置換されましたが、今度は商品列の各小計・合計行のnullまで 0 が入ってしまいました。ここは個別に逆の操作をします。

f:id:shusoshin:20210426232530g:plain

商品列を選択した状態で、ホームタブ → 値の置換 をクリックします。

f:id:shusoshin:20210426232539g:plain

先ほどと逆に、検索された値 0、置換後 null としOKをクリックします。

f:id:shusoshin:20210426232547g:plain

これで完成となります。

f:id:shusoshin:20210426232556g:plain

5.動作確認検証

 下図はワークシート上の基データです。ちなみに作成した集計表は別ワークシートに取込み、その他のクエリは接続のみとしています。

f:id:shusoshin:20210427125647g:plain

試しに基データに2行追加してみます。

f:id:shusoshin:20210427125658g:plain

取込み済の集計表シートを選択し、テーブル上で右クリックし、更新をクリックします。

f:id:shusoshin:20210427125707g:plain

追加したデータがきちんと集計表に反映されました。以上となります。

f:id:shusoshin:20210427125716g:plain

長くなってしまいましたが、最後まで読んでいただきありがとうございました。