3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Table.Distinct(List.Distinct)の使用例

Posted at

第二引数の書き方にちょっと苦労したので、まとめておきます。

###はじめに
マウス操作での「重複の削除」は使ったことがあると思います。
列のタイトルバーで右クリックすると、下図のようなメニューが出て、重複の削除ができます。
image.png

###やりたいこと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

↓実行前
image.png
↓実行後。行内容の組合せが重複しないようになりました。
image.png

####リスト
こちらも同じように書けます。

加工後の値で比較~リスト
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関数

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?