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

Вход

Регистрация

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

 

= Мир MS Excel/Power query замены значений в цикле - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Power query замены значений в цикле
Power query замены значений в цикле
monstr_ork Дата: Воскресенье, 02.06.2019, 19:08 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте, форумчане.
Подскажите пожалуйста, возможно ли с помощью power query произвести замену значений в цикле?
Файл на 4.5 миллиона строк и там два столбца. Нужно произвести замену во втором столбце.
Пример строки 2 столбца: "товар1: машина, качество1: хорошее, цена1: 123, товар2:мотоцикл, качество2: отличное, цена2: 233, ..." И т.д. в каждой строке таких описание может быть более 10.
Мне нужно заменить машина на auto , а мотоцикл на moto.
Будь не такое большое кол-во строк я бы через vba циклом написал, а и поменял все значения.
Сразу говорю, что названия там могут быть любыми, это строка как пример.
Я рассчитывал создать таблицу с уникальными значениями где каждой записи присвоено значение на замену и пропустить их в цикле.
Если это будет возможно, то могу приложить файл, но чуть позже.
 
Ответить
СообщениеЗдравствуйте, форумчане.
Подскажите пожалуйста, возможно ли с помощью power query произвести замену значений в цикле?
Файл на 4.5 миллиона строк и там два столбца. Нужно произвести замену во втором столбце.
Пример строки 2 столбца: "товар1: машина, качество1: хорошее, цена1: 123, товар2:мотоцикл, качество2: отличное, цена2: 233, ..." И т.д. в каждой строке таких описание может быть более 10.
Мне нужно заменить машина на auto , а мотоцикл на moto.
Будь не такое большое кол-во строк я бы через vba циклом написал, а и поменял все значения.
Сразу говорю, что названия там могут быть любыми, это строка как пример.
Я рассчитывал создать таблицу с уникальными значениями где каждой записи присвоено значение на замену и пропустить их в цикле.
Если это будет возможно, то могу приложить файл, но чуть позже.

Автор - monstr_ork
Дата добавления - 02.06.2019 в 19:08
krosav4ig Дата: Воскресенье, 02.06.2019, 19:59 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
monstr_ork, Table.NestedJoin


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеmonstr_ork, Table.NestedJoin

Автор - krosav4ig
Дата добавления - 02.06.2019 в 19:59
monstr_ork Дата: Воскресенье, 02.06.2019, 20:49 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
krosav4ig, это при условии, что значение в отдельном столбце, правильно я понял? У меня значения внутри строки или мне нужно разбить фразу на несколько столбцов


Сообщение отредактировал monstr_ork - Воскресенье, 02.06.2019, 21:02
 
Ответить
Сообщениеkrosav4ig, это при условии, что значение в отдельном столбце, правильно я понял? У меня значения внутри строки или мне нужно разбить фразу на несколько столбцов

Автор - monstr_ork
Дата добавления - 02.06.2019 в 20:49
anvg Дата: Воскресенье, 02.06.2019, 22:41 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток.
Например, так
[vba]
Код
let
    pairs = Table.ToRecords(#table({"from", "to"}, {{"машина", "auto"}, {"мотоцикл", "moto"}})),
    source = #table({"Column2"}, {{"товар1: машина, качество1: хорошее, цена1: 123, товар2:мотоцикл, качество2: отличное, цена2: 233, ..."}}),
    maker = Table.TransformColumns(source, {"Column2", each List.Accumulate( pairs, _, (acc, next) => Text.Replace(acc, next[from], next[to]) ) })
in
    maker
[/vba]
 
Ответить
СообщениеДоброе время суток.
Например, так
[vba]
Код
let
    pairs = Table.ToRecords(#table({"from", "to"}, {{"машина", "auto"}, {"мотоцикл", "moto"}})),
    source = #table({"Column2"}, {{"товар1: машина, качество1: хорошее, цена1: 123, товар2:мотоцикл, качество2: отличное, цена2: 233, ..."}}),
    maker = Table.TransformColumns(source, {"Column2", each List.Accumulate( pairs, _, (acc, next) => Text.Replace(acc, next[from], next[to]) ) })
in
    maker
[/vba]

Автор - anvg
Дата добавления - 02.06.2019 в 22:41
monstr_ork Дата: Понедельник, 03.06.2019, 08:21 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
anvg, это у вас в код вставлены нужные данные.
Так то их будет около тысячи. которые нужно подменить.
Приложил файл, может так лучше будет понятно.
Сразу скажу. что таблицы с заменами будет отдельным листом загружаемым в PQ
К сообщению приложен файл: 3730234.xlsm (14.3 Kb)
 
Ответить
Сообщениеanvg, это у вас в код вставлены нужные данные.
Так то их будет около тысячи. которые нужно подменить.
Приложил файл, может так лучше будет понятно.
Сразу скажу. что таблицы с заменами будет отдельным листом загружаемым в PQ

Автор - monstr_ork
Дата добавления - 03.06.2019 в 08:21
anvg Дата: Понедельник, 03.06.2019, 13:00 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
в код вставлены нужные данные.
И что меняется? Только нужно подготовить данные.
Так как вы посчитали, что делать таблицы - это задача помогающего, то сделал их такими как в коде
[vba]
Код
let
    Products = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Products"]}[Content], {{"Товар", "from"}, {"Товар_замена", "to"}}),
    Qualities = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Qualities"]}[Content], {{"Качество", "from"}, {"Качество_замена", "to"}}),
    pairs = List.Buffer(Table.ToRecords(Products & Qualities)),
    Source = Excel.CurrentWorkbook(){[Name="Source"]}[Content],
    result = Table.TransformColumns(Source, {"Столбец2", each List.Accumulate( pairs, _, (acc, next) => Text.Replace(acc, next[from], next[to]) ) })
in
    result
[/vba]
 
Ответить
Сообщение
в код вставлены нужные данные.
И что меняется? Только нужно подготовить данные.
Так как вы посчитали, что делать таблицы - это задача помогающего, то сделал их такими как в коде
[vba]
Код
let
    Products = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Products"]}[Content], {{"Товар", "from"}, {"Товар_замена", "to"}}),
    Qualities = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Qualities"]}[Content], {{"Качество", "from"}, {"Качество_замена", "to"}}),
    pairs = List.Buffer(Table.ToRecords(Products & Qualities)),
    Source = Excel.CurrentWorkbook(){[Name="Source"]}[Content],
    result = Table.TransformColumns(Source, {"Столбец2", each List.Accumulate( pairs, _, (acc, next) => Text.Replace(acc, next[from], next[to]) ) })
in
    result
[/vba]

Автор - anvg
Дата добавления - 03.06.2019 в 13:00
sboy Дата: Понедельник, 03.06.2019, 13:16 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
anvg, технический вопрос List.Buffer отличается ли для данного решения от List.Combine?


Яндекс: 410016850021169
 
Ответить
Сообщениеanvg, технический вопрос List.Buffer отличается ли для данного решения от List.Combine?

Автор - sboy
Дата добавления - 03.06.2019 в 13:16
anvg Дата: Понедельник, 03.06.2019, 13:49 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
List.Combine объединяет несколько списков в один (можно пользоваться для этих целей оператором объединения List.Combine({list1, list2}) == list1 & list2).
List.Buffer принуждает Power Query создать конечный список, заданный его аргументом (помним, что одна из проблем Power Query - это ленивые, отложенные вычисления), что ускоряет выполнение при больших размерах списка).
 
Ответить
СообщениеList.Combine объединяет несколько списков в один (можно пользоваться для этих целей оператором объединения List.Combine({list1, list2}) == list1 & list2).
List.Buffer принуждает Power Query создать конечный список, заданный его аргументом (помним, что одна из проблем Power Query - это ленивые, отложенные вычисления), что ускоряет выполнение при больших размерах списка).

Автор - anvg
Дата добавления - 03.06.2019 в 13:49
monstr_ork Дата: Понедельник, 03.06.2019, 21:12 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
anvg, спасибо за помощь, но я себя переоценил (не понял как это все запустить).
Products = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Products"]}[Content], {{"Товар", "from"}, {"Товар_замена", "to"}}),
Qualities = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Qualities"]}[Content], {{"Качество", "from"}, {"Качество_замена", "to"}}),

как я понял, тут мы объявляем таблицы с уникальными значениями.
pairs = List.Buffer(Table.ToRecords(Products & Qualities)),

тут даем переменной что-то (объединям наши таблицы?)
Дальше мы что-то делаем с нашей основной таблицей.
Products, Qualities и Source - это переменные или это Вы так обозвали таблицы?
Если не трудно, могли бы выложить файл с внесенным кодом? (и небольшими разъяснениями)
 
Ответить
Сообщениеanvg, спасибо за помощь, но я себя переоценил (не понял как это все запустить).
Products = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Products"]}[Content], {{"Товар", "from"}, {"Товар_замена", "to"}}),
Qualities = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Qualities"]}[Content], {{"Качество", "from"}, {"Качество_замена", "to"}}),

как я понял, тут мы объявляем таблицы с уникальными значениями.
pairs = List.Buffer(Table.ToRecords(Products & Qualities)),

тут даем переменной что-то (объединям наши таблицы?)
Дальше мы что-то делаем с нашей основной таблицей.
Products, Qualities и Source - это переменные или это Вы так обозвали таблицы?
Если не трудно, могли бы выложить файл с внесенным кодом? (и небольшими разъяснениями)

Автор - monstr_ork
Дата добавления - 03.06.2019 в 21:12
anvg Дата: Понедельник, 03.06.2019, 22:35 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
как это все запустить
А вот сделали бы полноценный пример - и было бы всё без проблем :)
объединям наши таблицы
Да объединяем и преобразуем в список записей для последующего использования в List.Accumulate.
Решение лобовое. Тупо на каждой строке таблицы Source применяем по списку найти и заменить. Эффективность 1000 пар найти и заменить * на 4,5 миллиона строк = 4,5 миллиарда поиска и замен. Может имеет смысл разбить строки в Source на составные части с локальной индексацией, а потом делать замену через Table.Join как и советовали. Но что будет лучше - можно ответить, только зная структуру данных. По простому сколько из 1000 пар найти/заменить будут использованы для каждой строки Source.
К сообщению приложен файл: 9152815.xlsm (25.1 Kb)
 
Ответить
Сообщение
как это все запустить
А вот сделали бы полноценный пример - и было бы всё без проблем :)
объединям наши таблицы
Да объединяем и преобразуем в список записей для последующего использования в List.Accumulate.
Решение лобовое. Тупо на каждой строке таблицы Source применяем по списку найти и заменить. Эффективность 1000 пар найти и заменить * на 4,5 миллиона строк = 4,5 миллиарда поиска и замен. Может имеет смысл разбить строки в Source на составные части с локальной индексацией, а потом делать замену через Table.Join как и советовали. Но что будет лучше - можно ответить, только зная структуру данных. По простому сколько из 1000 пар найти/заменить будут использованы для каждой строки Source.

Автор - anvg
Дата добавления - 03.06.2019 в 22:35
monstr_ork Дата: Вторник, 04.06.2019, 00:17 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
anvg, по примеру полностью с Вами согласен.
На начальном этапе меня и 4,5 миллиарда устроят, единственное что хотел уточнить, а можно вместо таблицы файл подставить? Если да то как?

По поводу дробления строки на отдельные столбцы, я делал, но не понял как потом эти столбцы проверить, т.к. их в начале по знаку "," разделить, а потом еще прогонять циклом на замену.
Если Вам сложно, приложить файл где будет деление по столбцам?
 
Ответить
Сообщениеanvg, по примеру полностью с Вами согласен.
На начальном этапе меня и 4,5 миллиарда устроят, единственное что хотел уточнить, а можно вместо таблицы файл подставить? Если да то как?

По поводу дробления строки на отдельные столбцы, я делал, но не понял как потом эти столбцы проверить, т.к. их в начале по знаку "," разделить, а потом еще прогонять циклом на замену.
Если Вам сложно, приложить файл где будет деление по столбцам?

Автор - monstr_ork
Дата добавления - 04.06.2019 в 00:17
anvg Дата: Вторник, 04.06.2019, 10:42 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
дробления строки на отдельные столбцы
Не на столбцы, на пронумерованные строки. Точнее, сначала Table.AddIndexColumn для строк Source, и разбиение на слова содержимого второго столбца с преобразованием в таблицу и нумерацией через ту же функцию (нужно, чтобы потом собрать в правильном порядке исправленную фразу).
Вы всё же программировали на VBA, ну так осваивайте программирование на Power Query. Мышкоклацание - это не очень хороший подход.


Сообщение отредактировал anvg - Вторник, 04.06.2019, 10:43
 
Ответить
Сообщение
дробления строки на отдельные столбцы
Не на столбцы, на пронумерованные строки. Точнее, сначала Table.AddIndexColumn для строк Source, и разбиение на слова содержимого второго столбца с преобразованием в таблицу и нумерацией через ту же функцию (нужно, чтобы потом собрать в правильном порядке исправленную фразу).
Вы всё же программировали на VBA, ну так осваивайте программирование на Power Query. Мышкоклацание - это не очень хороший подход.

Автор - anvg
Дата добавления - 04.06.2019 в 10:42
sboy Дата: Вторник, 04.06.2019, 14:02 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
ну так осваивайте программирование на Power Query

Не так много инфо и учителей пока (тем более на русском). А от VBA язык значительно отличается..
Составил запрос по инструкции, помогите оптимизировать или подсказать что лишнее или неправильное
К сообщению приложен файл: PQ_ListAccum___.xlsx (27.3 Kb)


Яндекс: 410016850021169
 
Ответить
Сообщение
ну так осваивайте программирование на Power Query

Не так много инфо и учителей пока (тем более на русском). А от VBA язык значительно отличается..
Составил запрос по инструкции, помогите оптимизировать или подсказать что лишнее или неправильное

Автор - sboy
Дата добавления - 04.06.2019 в 14:02
anvg Дата: Вторник, 04.06.2019, 14:45 | Сообщение № 14
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
помогите оптимизировать или подсказать что лишнее или неправильное
Как по мне, так всё хорошо. Тест критерий оптимальности :) Посмотрим, что monstr_ork по результатам тестов скажет.
Я вот так сделал
 
Ответить
Сообщение
помогите оптимизировать или подсказать что лишнее или неправильное
Как по мне, так всё хорошо. Тест критерий оптимальности :) Посмотрим, что monstr_ork по результатам тестов скажет.
Я вот так сделал

Автор - anvg
Дата добавления - 04.06.2019 в 14:45
krosav4ig Дата: Вторник, 04.06.2019, 22:51 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
а у меня так получилось [vba]
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Translations = Table.Buffer(Table.Combine(List.Transform({"Таблица2","Таблица3"},each Table.Skip(Table.DemoteHeaders(Excel.CurrentWorkbook(){[Name=_]}[Content]),1)))),
    Replace = Table.ReplaceValue(Table.ReplaceValue(Source,",","""))},{t(""",Replacer.ReplaceText,{"Столбец2"}),":","""),fn(t(""",Replacer.ReplaceText,{"Столбец2"}),
    Evaluate = Table.TransformColumns(Replace,{{"Столбец2",each Table.FromRows(Expression.Evaluate("{{t("""&_&"""))}}",[t=Text.Trim,fn=(v)=>try Translations{[Column1=v]}[Column2] otherwise v]))}}),
    Custom1 = Table.TransformColumns(Evaluate,{{"Столбец2", each Combiner.CombineTextByDelimiter(", ")(Table.ToList(_,Combiner.CombineTextByDelimiter(": ")))}})
in
    Custom1
[/vba]
К сообщению приложен файл: 7273009.xlsm (26.1 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеа у меня так получилось [vba]
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Translations = Table.Buffer(Table.Combine(List.Transform({"Таблица2","Таблица3"},each Table.Skip(Table.DemoteHeaders(Excel.CurrentWorkbook(){[Name=_]}[Content]),1)))),
    Replace = Table.ReplaceValue(Table.ReplaceValue(Source,",","""))},{t(""",Replacer.ReplaceText,{"Столбец2"}),":","""),fn(t(""",Replacer.ReplaceText,{"Столбец2"}),
    Evaluate = Table.TransformColumns(Replace,{{"Столбец2",each Table.FromRows(Expression.Evaluate("{{t("""&_&"""))}}",[t=Text.Trim,fn=(v)=>try Translations{[Column1=v]}[Column2] otherwise v]))}}),
    Custom1 = Table.TransformColumns(Evaluate,{{"Столбец2", each Combiner.CombineTextByDelimiter(", ")(Table.ToList(_,Combiner.CombineTextByDelimiter(": ")))}})
in
    Custom1
[/vba]

Автор - krosav4ig
Дата добавления - 04.06.2019 в 22:51
sboy Дата: Среда, 05.06.2019, 10:31 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Как по мне, так всё хорошо

Не, что-то не так :) сделал синтетический тест. Исходную таблицу размножил на 100тыс строк. Таблицы с заменами не трогал.
Результаты по скорости обработки в обратном порядке:
4. мой запрос из сообщения 13 - 24 мин 48 сек
3. запрос anvg из сообщения 14 -1 мин 35 сек (чувствуется разница))
2. запрос krosav4ig из сообщения 15 - 46,4 сек!
1. запрос anvg из сообщения 6 - 2,3 сек!!!


Яндекс: 410016850021169
 
Ответить
Сообщение
Как по мне, так всё хорошо

Не, что-то не так :) сделал синтетический тест. Исходную таблицу размножил на 100тыс строк. Таблицы с заменами не трогал.
Результаты по скорости обработки в обратном порядке:
4. мой запрос из сообщения 13 - 24 мин 48 сек
3. запрос anvg из сообщения 14 -1 мин 35 сек (чувствуется разница))
2. запрос krosav4ig из сообщения 15 - 46,4 сек!
1. запрос anvg из сообщения 6 - 2,3 сек!!!

Автор - sboy
Дата добавления - 05.06.2019 в 10:31
monstr_ork Дата: Четверг, 06.06.2019, 18:40 | Сообщение № 17
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
anvg, пытаюсь изучать, информации в свободных истониках на русском слишком мало, а те что есть только про то как ручками все делать =(
Только ни кто не ответил, либо я не увидел, как вместо таблиц использовать файлы, которые подружаются отдельно?
Я сделал так :
[vba]
Код
Source = Excel.Workbook(File.Contents("путь к файлу"), null, true),
[/vba]
Но потом начались ошибки со столбцами, нужно еще что-то дописать?
И буквально еще один вопрос, как выгрзуить эти данные обратно в CSV?

[offtop]Было бы кроуто тему по Power query "открыть", хоть и не много обращений, но все же в обдом разделе[/offtop]


Сообщение отредактировал monstr_ork - Четверг, 06.06.2019, 23:17
 
Ответить
Сообщениеanvg, пытаюсь изучать, информации в свободных истониках на русском слишком мало, а те что есть только про то как ручками все делать =(
Только ни кто не ответил, либо я не увидел, как вместо таблиц использовать файлы, которые подружаются отдельно?
Я сделал так :
[vba]
Код
Source = Excel.Workbook(File.Contents("путь к файлу"), null, true),
[/vba]
Но потом начались ошибки со столбцами, нужно еще что-то дописать?
И буквально еще один вопрос, как выгрзуить эти данные обратно в CSV?

[offtop]Было бы кроуто тему по Power query "открыть", хоть и не много обращений, но все же в обдом разделе[/offtop]

Автор - monstr_ork
Дата добавления - 06.06.2019 в 18:40
monstr_ork Дата: Пятница, 07.06.2019, 22:00 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Модифицировал под файлы:


ошибок нет, но код не отрабатывает.
Подскажите в чем проблема?

anvg, Ваш код пока не осилил, по этому начал с более простого для меня.
К сообщению приложен файл: 1_table.csv (0.1 Kb) · 2_table.csv (0.0 Kb)


Сообщение отредактировал monstr_ork - Пятница, 07.06.2019, 23:15
 
Ответить
СообщениеМодифицировал под файлы:


ошибок нет, но код не отрабатывает.
Подскажите в чем проблема?

anvg, Ваш код пока не осилил, по этому начал с более простого для меня.

Автор - monstr_ork
Дата добавления - 07.06.2019 в 22:00
monstr_ork Дата: Пятница, 07.06.2019, 22:05 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
+ файл с основной таблицей.
Больше двух не прикладывает
К сообщению приложен файл: Data.csv (0.6 Kb)
 
Ответить
Сообщение+ файл с основной таблицей.
Больше двух не прикладывает

Автор - monstr_ork
Дата добавления - 07.06.2019 в 22:05
monstr_ork Дата: Суббота, 08.06.2019, 00:26 | Сообщение № 20
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
В итоге получилось сделать, вот так:
[vba]
Код
let
    Source_inout = Csv.Document(File.Contents("C:\Desktop\Power Query\Data.csv"),[Delimiter=";", Columns=2, Encoding=1251, QuoteStyle=QuoteStyle.None]),
    Source = Table.RenameColumns(Source_inout,{{"Column2", "Столбец2"}}),
    table_1_inout = Csv.Document(File.Contents("C:\Desktop\Power Query\1_table.csv"),[Delimiter=";", Columns=2, Encoding=1251, QuoteStyle=QuoteStyle.None]),
    table_2_inout = Csv.Document(File.Contents("C:\Desktop\Power Query\2_table.csv"),[Delimiter=";", Columns=2, Encoding=1251, QuoteStyle=QuoteStyle.None]),
    Translations = Table.Combine({table_1_inout, table_2_inout}),
    Replace = Table.ReplaceValue(Table.ReplaceValue(Source,",","""))},{t(""",Replacer.ReplaceText,{"Столбец2"}),":","""),fn(t(""",Replacer.ReplaceText,{"Столбец2"}),
    Evaluate = Table.TransformColumns(Replace,{{"Столбец2",each Table.FromRows(Expression.Evaluate("{{t("""&_&"""))}}",[t=Text.Trim,fn=(v)=>try Translations{[Column1=v]}[Column2] otherwise v]))}}),
    Custom1 = Table.TransformColumns(Evaluate,{{"Столбец2", each Combiner.CombineTextByDelimiter(", ")(Table.ToList(_,Combiner.CombineTextByDelimiter(": ")))}})
in
    Custom1
[/vba]

Остался один вопрос, как все это обратно в CSV выгрузить?

krosav4ig, а для чего используется Table.Buffer? В своем примере убрал, т.к. была ошибка в форматах. у меня талблица, а требовался текст.
 
Ответить
СообщениеВ итоге получилось сделать, вот так:
[vba]
Код
let
    Source_inout = Csv.Document(File.Contents("C:\Desktop\Power Query\Data.csv"),[Delimiter=";", Columns=2, Encoding=1251, QuoteStyle=QuoteStyle.None]),
    Source = Table.RenameColumns(Source_inout,{{"Column2", "Столбец2"}}),
    table_1_inout = Csv.Document(File.Contents("C:\Desktop\Power Query\1_table.csv"),[Delimiter=";", Columns=2, Encoding=1251, QuoteStyle=QuoteStyle.None]),
    table_2_inout = Csv.Document(File.Contents("C:\Desktop\Power Query\2_table.csv"),[Delimiter=";", Columns=2, Encoding=1251, QuoteStyle=QuoteStyle.None]),
    Translations = Table.Combine({table_1_inout, table_2_inout}),
    Replace = Table.ReplaceValue(Table.ReplaceValue(Source,",","""))},{t(""",Replacer.ReplaceText,{"Столбец2"}),":","""),fn(t(""",Replacer.ReplaceText,{"Столбец2"}),
    Evaluate = Table.TransformColumns(Replace,{{"Столбец2",each Table.FromRows(Expression.Evaluate("{{t("""&_&"""))}}",[t=Text.Trim,fn=(v)=>try Translations{[Column1=v]}[Column2] otherwise v]))}}),
    Custom1 = Table.TransformColumns(Evaluate,{{"Столбец2", each Combiner.CombineTextByDelimiter(", ")(Table.ToList(_,Combiner.CombineTextByDelimiter(": ")))}})
in
    Custom1
[/vba]

Остался один вопрос, как все это обратно в CSV выгрузить?

krosav4ig, а для чего используется Table.Buffer? В своем примере убрал, т.к. была ошибка в форматах. у меня талблица, а требовался текст.

Автор - monstr_ork
Дата добавления - 08.06.2019 в 00:26
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Power query замены значений в цикле
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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