Quantcast
Channel: なんでもエクセル(Nandemo Excel)
Viewing all articles
Browse latest Browse all 60

Power Query:ソースの読み込みを条件式で切り替える

$
0
0

ソースの読み込みを条件式で切り替えた場合、該当しないほうのデータは読み込まれるでしょうか。答えはノーです。つまり読み込む情報を小分けにしておいて、必要に応じて切り替えて使ったほうが処理は断然早くなります。

例えば A列が1行、B列が100万行のテーブルがあるとします。ここからクエリを作成し、

クエリ1
Table.FromColumns(     {{"A"}, List.Repeat({"あ", "い", "う", "え", "お"}, 1000000)},     type table [列1=text, 列2=text] )

さらにそれを参照するクエリを2つ作成します。

クエリ1a
let     ソース = クエリ1,     列の選択 = Table.SelectColumns(ソース,{"A列"}),     上位行の保持 = Table.FirstN(列の選択, each [A列]<>null),     行のグループ化 = Table.Group(         上位行の保持, {"A列"},         {{"カウント", each _, type table [A列=nullable number]}}     ) in     行のグループ化

もういっこのクエリには、わざと重くなる処理を入れてみます。

クエリ1b
let     ソース = クエリ1,     列の選択 = Table.SelectColumns(ソース,{"列2"}),     上位行の保持 = Table.SelectRows(列の選択, each [列2]<>null),     クエリのマージ = Table.NestedJoin(         上位行の保持, {"列2"},         クエリ1, {"列2"},         "マージ", JoinKind.LeftOuter     ),     マージ列の編集 = Table.TransformColumns(         クエリのマージ, {"マージ", each [列1]{0}}     ),     行の抽出 = Table.SelectRows(マージ列の編集, each [マージ]=null),     行のグループ化 = Table.Group(         行の抽出, {"列2"},         {{"カウント", each Table.RowCount(_), Int64.Type}}     ) in     行のグループ化

この2つのクエリを、 if条件を指定して別のクエリで呼び出してみましょう。

クエリ1b
let     ソース = if 1=1 then クエリ1a else クエリ1b in     ソース

このクエリをシートの適当なセルにテーブルとして読み込んで更新。すると間をおかずに「クエリ1a」の結果が表示されます。反対に、条件の「1=1」を「1=0」に変えると、いつまで経っても読み込まれない状態になるでしょう。

ということは、条件に一致しないほうのクエリは更新されていないってことになりますから、必要に応じてソースを切り替える工夫があってもいいと思います。


Viewing all articles
Browse latest Browse all 60

Trending Articles