Страницы: 1 2 След.
RSS
Таблицы через Power Query, Нужно создать таблицу с помощью Power Query
 
Мне нужно создать таблицу с помощью Power Query. Ни разу им не пользовался, но в будущем для будущей работы предстоит. Нужно взять данные из предыдущего листа, и на основе в них создать такую же таблицу как на следующем листе. Так как не понимаю как это сделать и первый раз вообще это делаю, то рассчитываю здесь на помощь. Как войти в Power Query и откуда взять данные это я понял, но сделать так чтобы таблица выглядела как те 2, что она этом листе - я не понимаю.
 
тест при устройстве на работу? )) как же вы будете потом работать, если сейчас в PQ элементарные операции не знаете?  
 
Александр, обучусь в процессе. Если вы здесь не для того чтобы помогать, а для того чтобы поглумится, то прошу не отписываться в этой теме.  
 
изучайте  
 
Я тоже справился:)

Код
let
    tab = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    fact = Table.RemoveColumns(tab,{"План"}),
    #"Pivoted Column" = Table.Pivot(fact, List.Distinct(fact[Месяц]), "Месяц", "Факт"),
    #"Demoted Headers" = Table.DemoteHeaders(#"Pivoted Column"),
    #"Transposed Table" = Table.Transpose(#"Demoted Headers"),
    #"Reordered Columns" = Table.ReorderColumns(#"Transposed Table",{"Column1", "Column2", "Column3", "Column5", "Column4"}),
    #"Transposed Table1" = Table.Transpose(#"Reordered Columns"),
    #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table1", [PromoteAllScalars=true])
in
    #"Promoted Headers"
 
Mike P, у вас лучше сделано)  Я забыл про "Не агрегировать" и сделал через замену значений  :D  
Изменено: Александр - 16.07.2024 14:54:55
 
Так наверное даже получится автоматически сохранить порядок статей

Код
let
    tab = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    grp = Table.Group(tab, {"Статья"}, {{"Count", each Table.RowCount(_), Int64.Type}}),
    addind = Table.AddIndexColumn(grp, "Index", 0, 1, Int64.Type),
    fact = Table.RemoveColumns(tab,{"План"}),
    pivot = Table.Pivot(fact, List.Distinct(fact[Месяц]), "Месяц", "Факт"),
    merge = Table.NestedJoin(pivot, {"Статья"}, addind, {"Статья"}, "pivot", JoinKind.LeftOuter),
    exp = Table.ExpandTableColumn(merge, "pivot", {"Index"}, {"Index"}),
    sort = Table.Sort(exp,{{"Index", Order.Ascending}}),
    rem = Table.RemoveColumns(sort,{"Index"})
in
    rem
 
Цитата
DOdX написал:
обучусь в процессе.
хороший мальчик
вариант
Пришелец-прораб.
 
Цитата
написал:
Table.FromRecords
Он бьет ошибку когда нету одного месяца(пример в Статье "Интернет"). Возможно Table.ExpandListColumn нужно открывать.
 
Александр L, я взял данные из файла Mike P, а там все месяцы присутствуют (Mike P, это как понимать?). Можно тогда так поступить:
m
Пришелец-прораб.
 
pq (старый)
pq (быстрее)
pq (еще быстрее)
Изменено: sotnikov - 17.07.2024 10:35:39
 
Здравствуйте!
Цитата
DOdX, написал:
Power Query ни разу не пользовался, но в будущем для будущей работы предстоит...обучусь в процессе.
У меня странное ощущение deja vu
Скрытый текст

Сделала мышкой, но... чтобы отсортировать как в исходном варианте пришлось вручную мастерить (пробовала без индекса), признаюсь - не шедевр.
Так что, AlienSx,  я стараюсь не только мышкой клацать ;) ...конечно пока не очень получается  :oops:
Всего доброго!  )
 
Цитата
Ma_Ri написал:
я стараюсь не только мышкой клацать
горячо приветствуем! Да если бы я был этой табличкой, то сделал бы предложение руки и сердца - настолько тщательны "предварительные ласки"  :D Если серьезно, то не надо группировать, чтобы удалить колоночку ("План"). Идея с pivot - понятна, не осуждаем :) Но вот шоу с сортировкой... Будем считать, что массаж данных удался :)
Пришелец-прораб.
 
Здравствуйте!
Цитата
AlienSx, написал:
если бы я был этой табличкой, то сделал бы предложение руки и сердца - настолько тщательны "предварительные ласки"
AlienSx, Ооооо! Знала бы моя табличка об этом, ради этого уже стоило помышкоклацать.  :)

Цитата
AlienSx, написал:
шоу с сортировкой
Я знала, что Вам «понравится» …))) и однако же предупреждала...

Если серьезно, то это первое мое самостоятельное произведение (несколько строк) на языке М. В голове еще нет системного понимания языка М, как жонглировать списками и данными на таком уровне как Вы.

О том, как сделать код оптимальным, проще, изящнее и быстрее пока вообще вопрос не стоит. На сейчас «мышка» мой друг и массаж данных не исключается. :)

Смотрю и восхищаюсь кодами признанных мастеров, которые «быстро» => «быстрее» => «еще быстрее».

Всего доброго! Хорошего дня и отличного настроения!  ;)  :)

Изменено: Ma_Ri - 17.07.2024 10:21:40
 
Ma_Ri, следите за выходом вот этой книги про M. Обещает быть хорошей.
Пришелец-прораб.
 
оригинальная книга
 
DOdX, если Вы будете использовать коды от sotnikov,
обратите внимание, что в кодах есть неточность (ее легко исправить), проверьте данные, которые выгружаются.
Если не хочется разбираться, то код от AlienSx,  #10 безупречный.
AlienSx, nilske, спасибо за советы.
Да все правильно, необходимо изучить литературу - с этим проще, но для меня важно получить практику.
На работе нет такой возможности (нет надстройки), получается в свободное время...
Может кто знает и подскажет как увеличить время в сутках, чтобы на все хватило сил и времени...Вот с этим у меня проблема.(
Получается, что самое лучшее  у меня еще впереди...)
DOdX, информация про литературу тоже для Вас будет полезной, как и для меня )
Спасибо!
Изменено: Ma_Ri - 17.07.2024 15:36:31
 
Цитата
Ma_Ri написал:
как увеличить время
всё просто - если на что-то не находится времени, то это что-то не является по-настоящему значимым :)
 
Цитата
nilske, написал:
не является по-настоящему значимым
Не все так просто и однозначно...Безусловно у каждого свои приоритеты..
Что касается вопроса изучения всех прелестей и овладения возможностями замечательного языка М (что-то вроде этого я слышала от AlienSx, )
я уже высказалась
Цитата
Ma_Ri,  написал:
Получается, что самое лучшее  у меня еще впереди...)
 
Цитата
Ma_Ri написал:
Я знала, что Вам «понравится» …))) и однако же предупреждала...
вдогонку: если хотите, чтобы строка (в данном случае, с "интернет") улетела вниз, надо писать собственную функцию сравнения 2х величин. В справке по List.Sort это доходчиво описано. Для таблиц "величины" - это строки. Поэтому, надо обращаться к полю, если сортируем по какому-то столбцу. Если "в лоб", то что-то в этом роде:
Код
Table.Sort(
        Source, 
        (x, y) => if x[Column1] = "интернет" then 1 else if y[Column1] = "интернет" then -1 else Value.Compare(x[Column1], y[Column1])
)

Value.Compare в данном случае отсортирует остальные значения по возрастанию. В конце концов, можно тупо задать нужный порядок следования значений:
Код
values = {"z", "a", "d"},
sort = Table.Sort(
        Source, 
        (x, y) => Value.Compare(List.PositionOf(values, x[Column1]), List.PositionOf(values, y[Column1]))
)

Цитата
Ma_Ri написал:
На работе нет такой возможности
на работе читайте Бена :)
Пришелец-прораб.
 
Ma_Ri, неточность, хмм... можно подробнее, не могу разглядеть )
 
sotnikov, Table.PromoteHeaders
 
AlienSx, Вы великолепны, благодарю за науку )
 
Цитата
Ma_Ri написал:
Table.PromoteHeaders
да вроде все норм. data - именованный диапазон. Не только таблицы можно затаскивать с помощью Excel.CurrentWorkbook
Пришелец-прораб.
 
Кстати да, не очевидный момент без заглядывания в файл прикрепленный мной. Другой подход к источнику, ссылаюсь на именованный диапазон, а не на таблицу. Отсюда и подъем первой строки в заголовки.
 
AlienSx, я использовала не именованный диапазон, а умную таблицу как у Вас , вот поэтому у меня и поехало...Sorry, sotnikov,  :oops:  
 
DOdX, удивится, тому, что мы натворили в его теме. DOdX, извините. ;)  
 
Цитата
Ma_Ri написал:
Если серьезно, то это первое мое самостоятельное произведение (несколько строк) на языке М. В голове еще нет системного понимания языка М, как жонглировать списками и данными
для меня по мере изучения М раз за разом все начинает играть новыми красками, в частности, последний переворот в сознании произошел после осознания, что надо знать, какой тип данных передает каждая стандартная функция на вход функции, которая является ее обязательным аргументом, - без этого функцию-аргумент невозможно написать. А это и не документировано для многих функций - и понять это можно либо экспериментами, либо по опыту и урокам других - другие же и с майкрософтом напрямую общаются для таких целей. Но это базовая база получается, мастхэв ИМХО.
Чтобы было понятно на примере:
Table.AddColumn(table as table, newColumnName as text, columnGenerator as function, optional columnType as type) as table
Описание
Добавляет столбец с именем newColumnName в таблицу table. Значения для этого столбца вычисляются с помощью заданной функции выбора columnGenerator, при этом каждая строка берется в качестве входных данных.

соответственно, функция-аргумент (и самописная, и стандартная) должна уметь работать с записями, которые ей передает Table.AddColumn.
Ну и в итоге я к чему: надо сидеть долбить стандартные функции на этот предмет, что еще остается. По кр. мере те, что явно часто используются другими или по своему описанию могут быть использованы во многих случаях... А там и списки и записи как сущности подтянутся - они же аргументы функций.
ИМХО конечно.
Изменено: voler83 - 17.07.2024 18:04:55
 
офф..
voler83, добрый день. Иногда пользуюсь этим сайтом для функций М (более подробно описаны и с примерами): https://powerquery.how/table-addcolumn/
 
Добрый день)
не поможете решить две задачи?
Страницы: 1 2 След.
Читают тему
Наверх