Присвойте количество вхождений каждой записи (вроде Count, если) - PullRequest
0 голосов
/ 03 мая 2018

Как я могу добиться того же расчета в Power Query?

В Excel я бы использовал: =COUNTIF($A$2:A2,A2)

Name    Occurrence
A          1
A          2
B          1
A          3
B          2

Спасибо, Тамир

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Это может быть достигнуто только с помощью «кнопок» (почти - за исключением некоторой пользовательской формулы столбца):

AddedIndex = Table.AddIndexColumn(Source, "Index", 0, 1),
GroupedRows = Table.Group(AddedIndex, {"Name"}, {{"tmp", each _, type table}}),
AddedCustom = Table.AddColumn(GroupedRows, "Custom", each Table.AddIndexColumn([tmp],"Occurrence", 1,1)),
RemovedOtherColumns = Table.SelectColumns(AddedCustom,{"Custom"}),
Expanded = Table.ExpandTableColumn(RemovedOtherColumns, "Custom", {"Name", "Occurrence"}, {"Name", "Occurrence"})

Или, короче:

AddedIndex = Table.AddIndexColumn(Source, "Index", 0, 1),
GroupedRows = Table.Group(AddedIndex, {"Name"}, {{"tmp", each Table.AddIndexColumn(_, "Occurence", 1,1), type table}}),
Expanded = Table.ExpandTableColumn(GroupedRows, "tmp", {"Occurrence"}, {"Occurrence"})

Там вы также можете извлечь Index столбец и отсортировать по нему, если вам нужно сохранить начальный порядок строк. Также все остальные необходимые столбцы должны быть извлечены на последнем шаге

0 голосов
/ 07 мая 2018

В PQ определенно возможно вести подсчет количества ходов, хотя одна из тех вещей, которые не так просты из-за того, как PQ предназначен для просмотра данных. Возможно, есть более эффективный способ, но я придумал это.

Сначала добавьте столбец индекса, который начинается с 1, чтобы мы могли легко отслеживать «строку», в которой мы находимся. Затем добавьте пользовательский столбец с этим

Number.Abs(List.Count(List.RemoveItems(List.Range(#"Added Index"[Name], 0, [Index]), {[Name]}))-List.Count(List.Range(#"Added Index"[Name], 0, [Index])))

Я не видел простой функции списка в PQ, которая подсчитывает соответствующие элементы в списке, поэтому вместо этого мы получаем количество элементов в списке, считая разницу в количестве между списком с удаленными соответствующими элементами и базовый счетчик списка. Индекс используется для того, чтобы мы могли проверять список только до нашей текущей "строки", используя List.Range.

Полный М-код, когда я вытащил таблицу данных примера, выглядел так:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1),
    #"Added Custom" = Table.AddColumn(#"Added Index", "Occurence", each Number.Abs(List.Count(List.RemoveItems(List.Range(#"Added Index"[Name], 0, [Index]), {[Name]}))-List.Count(List.Range(#"Added Index"[Name], 0, [Index]))))
in
    #"Added Custom"
...