Добрый день, коллеги! Заранее прошу прощения, что не смог точно придумать заголовок. Столкнулся с задачей, которая, вроде как, должна быть очень простая, казалось бы но решения не нашел. Нужно в таблице каждую строчку клонировать на несколько похожих строк, отличающихся только последним столбцом. В исходной таблице в последнем столбце несколько значений, разделенных запятой: столбец 1/стоблец2/столбец3-1, столбец3-2, столбец3-3. Нужно из такой строки сделать 3 строки: столбец1/столбец2/столбец3-1; столбец1/столбец2, столбец3-2; столбец1-столбец2,столбец3-3... См. пример. Поясню, зачем это. Есть таблица "Группы", в которой два столбца: группа и список клиентов из каждой группы через запятую. Клиенты и группы в пределах таблицы не повторяются и имеют вид числа. И есть таблица "контакты", в которой тоже два столбца: клиент - почта. Причем, в столбце клиент возможны повторения, т.к. у одного клиента м.б. несколько почт. Таблица "Группы" примерно 30-40 тыс. строк, при этом в ячейке "клиенты" до 20 клиентов через запятую. Таблица "контакты" это собранные через Query в одну модель pivot 5 запросов по 300 тыс. строк (один под одним, суммарно 1.5 млн строк). В конечном итоге нужно получить таблицу group1 - mail, group1 - mail, group 1 - mail, group 2 - mail, group2 - mail. Если в таблице "группы", я мог бы перенести каждого клиента на новую строку: группа1-клиент1, группа1 -клиент2, группа 2 - клиент 3...., то можно было бы добавить такую таблицу в модель к контактам и сопоставить группы с почтами через dax-формулу, связав их по "клиентам" (один ко многим).
Добрый день, коллеги! Заранее прошу прощения, что не смог точно придумать заголовок. Столкнулся с задачей, которая, вроде как, должна быть очень простая, казалось бы но решения не нашел. Нужно в таблице каждую строчку клонировать на несколько похожих строк, отличающихся только последним столбцом. В исходной таблице в последнем столбце несколько значений, разделенных запятой: столбец 1/стоблец2/столбец3-1, столбец3-2, столбец3-3. Нужно из такой строки сделать 3 строки: столбец1/столбец2/столбец3-1; столбец1/столбец2, столбец3-2; столбец1-столбец2,столбец3-3... См. пример. Поясню, зачем это. Есть таблица "Группы", в которой два столбца: группа и список клиентов из каждой группы через запятую. Клиенты и группы в пределах таблицы не повторяются и имеют вид числа. И есть таблица "контакты", в которой тоже два столбца: клиент - почта. Причем, в столбце клиент возможны повторения, т.к. у одного клиента м.б. несколько почт. Таблица "Группы" примерно 30-40 тыс. строк, при этом в ячейке "клиенты" до 20 клиентов через запятую. Таблица "контакты" это собранные через Query в одну модель pivot 5 запросов по 300 тыс. строк (один под одним, суммарно 1.5 млн строк). В конечном итоге нужно получить таблицу group1 - mail, group1 - mail, group 1 - mail, group 2 - mail, group2 - mail. Если в таблице "группы", я мог бы перенести каждого клиента на новую строку: группа1-клиент1, группа1 -клиент2, группа 2 - клиент 3...., то можно было бы добавить такую таблицу в модель к контактам и сопоставить группы с почтами через dax-формулу, связав их по "клиентам" (один ко многим).9306935
let f=(x)=>Excel.CurrentWorkbook(){[Name=x]}[Content], g=(x)=>List.Combine(List.Transform(Text.Split(x,", "),(i)=>Record.FieldOrDefault(dict,i,{}))), typ = Table.TransformColumnTypes(f("Таблица2"),{{"clientid", type text}}), dict = Record.FromTable(Table.RenameColumns(Table.Group(typ, "clientid", {"Value", each [mail]}),{"clientid","Name"})), tr=Table.TransformColumns(f("Таблица1"),{"clientid",g}), to = Table.ExpandListColumn(tr, "clientid") in to
[/vba]
[vba]
Код
let f=(x)=>Excel.CurrentWorkbook(){[Name=x]}[Content], g=(x)=>List.Combine(List.Transform(Text.Split(x,", "),(i)=>Record.FieldOrDefault(dict,i,{}))), typ = Table.TransformColumnTypes(f("Таблица2"),{{"clientid", type text}}), dict = Record.FromTable(Table.RenameColumns(Table.Group(typ, "clientid", {"Value", each [mail]}),{"clientid","Name"})), tr=Table.TransformColumns(f("Таблица1"),{"clientid",g}), to = Table.ExpandListColumn(tr, "clientid") in to
Доброе утро! Спасибо, что отозвались. Вижу, в примере преобразовали две таблицы в одну. Но не совсем понял, как сделали. Это какая-то формула в query? Справится ли она при условии, что таблица "контакты" существует только в виде запроса подключенного к модели данных, т.к. ни сам Excel, ни Query, насколько мне известно, больше млн. строк не осилит?..
Доброе утро! Спасибо, что отозвались. Вижу, в примере преобразовали две таблицы в одну. Но не совсем понял, как сделали. Это какая-то формула в query? Справится ли она при условии, что таблица "контакты" существует только в виде запроса подключенного к модели данных, т.к. ни сам Excel, ни Query, насколько мне известно, больше млн. строк не осилит?..9306935
Если событие воспринимается как реальное, оно реально по своим последствиям.
Сообщение отредактировал Serge_007 - Вторник, 02.05.2023, 12:19
существует только в виде запроса подключенного к модели данных
справится, просто ссылку не на лист, а на запрос давать, ну и если на выходе интересует только конечная таблица - не надо промежуточный запрос в модель грузить
существует только в виде запроса подключенного к модели данных
справится, просто ссылку не на лист, а на запрос давать, ну и если на выходе интересует только конечная таблица - не надо промежуточный запрос в модель грузить