CountIfs () Эквивалент в Power Query M, подсчитывает количество строк внутри себя - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь реализовать countifs () как логику в запросе Power Query, но не в сводной таблице, ссылающейся на исходную таблицу.Скорее я хочу отобразить все записи и сделать так, чтобы это был другой столбец (в моем реальном случае использования это необходимо).Вот что я подразумеваю под этим ...

Входные данные:

ID | Animal | Color
-- | ------ | -----
 1 | Zebra  | Red
 2 | Zebra  | Blue
 3 | Zebra  | Red
 4 | Zebra  | Red

Желаемый результат:

ID | Animal | Color | Count of others with same color
-- | ------ | ----- | -------------------------------
 1 | Zebra  | Red   | 3
 2 | Zebra  | Blue  | 1
 3 | Zebra  | Red   | 3
 4 | Zebra  | Red   | 3

В формуле Excel для вычисления столбца "Подсчет других людей того же цвета "Я бы использовал

=COUNTIFS([Animal],[@Animal],[Color],[@Color])

Как я мог бы сделать это в Power Query, используя язык M?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Аналогично решению Alexis, но с использованием функций List.

let
    Source = Excel.CurrentWorkbook(){[Name="Test"]}[Content],
    CountCol = Table.AddColumn(Source, "Count", (r) => List.Count(List.PositionOf(Source[Color],r[Color],Occurrence.All)))

in
CountCol

В таблицу «Источник» добавлен новый столбец с именем «Количество».

Функция получает каждую запись (с именем «r») из таблицы «Source» и передает ее во вложенную функцию.

Изнутри «List.PositionOf» получает три аргумента: столбец «Color» из таблицы «Source» в виде списка, поле «Color» из переданной записи («r») и третий необязательный аргумент «Occurrence.All», который вынуждает вернуть все матчи, а не только первый.

Результатом этой функции является другой список со всеми позициями поля «Цвет» из записей во всем списке цветов.

Функция outter "List.Count" просто считает элементы списка позиций и возвращает целое число.

0 голосов
/ 14 ноября 2018

Используйте счетчик для отфильтрованной таблицы.


Вот как будет выглядеть формула для пользовательского столбца:

List.Count(
    Table.SelectRows(
        #"Previous Step Name Goes Here",
        (C) => [Animal] = C[Animal] and [Color] = C[Color]
    )[ID]
)

Конструкция функции () => требуется, посколькувам нужно обратиться к двум отдельным контекстам.Одна - это строка, в которой вы оцениваете функцию, а другая - строка таблицы, которую вы фильтруете с помощью Table.SelectRows.На первый взгляд это немного странно, поэтому я рекомендую поискать « Power Query для каждой функции » и немного прочитать.

Примечание: добавление [ID] к таблице преобразует егов список, выбрав один столбец.

...