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 ⇒ 각 행의 값이 레코드로 함수에 전달되므로 레코드 유형의 인수를 처리할 수 있도록 씁니다.

  • 비교 방법은 위의 코드에서는 "Comparer.Ordinal"만 사용했습니다. Comparer 함수는 그 밖에도 있으므로, 흥미가 있다면 구분하면 좋지 않을까요.
    Comparer functions | Microsoft Docs

    덧붙여서, 비교 방법에 커스텀 함수가 들어가는 것은? 라고 생각했습니다만, 에러가 되었습니다. 커스텀 할 수 있는 것은, 가공 내용의 분만과 같습니다.

    레퍼런스



    Power Query M Reference | Microsoft Docs
    List.Distinct 함수
    Table.Distinct 함수

    좋은 웹페이지 즐겨찾기