Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 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 Дек 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 Дек 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 Дек 2018 17:08:45
 
Alexey_Spb,Спасибо Вам за вариант, попробую.
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
Страницы: 1
Читают тему (гостей: 1)
Наверх