PQパワークエリの勉強(ひとりBPR)

20231027PQパワークエリの勉強(ひとりBPR)

 

パソコン素人です。
パワークエリ素人です。
自分用のメモです。備忘録。
読んでも分からないと思います。(汗)
間違いもあると思います。
(なお、ホームページの引用等不都合がありましたら、早急に削除いたします。)

2、3年前にエクセルのパワークエリなどを本で勉強した。
結構、ピボット解除など、エクセル内部では日常的に使ったりしているが、最近、もっと使い道を広げないといけない気がしてきた。

というのも、
「オープンデータを取り込んで、ダッシュボード化したりする」とか、
「データをマップに自動的に(?)落とし込み表示する」とかが、
ごく一部(?)で流行っているようだ。

でも、忙しい人らに興味本位で聞くわけにもいかないので、個人的に何かできないかやってみる。


でも、今現在何もできていないので、その備忘録。
(「ひとりBPR」と書いたように、他にも少し何か出来たら書いていくつもりです。)

 

ネットで、
パワークエリで、比較的楽してwebデータを取ってくる質問と回答を見つけた。
(エクセルの学校様「毎月アドレスが変わるwebページからデータを取得したい」(感謝))

 

すこしやってみたが、最後の方にM言語だが、クエリを2つ利用するとか、パラメータの設定とか、無名関数とか、eachの繰り返し処理が多くあり、この記事だけでは自分には理解できないことが分かった。
(基礎がない。)

 

で、今回は、office田中様の記事を見て基礎を少し勉強しました。(感謝)
「セルの値でクエリを変化させる(パラメータクエリの基本)」
「セルの値でクエリを変化させる(日付)」
(以下のメモは自分用なので少し記事とは違ってます。)

 

以下ただのメモ。
それぞれ、記事では2通りのやり方を紹介している。
**************************************************

「セルの値でクエリを変化させる(パラメータクエリの基本)」の勉強
<1つ目は、2つのクエリに分けて作成するやり方>


パラメータを設定する1個目のクエリ。
氏名で抽出するようにするにはということで紹介。
(抽出のためのパラメータ用テーブルを用意して、テーブルからPQを作成)
(ここで「ドリルダウン」を使っている。
ドリルダウンはややこしいが、「リストとして利用するための構造化。詳細エディタではtransform columntypes)
(この場合、クエリ名はテーブル名になるらしい。接続専用で作成。)


2個目は本体のクエリ。
外部CSVデータを取り込むクエリを作っておく。
この基本的なパターンでできる本体のコードに上記のパラメータのコードを書き換え等して作る。
(M言語は大文字・小文字を区別するので注意。)
この時に、クエリ内で、パラメータのための書き換え用コードが必要になるので、例として、一個抽出しておく。
(その方が楽だから。)
で、詳細エディターでできたMを修正。
ここでは、each([名前]=UserName)に変えたりしている。※
(※このUserName、同名なので、クエリ名(の結果(ドリルダウンの内容))とテーブル名よく分からなかったが、おそらく前者)


=======================================================
<2つ目は、クエリを1つでパラメータをM言語内で取得するやり方>
こちらは、パラメータ用のテーブルは不要で、セル範囲に「名前」を付ける。
(テーブルからクエリを作らないのでクエリは1個減る。(テーブルも))

で、外部CSVデータを取り込むクエリを作る。
詳細エディタで、コードを表示して、上記「名前」を取得するコードを追加(「取得した名前」というコードに)。
その下のコードを
each([名前]=取得した名前)
にして抽出条件を名前から持ってくるようにした。
(名前を付けたのは、シート上のセルだが、[Content}{0}[]Column1),と行列で取得させるようです。)


///////////////////////////////////////////////////////////////
「セルの値でクエリを変化させる(日付)」の勉強


こっちも、2通りのやり方を紹介している。
**************************************************

<1つ目は、2つのクエリに分けて作成するやり方>
パラメータを日付で行うやり方の紹介。
(記事とは関係ないが、完成してしまえば、更新する時にわざわざ、データタブでクエリを開かなくても、テーブル右クリックでPQは更新可能)


<2つ目は、クエリを1つでパラメータをM言語内で取得するやり方>
ここでは、パラメータが「日付」だが、ソースのデータが「日付 時刻」のため、
エラーが起こることを回避するコードも追加している。
Date.From(取得した日付)

その他:
この日付パラメータの記事には、月末日を指定する記事がある。
この箇所のコードは、1つ目のコードを改変している。
1つ目なので、テーブル名を付けてドリルダウンして準備。
(テーブル名も先月末日)

記事では、コードは下記。
each([日付] <= 先月末日)

としているが、自分はしくじった。

パラメータ用のクエリを「target」のまま使いまわしたので、
テーブル名を先月末日に直してもそれだけではダメ。
each([日付] <= ○○)の
○○はクエリ名のtargetにしたらうまく動いた。
(上の※の通り。)


(その他にもデータを昇順にしたりしてデータを整えている)
(このコードだと1か月分ではなく、先々月のデータも取得されることに注意)