はじめに
Excel 差集合とかでググるとVBAを使う方法やDAXを使う方法が出てきますが、使い慣れたPowerQueryでどうにかしたい。そんなこともきっとあります。
前提
- powerquery上でtableが2つ認識されている
- csv読み込みとかExcel上のtableとかを読ませられますよね。いつものあれです
- N行1列である
やること
let
ソース = Table.Join(before, "Column1", Table.PrefixColumns(ignore, "i"), "i.Column1", JoinKind.LeftAnti),
削除された列 = Table.RemoveColumns(ソース,{"i.Column1"})
in
削除された列
この例だとbefore
tableからignore
tableを引く形になります。
Table.Join
したいわけですが、両者ともカラム名が同じなのでそのままだと困るので、適当なprefixをつけるためにTable.PrefixColumns
を使います。ここではi
をつけたので、以降i.Column1
とするとignore tableのほうを参照できます。
JoinKind.LeftAnti
をつけることで、SQLでいうところのLEFT OUTER JOIN
してWHERE ... = null
するのに近い挙動を示します。
最後に結合したtableの列は要らないのでTable.RemoveColumns
で消します。
SQLぽく書くとこういう感じですかね
SELECT `before`.Column1
FROM `before`
LEFT OUTER JOIN `ignore` ON `before`.Column1 = `ignore`.Column1
WHERE `ignore`.Column1 = null;