Страницы: 1
RSS
Power Query. Расширяющийся диапазон подсчёта повтора значения в столбце.
 
Добрый вечер!
Начал изучать Power Query. Часто в Excel обычной формулой типа If(Countif($A1:A2;A2)>1;0;1) проверяю уникальность значения в строчке с саморасширяющимся диапазоном. К примеру, в столбце А у нас какой-то ключ из нескольких слепленных вместе ячеек. Первому, т.е. уникальному значению, мы ставим 1, последующим 0. Как я понял, то в PQ нет как таковой простой возможности реализовать подобное, ибо механизм обращения к данным не идёт построчно, а сразу массивом. Как можно, не используя какую-либо группировку, сохранить структуру данных, добавив только один столбец с нужной проверкой?
Спасибо!
 
Доброе время суток.
А чем плоха группировка? Другие варианты - более медленные.
 
Андрей VG, группировка меняет весь массив, сводя его к агрегированному виду, чего не хотелось бы. Или я что-то путаю? PQ тут используется, как промежуточное звено обработки информации для транзита в сводную, для этого мне и нужна матричная структура данных.
 
Цитата
Deflector написал:
Как можно
например, через List.Generate - но как уже было сказано - так гораздо медленнее группировки
Изменено: buchlotnik - 26.09.2020 00:20:16
Соблюдение правил форума не освобождает от модераторского произвола
 
Приложил пример, чего хочу. Подумал, было бы еще хорошо и сумму по уникальному ключу считать. На листе первоначальный массив данных, а справа формулы- результат. Хочу тоже самое иметь в PQ запросе. Посмотрел про List.Generate, соглашусь, что, скорее всего, это не мой метод. Покажите, пожалуйста, как это сделать. Если еще можете на будущее дать советы на тему быстродействия и экономии ресурсов в подобных задачах, то буду очень благодарен. Спасибо!
 
Deflector, такой вариант
Код
// Table1 (2)
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Added Index" = Table.AddIndexColumn(Source, "Индекс", 0, 1),
    #"Grouped Rows" = Table.Group(#"Added Index", {"Key"}, {{"a", each  Table.AddIndexColumn(_,"Uniq check")},{"sum",each List.Sum([Quantity])}})[[a],[sum]],
    #"Expanded {0}" = Table.ExpandTableColumn(#"Grouped Rows", "a", {"Key", "Date", "Time", "A/R", "Quantity", "Индекс", "Uniq check"}),
    #"Changed Type" = Table.TransformColumns(#"Expanded {0}",{{"Uniq check", each if _=0 then 1 else 0}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Индекс"})
in
    #"Removed Columns"
 
del
Изменено: buchlotnik - 23.08.2021 18:13:11
Соблюдение правил форума не освобождает от модераторского произвола
 
Михаил Л, buchlotnik,спасибо за примеры решения. До того, как Вы прислали, пробовал сам, жаль, не смог дотянуть до окончательного самостоятельного решения. Шел по пути Михаила.
 
накликал кнопочками, без внутренней индексации
Код
// Table1
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Time", type time}, {"Date", type date}, {"Key", type text}, {"A/R", type text}, {"Quantity", type number}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Индекс", 1, 1, Int64.Type),
    #"Grouped Rows" = Table.Group(#"Added Index", {"Key"}, {{"t", each _, type table [Key=nullable text, Date=nullable date, Time=nullable time, #"A/R"=nullable text, Quantity=nullable number, Индекс=number]}, {"Consolidated weight", each List.Sum([Quantity]), type nullable number}, {"i", each List.Min([Индекс]), type number}}),
    #"Expanded {0}" = Table.ExpandTableColumn(#"Grouped Rows", "t", {"Date", "Time", "A/R", "Quantity", "Индекс"}, {"Date", "Time", "A/R", "Quantity", "Индекс"}),
    #"Sorted Rows" = Table.Sort(#"Expanded {0}",{{"Индекс", Order.Ascending}}),
    #"Added Conditional Column" = Table.AddColumn(#"Sorted Rows", "Uniq check", each if [i] = [Индекс] then 1 else 0),
    #"Removed Columns" = Table.RemoveColumns(#"Added Conditional Column",{"Индекс", "i"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Removed Columns",{{"Uniq check", Int64.Type}})
in
    #"Changed Type1"
F1 творит чудеса
Страницы: 1
Наверх