今回はPowerQueyの設計について紹介します!
「参照」と「複製」を使いこなして
効率の良い設計を考えていきます!
どんなものを作るにしても
初めの設計はとても肝心です!
何も考えず思いつくままに作っていると後で
祭りです。
作り直そうにも修正箇所があちこちあって大変です!
そんなことにならないように
どのように気を付ければいいのか?
その考え方を1つ紹介したいと思います!
改修が手間になってしまう設計
かじむー
今回作る内容
今回は分かり易く伝えるために
出来るだけシンプルな中身で考えていこうと思います!
![](https://kajimublog.com/wp-content/uploads/2022/12/131_01-1024x576.png)
ではどんなものを作っていくかをまず説明します!
左にいまこのような勤怠表があります。
山田・鈴木・佐藤・田中の4人の出勤時間を
日別に管理しているファイルです。
これを右の様な状態に出力したいです!
4人それぞれシートに分けて
9時以降の出勤時間だけを出力させようと思います!
さて皆さんだったら
PowerQueryでどのように作りますか?
まずはお勧めしない方法で作ってみようと思います!
複製を使った作り方
では修正が多く発生してしまう
お勧めしない作り方でやってみます!
![](https://kajimublog.com/wp-content/uploads/2022/12/131_02-1024x576.png)
こちらが勤怠表ファイルに接続したものです。
じゃあこのクエリから
山田さんの分を作ってみます!
![](https://kajimublog.com/wp-content/uploads/2022/12/131_03-1024x576.png)
ではこのクエリを複製します。
そしてフィルタで「山田」で絞り
さらに出勤時間を「9時以降」で絞りましょう!
![](https://kajimublog.com/wp-content/uploads/2022/12/131_04-1024x576.png)
そしてこれをシートに出力させます!
これで山田さん分が出来ましたね!
では同じ様に
鈴木・佐藤・田中の3つ分を作りましょうか!
![](https://kajimublog.com/wp-content/uploads/2022/12/131_05-1024x576.png)
山田さんのクエリを複製して
フィルタ条件の「山田」を「鈴木」と変えて
鈴木さん分が出来ました!
はい、これどこが不安要素でしょうか?
もしこの「9時以降」という条件を
変更する修正が発生したとします!
「8時以降に変えてくれる?」ってなったら
どうなるでしょうか?
![](https://kajimublog.com/wp-content/uploads/2022/12/131_06-1024x576.png)
修正する箇所が4カ所ありますよね?
という事は4回も修正をしなければなりません!
今回は簡単な作りなのであまり負担に思わないかもしれませんが
これが50カ所あるとゾッとしますよね?
と思う方も居ると思います!
でも考えてみて下さい。
アップデートというのは言わば修正です。
プロが作るものでさえ修正が継続的に発生しているんですから
私達みたいな者が、修正から逃げる事はできません!
ではどのように気を付けて作ればい良いのか?
ポイントは「同じことを何回もしない」です。
改修が楽になる設計
かじむー
複製と参照の違い
では振り出しに戻って
初めから作っていきましょう!
先程「9時以降」で絞るという処理を
4人全員に行いましたね!
これ「同じことを4回もやってる」んですよね!
なのでこれを1つにまとめておきます!
![](https://kajimublog.com/wp-content/uploads/2022/12/131_07-1024x576.png)
まずこの初めのクエリに対して
「9時以降」で絞っておきます。
ではこのクエリを「参照」します!
ここで参照とは何か?少し説明します!
「複製」と「参照」というのは別物です!
![](https://kajimublog.com/wp-content/uploads/2022/12/131_08-1024x576.png)
「出勤表」クエリを複製したとします。
するとどんなクエリが出来上がるか?
①全く同じステップ内容のクエリが出来上がる
出勤表クエリで行った処理(ステップ)と
全く同じ内容のクエリが出来上がります。
②複製元の変更に影響されない
出勤表(複製元)クエリの中で
「9時以降」→「8時以降」と変更しても
複製して出来たクエリは「9時以降」のまま!
![](https://kajimublog.com/wp-content/uploads/2022/12/131_10-1024x576.png)
「出勤表」クエリを参照したとします。
するとどんなクエリが出来上がるか?
①最終結果を引き継いだクエリが出来上がる
参照して出来たクエリの
詳細エディターを見てみると…
![](https://kajimublog.com/wp-content/uploads/2022/12/131_09-1024x576.png)
「= 出勤表」となってますよね?
つまり「出勤表」クエリの最終結果が
このクエリに吐き出される形になっています。
②参照元の変更に影響する
という事は
出勤表(参照元)クエリの中で
「9時以降」→「8時以降」と変更すると
参照して出来たクエリは「8時以降」に変わります!
かじむー
参照を使った作り方
要するに
まとめておくべき処理は1つにまとめて作って
そこからはクエリを参照してそれぞれ作っていく感じです!
![](https://kajimublog.com/wp-content/uploads/2022/12/131_11-1024x576.png)
まずは4人それぞれに同じ条件となる
「9時以降に絞る」という処理を
出勤表クエリで済ませておく!
![](https://kajimublog.com/wp-content/uploads/2022/12/131_12-1024x576.png)
ではまず一人分を作る!
出勤表クエリを参照する!
![](https://kajimublog.com/wp-content/uploads/2022/12/131_13-1024x576.png)
山田さんの分を作る場合は
参照して出来たクエリにて
「山田」と絞るだけでOKですね!
これと同じ方法で他3人のクエリを作れば完成ですね!
![](https://kajimublog.com/wp-content/uploads/2022/12/131_14-1024x576.png)
はい!こんな感じですね!
こうしておけば、もし「9時以降」を「8時以降」に
変更する修正が発生したとしても
参照元のクエリ1カ所を修正するだけで済むようになりました!
今回のまとめ
![](https://kajimublog.com/wp-content/uploads/2022/12/131_15-1024x576.png)
▼修正が手間になる作り
同じ処理が複数個所存在する
▼修正が楽になる作り
同じ処理を1つにまとめる
それを参照して異なる処理を作る
今回作ったものは
簡単なものだったので
そこまで劇的に見えなかったかもしれませんが
開発する内容がもっと濃くなってくると
とても重要な設計になってきます。
小さな開発でも
出来るだけ意識してみて下さい!
かじむー