Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Разбить ячейку на строки по разделителю - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Разбить ячейку на строки по разделителю
9306935 Дата: Суббота, 15.04.2023, 00:44 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

2019
Добрый день, коллеги! Заранее прошу прощения, что не смог точно придумать заголовок.
Столкнулся с задачей, которая, вроде как, должна быть очень простая, казалось бы но решения не нашел.
Нужно в таблице каждую строчку клонировать на несколько похожих строк, отличающихся только последним столбцом. В исходной таблице в последнем столбце несколько значений, разделенных запятой: столбец 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-формулу, связав их по "клиентам" (один ко многим).
К сообщению приложен файл: perenos.xlsx (9.8 Kb)


Если событие воспринимается как реальное, оно реально по своим последствиям.
 
Ответить
СообщениеДобрый день, коллеги! Заранее прошу прощения, что не смог точно придумать заголовок.
Столкнулся с задачей, которая, вроде как, должна быть очень простая, казалось бы но решения не нашел.
Нужно в таблице каждую строчку клонировать на несколько похожих строк, отличающихся только последним столбцом. В исходной таблице в последнем столбце несколько значений, разделенных запятой: столбец 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
Дата добавления - 15.04.2023 в 00:44
прохожий2019 Дата: Суббота, 15.04.2023, 01:43 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 1298
Репутация: 327 ±
Замечаний: 0% ±

365 Beta Channel
[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
[/vba]
К сообщению приложен файл: 2736298.xlsx (20.8 Kb)
 
Ответить
Сообщение[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
[/vba]

Автор - прохожий2019
Дата добавления - 15.04.2023 в 01:43
9306935 Дата: Суббота, 15.04.2023, 09:31 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

2019
Доброе утро! Спасибо, что отозвались. Вижу, в примере преобразовали две таблицы в одну. Но не совсем понял, как сделали. Это какая-то формула в query? Справится ли она при условии, что таблица "контакты" существует только в виде запроса подключенного к модели данных, т.к. ни сам Excel, ни Query, насколько мне известно, больше млн. строк не осилит?..


Если событие воспринимается как реальное, оно реально по своим последствиям.

Сообщение отредактировал Serge_007 - Вторник, 02.05.2023, 12:19
 
Ответить
СообщениеДоброе утро! Спасибо, что отозвались. Вижу, в примере преобразовали две таблицы в одну. Но не совсем понял, как сделали. Это какая-то формула в query? Справится ли она при условии, что таблица "контакты" существует только в виде запроса подключенного к модели данных, т.к. ни сам Excel, ни Query, насколько мне известно, больше млн. строк не осилит?..

Автор - 9306935
Дата добавления - 15.04.2023 в 09:31
прохожий2019 Дата: Суббота, 15.04.2023, 12:30 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 1298
Репутация: 327 ±
Замечаний: 0% ±

365 Beta Channel
Это какая-то формула в query?
угу, запрос называется - вы его и процитировали

существует только в виде запроса подключенного к модели данных
справится, просто ссылку не на лист, а на запрос давать, ну и если на выходе интересует только конечная таблица - не надо промежуточный запрос в модель грузить

ни сам Excel, ни Query, насколько мне известно, больше млн. строк не осилит?
excel - нет, а запрос, выгружаемый в модель - да
 
Ответить
Сообщение
Это какая-то формула в query?
угу, запрос называется - вы его и процитировали

существует только в виде запроса подключенного к модели данных
справится, просто ссылку не на лист, а на запрос давать, ну и если на выходе интересует только конечная таблица - не надо промежуточный запрос в модель грузить

ни сам Excel, ни Query, насколько мне известно, больше млн. строк не осилит?
excel - нет, а запрос, выгружаемый в модель - да

Автор - прохожий2019
Дата добавления - 15.04.2023 в 12:30
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!