Страницы: 1
RSS
Соединить текст в столбцах через разделитель, если в определённом столбце идут повторы
 
Добрый день!


Требуется соединить текст в заданных столбцах через разделитель, если в одном определённом столбце идут повторяющиеся значения.(таблица отсортирована по этому столбцу).
Из файла примера думаю будет понятно что и как)Спасибо.
Изменено: Алексей Иванов - 19.07.2018 16:57:34
 
По какому принципу оставлять значения в тех столбцах где объединения значений не требуется? Всегда из первой строки или как-то иначе?
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
По какому принципу оставлять значения в тех столбцах где объединения значений не требуется? Всегда из первой строки или как-то иначе?
Всегда из первой.
 
Странные у вас задачи, но тем не менее вариант на Power Query:
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    АвтоТип = Table.TransformColumnTypes(Источник,{{"Шапка 1", type text}, {"Шапка 2", type text}, {"Шапка 3", type text}, {"Шапка 4", type text}, {"Шапка 5", type text}, {"Шапка 6", type text}, {"Шапка 7", type text}, {"Шапка 8", type text}, {"Шапка 9", type text}, {"Шапка 10", type text}}),
    Группировка = Table.Group(
        АвтоТип, 
        {"Шапка 6"}, 
        {{"Шапка 1", each _[Шапка 1]{0}, type text}, 
         {"Шапка 2", each _[Шапка 2]{0}, type text}, 
         {"Шапка 3", each [Шапка 3]{0}, type text}, 
         {"Шапка 4", each Text.Combine(_[Шапка 4], ";#(lf)"), type text}, 
         {"Шапка 5", each Text.Combine(_[Шапка 5], ";#(lf)"), type text}, 
         {"Шапка 7", each Text.Combine(_[Шапка 7], ";#(lf)"), type text}, 
         {"Шапка 8", each _[Шапка 8]{0}, type text}, 
         {"Шапка 9", each _[Шапка 9]{0}, type text}, 
         {"Шапка 10", each _[Шапка 10]{0}, type text}}),
    ПорядокСтолбцов = Table.ReorderColumns(Группировка,{"Шапка 1", "Шапка 2", "Шапка 3", "Шапка 4", "Шапка 5", "Шапка 6", "Шапка 7", "Шапка 8", "Шапка 9", "Шапка 10"})
in
    ПорядокСтолбцов
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Странные у вас задачи, но тем не менее вариант на Power Query:
Спасибо вам большое)
Задачи да... странноватые. Всё из-за структуры данных и не очень ясного понимания как их хранить.

Грубо говоря, есть два списка типономиналов (A и Б), каждых скажем по 10 тысяч. У каждого есть свои характеристики (несколько столбцов). И между ними есть связь, но не у всех. Скажем 1000 штук из группы A является аналогами некоторому числу из группы Б.
Причём одному типономиналу может соответствовать несколько (из-за этого и получается несколько перечислений в ячейке и идущие подряд повторы) и наоборот. Получаются две мутные таблицы, к каждой из которых мне надо обращаться через ВПР - найти все аналоги в Б конкретного типономинала из A и наоборот.

Плюс сами таблицы собраны из кусков, имеют разный формат и написание, ... множественные повторы, явные и нет.
Понимаю, что Excel не очень подходит для хранения таких связей, но что есть.
P.S. Есть какие то толковые книги (pdf) или онлайн учебники по Power Query? Синтаксис вроде понятный, но логика не очень)
 
Наберите в поиске по форуму "учебник power query" там будет несколько тем с ссылками.
Вот горшок пустой, он предмет простой...
 
Здравствуйте.
Похожая задача но необходимо что бы при группировке текст соединялся через разделитель во всех колонках. Есть ли возможность сделать такое соединение по всем колонкам НЕ описывая каждую?
Изменено: lector2140 - 15.11.2019 14:16:17
 
lector2140, приложите пример ваших данных.
Вот горшок пустой, он предмет простой...
 
Добавил файл
 
Данные видно, а что нужно получить на выходе? Какие ячейки по какому признаку нужно соединять? По каким полям группировать?
Изменено: PooHkrd - 15.11.2019 14:22:58
Вот горшок пустой, он предмет простой...
 
Групировать по -- ID,  а соединять по всем колонкам значения через разделитель . В предыдущем ответе описан метод как это делать описывая каждую колонку, мне необходимо сцепить все строки по которым совпадают ID
 
Можно так:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Append1"]}[Content],
    GroupedRows = Table.Group(Source, {"ID"}, {{"tab", each _, type table}}),
    AddedCustom = Table.AddColumn(GroupedRows, "tab2", each Table.ToColumns( [tab] )),
    AddedCustom1 = Table.AddColumn(AddedCustom, "tab3", each List.Transform( [tab2], each {Text.Combine( List.Transform( _, Text.From), "|" )} ) ),
    AddedCustom2 = Table.AddColumn(AddedCustom1, "tab4", each Table.FromColumns( [tab3], Table.ColumnNames( Source ) )),
    Custom1 = Table.Combine( AddedCustom2[tab4] )
in
    Custom1

Старался максимально разделить шаги для наглядности, а так то это все можно было сразу в группировку впихнуть.
Символ разделителя указан в самом конце строки №5.
Изменено: PooHkrd - 15.11.2019 15:09:53
Вот горшок пустой, он предмет простой...
 
Спасибо, ID не нужно сцеплять(но это поправимо)
А можете добавить вариант где все в группировку впихнуто?
Изменено: lector2140 - 15.11.2019 15:58:19
 
Цитата
lector2140 написал:
ID не нужно сцеплять
Тут затупил, да.
Цитата
lector2140 написал:
в группировку впихнуто
Эт можно:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Append1"]}[Content],
    GroupedRows = Table.Group(Source, {"ID"}, {{"tab", each Table.FromColumns( List.Transform( Table.ToColumns( _ ), each {Text.Combine( List.Transform( _, Text.From), "|" )} ), Table.ColumnNames( Source ) ), type table}}),
    Combine = Table.Combine( GroupedRows[tab] ),
    UniqueID = Table.TransformColumns(Combine, {{"ID", each Text.BeforeDelimiter(_, "|"), type text}})
in
    UniqueID
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх