Доброго всем вечера. Нижеприведенный код делает следующее: 1. Объединяет все наименования по совпадению из столбца "Promo". К примеру Promo1 соответствуют Apple, Banana, Pear. Остальные по аналогии. 2. Размножает объединенные наименования по количеству совпадений. Т.е. к примеру если Promo1 встречается 3 раза, то соответственно объединенные наименования также повторяются 3 раза. Не могу понять, как отсортировать наименования соответствующие Promo2 в алфавитном порядке, чтобы было Apple. Orange а не наоборот. Точнее, на каком этапе впихнуть List.Sort. Нужный результат показан в столбце Desired Output.
Код
let
from = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
group = Table.Group(from, {"Promo"}, {{"All Products", each Text.Combine([Product],", "), type text}}),
occur = Table.AddColumn(group, "Occur", each List.Count(Table.SelectRows(from,(x)=>[Promo]=x[Promo])[Promo])),//Count occurences
expand = Table.AddColumn(occur, "Custom", each List.Repeat({2},[Occur])),
select = Table.ExpandListColumn(expand, "Custom"),
end = Table.SelectColumns(select, {"All Products"})
in
end
Update. Вопрос снят. Это я реально тупанул и поторопился, надо было просто немного подумать.
Код
Text.Combine(List.Sort([Product]),", ")
Думаю, тему можно закрывать, хотя рад буду видеть альтернативное и/или более компактное решение.
memo, не всегда краткость = производительность. А тем более понятность кода. Но шаг “occur” - тут самое слабое место. Скорее всего, для каждой строки PQ будет заново грузить таблицу from с листа. Да и просто фильтровать столько раз таблицу тоже не быстро. Не с компа, поэтому наугад
Код
group = Table.Group (
from,
{ "Promo" },
{ { "All Products", ( t ) => List.Repeat ( { Text.Combine ( List.Sort ( t[Product] ), ", " ) }, Table.RowCount ( t ) ), type {text} } }
)
Или так:
Код
group = Table.Group (
from,
{ "Promo" },
{
{
"All Products",
( t ) =>
[
comb = Text.Combine ( List.Sort ( t[Product] ), ", " ),
res = List.Transform ( t[Product], ( x ) => comb )
][res],
type {text}
}
}
)
В общем. В момент группировки у нас уже есть изначальная таблица, отфильтрованная по текущей группе. Мы можем внутри функции группировки: 1. Посчитать строки таблицы и столько раз повторить список из одного элемента - нашего комбинированного значения. 2. Просто изменить значение всего столбца Product таблицы (или все элементы списка значений этого столбца) на комбинированное значение. Не нужно делать это в отдельных шагах
Гуру Power Query, подскажите: взяв (для повышения скила ) исходный код и файл azma, разложив его на более-менее простой для меня вариант в сцепке List.Repeat-List.Count-Text.Split и всё получилось (запрос "Простой вариант"). Ещё больше его "разложив" на отдельные шаги, уже в конце при шаге с List.Repeat список формируется "неправильно" (запрос "Простой пошаговый вариант). В чём ошибка?