Table.Distinct(List.Distinct)の使用例
第二引数の書き方にちょっと苦労したので、まとめておきます。
はじめに
マウス操作での「重複の削除」は使ったことがあると思います。
列のタイトルバーで右クリックすると、下図のようなメニューが出て、重複の削除ができます。
やりたいこと1:複数列をまとめて比較
これはまだ、マウスでできます。複数列選択した状態で実行すれば、選択中の列をまとめて比較してくれます。
できあがるコードはこんな感じです。
Table.Distinct(Source, {"Column2", "Column3"})
やりたいこと2:値を加工してから比較
列追加とかしないで、ということです。これはもうコードを書くしかない。
テーブル
例えば、こんなコードが通ります。(サンプルデータを含む)
並び替えて比較させています。
let
Source = Table.FromColumns({{1..3}&{1..3},{2,3,1}&{3,1,2},{3,1,2}&{2,1,3}}),
Custom1 = Table.Distinct(Source,
{each List.Sort(Record.ToList(_)), Comparer.Ordinal}
)
in
Custom1
↓実行前
↓実行後。行内容の組合せが重複しないようになりました。
リスト
こちらも同じように書けます。
let
Source = {[a={1..3},b={2,3,1}],[a={1..3},b={3,1,2}]},
Custom2 = List.Distinct(Source,
{each List.Sort([b]), Comparer.Ordinal}
)
in
Custom2 //[a={1..3},b={2,3,1}]が返ります。
若干の解説
公式レファレンスにある関数の構文では、
List.Distinct(list as list, optional equationCriteria as any, criteria as any) as list
Table.Distinct(table as table, optional equationCriteria as any) as table
となっています。この「equationCriteria」引数の書き方が問題です。
試した限りでは、下記2通りの用法があります。
1. 列名の文字列のリストを入れれば、列の組合せを見てくれる。(Table.Distinctの方だけ。やりたいこと1参照)
2. {加工内容,比較方法}という形で入れてやれば、加工後の値での比較になる。
加工内容は関数で書きます。
- List.Distinct ⇒各要素がそのまま関数に渡されるので、それが引数になるつもりで書く。
- Table.Distinct ⇒各行の値がRecordとして関数に渡されるので、Record型の引数を処理できるように書きます。
比較方法は上記のコードでは「Comparer.Ordinal」だけ使いました。Comparer関数は他にもあるので、興味があれば使い分けたらいいんじゃないでしょうか。
Comparer functions| Microsoft Docs
ちなみに、比較方法にカスタム関数が入るのでは?と思ったのですが、エラーになりました。カスタムできるのは、加工内容の方だけのようです。
レファレンス
Power Query M Reference | Microsoft Docs
List.Distinct関数
Table.Distinct関数
Author And Source
この問題について(Table.Distinct(List.Distinct)の使用例), 我々は、より多くの情報をここで見つけました https://qiita.com/tanuki_phoenix/items/215a2cd331b34533242d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .