#全体の概要
このネタを書こうと思う
この図の1~4はクエリの駆動順序を表しています
Power Queryはインメモリデータベースをexcelの外に作り
そこで制作したデータをEXCELに受け渡しをおこない
完了後にDBそのまま消去されます
逆に言えばEXCELはインメモリデータベース(a)の外に
テーブル形式でデータを保存する領域を持っているといえます
そしてそのテーブルの更新タイミング(④)はPower Queryの処理が完了した後に発生するために
②の過去の結果を取り込むという処理が可能になります
Power BIだと、Power Queryが動き始めた時点で
(a)(b)両方のデータが削除されるため再現できません
#作り方
今回の説明は外部データではなくexcelのセル上のデータを使います。
まずわかりやすいようにNOW関数で現在時刻をセル上に起きます(わかりやすいように1セルだけ入れます)
「テーブルまたは範囲から」でnow関数の入ったセルを取り込みを行います
このようにクエリをテーブルに書き出し
さらに(a)を書き出したテーブルをクエリで取り込みます
ここで
(a)のクエリに(b)のクエリを追加してやるとどうなるでしょうか?
そうすると
このように
赤い所が元データテーブルから読み込んだ最新の時刻
その下のデータは今まで更新ボタンを押した時刻になります
そしてクエリの更新設定から時間指定をしてやれば
そうすると
こんな感じに
ある程度定期的に更新しつつ前のデータを残して集めるということが割とできなくもありません
この自動取得状態に発生時間は
他の周りの動作次第で重ければ20~30秒ぐらい平気でずれるので
あんまりぴったり↓集計したい場合にはあまり使えません
##コード確認用ソース(使えない)
注:下記の物はコピペしても出力テーブルがないので動きません
なので、どのようなコードになってるかの確認用です
let
ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
変更された型 = Table.TransformColumnTypes(ソース,{{"列1", type datetime}}),
追加されたクエリ = Table.Combine({変更された型, #"(b)"})
in
追加されたクエリ
let
ソース = Excel.CurrentWorkbook(){[Name="a"]}[Content],
変更された型 = Table.TransformColumnTypes(ソース,{{"列1", type datetime}})
in
変更された型
#消し方
取得したデータをクリアしたい時は
aの結果クエリを消して、aのクエリにnullを削除するフィルタを追加ください
#(a)の取り込みデータにエラーがあった場合
①の取り込みが失敗すると④のテーブルの更新が行われないので
error前の状況で維持されます
読み込みファイルが他の人が開いていてエラーが出る
といった場合、それが終わってエラーが消えるまでテーブルは更新されません