Страницы: 1
RSS
Power Query единоразовое создание нескольких дубликатов столбца
 
В очередной раз всех приветствую.

Подскажите, есть ли возможность  сразу создать, например, три (или заданное кол-во) дубликата столбца?
Достаточно часто мне приходится раскладывать дату на год, день, неделю и т.д.
Сейчас для этого я каждый раз создаю дубликат столбца, а затем извлекаю нужное.

Интересно, можно ли осуществить операцию дублирования как-то более оптимально?

Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"фио", type text}, {"отдел", type text}, {"сумма", Int64.Type}, {"Дата", type datetime}}),
    #"Дублированный столбец" = Table.DuplicateColumn(#"Измененный тип", "Дата", "Копия Дата"),
    #"Дублированный столбец1" = Table.DuplicateColumn(#"Дублированный столбец", "Дата", "Копия Дата.1"),
    #"Дублированный столбец2" = Table.DuplicateColumn(#"Дублированный столбец1", "Дата", "Копия Дата.2"),
    #"Извлеченный год" = Table.TransformColumns(#"Дублированный столбец2",{{"Копия Дата", Date.Year, Int64.Type}}),
    #"Извлеченное название месяца" = Table.TransformColumns(#"Извлеченный год", {{"Копия Дата.1", each Date.MonthName(_), type text}}),
    #"Вычисленная неделя года" = Table.TransformColumns(#"Извлеченное название месяца",{{"Копия Дата.2", Date.WeekOfYear, Int64.Type}})
in
    #"Вычисленная неделя года"
Изменено: Dyroff - 27.12.2018 12:45:48
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
А зачем вы создаете дубликаты с датами, и потом их трансформируете, когда можно кнопками сразу создавать столбцы с нужными значениями?
Вот горшок пустой, он предмет простой...
 
PooHkrd,хм.. вот этого не знал:) Спасибо.
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Offtop
Цитата
PooHkrd написал:
А зачем вы создаете дубликаты с датами, и потом их трансформируете,
Ну, это же меню изучать надо. А тут раз метод запомнил - и применяешь на все случаи жизни - никакой головной боли :)
 
Цитата
Андрей VG написал:
это же меню изучать надо
Это, кстати, не просто. Там менюшки очень сильно контекстозависимые от того сколько и какого типа столбцов выделено в момент нажатия на ПКМ или при выборе ленты. Даже вкладки новые в ленте появляются внезапно!
Вот горшок пустой, он предмет простой...
 
Андрей VG,Я, конечно, оценил Вашу иронию. Но почему Вы всегда рассматриваете подобные вопросы через призму того, что человек ничего не хочет сам изучать, а лишь получить готовое решение и все?
Изучал я меню, да, про этот пункт не знал, что здесь зазорного, если я на форуме спрашиваю о том функционале, которого не знаю. Не в силу лени и нежелания изучения инструмента, а потому, что просто вот не знал об этой возможности.
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
Dyroff написал:
а потому, что просто вот не знал об этой возможности.
Я тоже не знаю о такой возможности, вы не поверите ;) Но! Известно, что есть добавление столбца. Чтобы получить номер месяца из даты, можно предположить, что есть такая функция. Следовательно достаточно заглянуть в справочник, чтобы её взять и применить. Но по международной статистике 70-80% людей не читают подобные вещи, а
Цитата
Dyroff написал:
спрашиваю о том функционале, которого не знаю.
Отсюда и ирония.
 
Цитата
Андрей VG написал:
Я тоже не знаю о такой возможности, вы не поверите
Вот тут Вы правы:), я не могу в это поверить.
Не всегда стоить всех мерить по себе. У Вас, очевидно, огромный опыт и багаж знаний в области работы с данными,Вы знаете и VBA и SQl, и DAX, да и кучу всего, о чем я даже не подозреваю. Все эти знания и их применение и владение информацией, безусловно накладывают определенный отпечаток на работу вашего мышления и построение причинно следственных связей.
Для Вас это очевидные вещи, ну просто в силу того, что мозг у Вас так работает. Но блин, поверьте, очень много людей, у которых не сработает эта цепочка так быстро, а у некоторых и не сработает вообще)
Так что из этих 70-80% людей, конечно, есть и те, которые просто и не хотят вникать, но есть и другие, которые только осваивают этот путь и не наработали еще того опыта, который им позволит быстро вычленять то, что нужно и быстро находить ответ.
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, Вот согласен с вашими доводами, но какая разница в целом, когда ответ на вопрос получен :)
Все мы разные, со своими тараканами. А Андрей VG, большое спасибо за то, что тратит свое время на таких как мы :)
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Александр, да и я тоже  очень благодарен Андрею за его помощь.
Просто я вижу что Андрей часто судит о ситуации со своего уровня, уровня человека, для которого даже если он не знает ответ- найти  нужный справочник, правильно сформулировать вопрос и найти решение (с имеющимися то знаниями) не составляет труда. Но к сожалению, не все, кто задают тут вопросы могут так же, иначе и вопросы то не задавали:)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Коллеги, в защиту Андрея ( в которой он, правда, не нуждается) имею сказать, что изучение интерфейса программы чтения справочников не требует. Сиди да гляди какие есть кнопки, и какие всплывают подсказки. Единственно что, если какие-то кнопки неактивны, то тут да, или в справочник, или сюда имеет смысл задать вопрос.
Лично мне хватило 3-4 часов чтобы протыкать всевозможные комбинации и понять возможности кнопочного подхода. На текущий момент работаю в режиме "натыкал в кнопки, подправил формулы, получил результат". Но тут уже от справочника не отрываешься и спецификации языка знать не помешает. Правда в PBI стало уже значительно проще, после добавления в расширенный редактор Intellisense.
Изменено: PooHkrd - 27.12.2018 15:28:46
Вот горшок пустой, он предмет простой...
 
Dyroff, добрый день.

Если я правильно понял ваш вопрос, он заключается в том как выполнить некое действие на языке М (PowerQuery) некоторое количество раз.

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

- Использование рекурсивной функции (которая вызывает саму себя и на каждом шаге добавляет в таблицу столбец)
- Использование в качестве тягловой силы для создания функции List.Generate - на каждом шаге создаваемого списка у вас будет таблица с новым столбцом, а в итоге вы берете последний элемент из списка (на M элементами всех "массивов" может быть что угодно - например, таблица, функция или даже тип данных).

Но конкретно в вашем случае (простое преобразование) и малое число шагов, проще просто расклонировать строки.

Пример с итеративной функцией (пишу без проверки в редакторе - надо проверять синтаксис и работу):
Код
AddClones = (
             Src as table,             // Ваша таблицу, куда добавлять клонов
             ColNames as list,         // Имя вновь добавляемых столбцов списком (имена должны быть уникальные)
             optional _Index as number // Индекс в списке столбцов. При вызове пользователем не используется.
            ) as table =>
 let 
  Index = if _Index = null then 0 else _Index // Если запущено без аргумента (первый раз) то присваиваем ноль.
 in 
  if Index = List.Count() then
   Src
  else
   Table.DuplicateColumn(@AddClones(Src, ColNames, Index + 1), "Дата", ColNames{Index}),


 MyTable = AddClones(#ВашаТаблица, {"Столбец 1", "Столбец 2", "Столбец 3"})

Про List.Generate напишу позже.
Изменено: Alexey_Spb - 27.12.2018 17:08:45
 
Alexey_Spb,Спасибо Вам за вариант, попробую.
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
Страницы: 1
Наверх