Страницы: 1
RSS
Сложение нескольких строк в одну ячейку по условию в Power Query
 
Здравствуйте. Подскажите пожалуйста, как можно поудалять дублирующиеся строки, а то что в третьем столбце сложить в одну ячейку через разделитель, при наличии одинаковых значений во втором столбце. Мне будет достаточно просто подсказать как такое можно реализовать. Заранее спасибо!
Сильно не ругайте, я нуб...
 
Neimar, вы не первый день на форуме же. Сделали бы примитивный пример. А так сами мучайтесь:
Код
= Table.Group(#"Changed Type", {"Столбец2"}, {{"Concatenated", each Text.Combine(List.Transform(_[Столбец3], Text.From), ","), type text}})
F1 творит чудеса
 
Вот блин я заморочился:

Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица4"]}[Content],

// Группируем по Число и Коду и AllRows по значению

    GroupedRows = Table.Group(Source, {"Число", "Код"}, {{"Count", each _, type table}}), 

// добавляем внутри таблиц колонки Count Индекс от 0. Он нам понадобиться для создания динамичного листа названия колонок, 
// а также для шага PivotedColumn

    AddedCustom = Table.AddColumn(GroupedRows, "Custom", each Table.AddIndexColumn([Count], "Index", 0, 1)),
    RemovedColumns = Table.RemoveColumns(AddedCustom,{"Count"}),
    ExpandedCustom = Table.ExpandTableColumn(RemovedColumns, "Custom", {"Значение", "Index"}, {"Значение", "Index"}),

// Эти 3 строчки кода ниже нам создают динамичный лист названия колонок для объединения данных через запятную для последнего шага MergedColumns. 
// Проблема при объединении колонок - это то, что их названия прописываются как говорится Hardcoded. Т.е. если на текущий момент наш запрос сработает, 
// то завтра данные обновятся и колонок станет больше, но они в шаг MergedColumns уже бы не попали.

    ChangeFutureListToText = Table.TransformColumnTypes(ExpandedCustom,{{"Index", type text}}),    // важно чтобы Лист создавался из Text type
    CustomIndex = ChangeFutureListToText[Index],    // создание листа. Есть кнопка в интерфейсе
    List = List.Distinct(CustomIndex), // убираем дубликаты

// Выделяем колонку Index и делаем Pivot по колонке Значение и выбираем в Advance - Dont Aggregate
    PivotedColumn = Table.Pivot(Table.TransformColumnTypes(ExpandedCustom, {{"Index", type text}}, "ru-RU"), 
                       List.Distinct(Table.TransformColumnTypes(ExpandedCustom, {{"Index", type text}}, "ru-RU")[Index]), "Index", "Значение"),

// Выделяем колонки от 0 и дальше и соединяем их через ",". По умолчанию (по примеру), там где List в шаге MergedColumns , 
// было бы {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}, т.е. жестко прописаны (Hardcoded) названия колонок, а если бы их стало больше,
// то они бы не попали в объединение. Но благодаря выше 3-м шагам мы создали динамичный лист названия колонок

    MergedColumns = Table.CombineColumns(PivotedColumn,  List ,Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Merged")
in
    MergedColumns


а можно было проще:

Цитата
Максим Зеленский написал:
Код ? 1= Table.Group(#"Changed Type", {"Столбец2"}, {{"Concatenated", each Text.Combine(List.Transform(_[Столбец3

ХА!  :D
 
Спасибо Вам всем!  
Сильно не ругайте, я нуб...
 
Цитата
написал:
ХА!  
В натуре "Ха")) Но ваш вариант тоже крут.
Вариант Зеленского же.. просто выше всяких похвал)))
Сама по себе жизнь имеет значение
 

Вот еще один довольно простой вариант:

Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица4"]}[Content],

// Группируем по Число и Коду и AllRows по значению

    GroupedRows = Table.Group(Source, {"Число", "Код"}, {{"Count", each _, type table}}),

//  Формируем список List уникальных значений из таблиц столбца "Count" по столбцу "Значение", получаем столбец "Пользовательская"

    #"Добавлен пользовательский объект" = Table.AddColumn(GroupedRows, "Пользовательская", each Table.Column([Count],"Значение")),

// Извлекаем значения из List с резделителем ","

    #"Извлеченные значения" = Table.TransformColumns(#"Добавлен пользовательский объект", {"Пользовательская", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
   
// Удаляем лишние столбцы

 #"Удаленные столбцы" = Table.RemoveColumns(#"Извлеченные значения",{"Count"})
in
    #"Удаленные столбцы"
Изменено: Zagadka - 27.05.2022 11:38:46
Страницы: 1
Наверх