Страницы: 1
RSS
Power Query / перенос и транспонирование даты из названия столбца в шаблоне-таблице, Ошибка при преобразовании транспонированных столбцов с датой, загрузка в функцию
 
Коллеги, подскажите плз!

Хочу сделать из таблицы шаблон. Чтобы потом из папки подтягивать данные в свод.

Когда преобразую таблицу и столбец с датой и развертываю его вниз - вроде все работает для сохранения.
Затем делаю функцию-шаблон (filepath,sheet). Когда ее вставляю в пользовательский столбец для выемки данных из папки, то выдает ошибку. Точнее видит только исходную таблицу. Хотя мне всего лишь надо преобразовать и вниз дату.
Как быть?

В запросе "" произошла ошибка. Expression.Error: Столбец "янв.20" таблицы не найден.
Сведения:
   янв.20

Код
let
    Источник = Excel.Workbook(File.Contents("C:\Users\Lenovo\Documents\Работа\1. Запросы\ЖД\Грузы 2019-2020\Рос жд перевозки жрс 2020-01.xlsx"), null, true),
    Лист1_Sheet = Источник{[Item="Лист1",Kind="Sheet"]}[Data],
    #"Измененный тип" = Table.TransformColumnTypes(Лист1_Sheet,{{"Column1", type text}, {"Column2", type any}, {"Column3", type any}, {"Column4", type any}, {"Column5", type any}, {"Column6", type any}}),
    #"Повышенные заголовки" = Table.PromoteHeaders(#"Измененный тип", [PromoteAllScalars=true]),
    #"Измененный тип1" = Table.TransformColumnTypes(#"Повышенные заголовки",{{"Column1", type text}, {"янв.20", type number}, {"дек.19", type number}, {"% изм. за мес.", type any}, {"янв.19", type number}, {"% изм. 20/19", type any}}),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Измененный тип1",{"дек.19", "% изм. за мес.", "янв.19", "% изм. 20/19"}),
    #"Переименованные столбцы" = Table.RenameColumns(#"Удаленные столбцы",{{"Column1", "Направление и груз"}}),
    #"Строки с примененным фильтром" = Table.SelectRows(#"Переименованные столбцы", each [Направление и груз] <> null and [Направление и груз] <> ""),
    #"Несвернутые столбцы" = Table.UnpivotOtherColumns(#"Строки с примененным фильтром", {"Направление и груз"}, "Атрибут", "Значение")
in
    #"Несвернутые столбцы"
 
Kerel, PQ Вам намекает, что столбца "янв.20" в Вашем файле нет. Раз уж Вы хотите сделать "функцию-шаблон", рискну предположить, что месяц и год в Ваших исходных данных будут меняться с течением времени. Соответственно, в коде Вашей функции следует избежать упоминания столбцов, название которых постоянно меняется (как это происходит в шагах #"Измененный тип1" и #"Удаленные столбцы"), либо менять имена таких столбцов динамически, в зависимости от месяца/года.
 
Код
let
    Source   = Excel.CurrentWorkbook(){[Name="data"]}[Content][[Column1],[Column2]],
    ToRows   = List.Buffer(Table.ToRows(Source)),
    fn       = (j)=>
               let
                  a = List.Generate(
                        ()=>[i=j+1,v=ToRows{i},s=v{1}], 
                        each if [i]<List.Count(ToRows) 
                            then Number.Round([s],10)<=Number.Round(ToRows{j}{1},10) 
                            else false,
                        each [i=[i]+1,v=ToRows{i},s=[s]+v{1}],each [v]
                      ),
                  b = {List.Count(a)+j+1,ToRows{j}{0},Date.From(ToRows{0}{1}),Table.FromRows(a)}
               in b,
    Generate = Table.FromRows(
                   List.Generate(
                       ()=>fn(1),
                       each _{0}<=List.Count(ToRows), 
                       each fn(_{0}),
                       each List.Skip(_,1)
                   ),
                   {"Направление","Дата","x"}
               ),
    Expand   = Table.ExpandTableColumn(Generate, "x", {"Column1", "Column2"}, {"Вид груза", "Тыс. т"}),
    Typed    = Table.TransformColumnTypes(Expand,{{"Дата", type date}})
in
    Typed
 
Это оч круто! спасибо большое!! именно то, что нужно! Вау прям...
Правильно ли я понимаю, что кликами так не сделать?  
Долго ли надо учиться, чтобы так прописывать формулы?
 
Цитата
Kerel написал:
кликами так не сделать?  
абсолютно верно
Цитата
Kerel написал:
Долго ли надо учиться
Это зависит от вашего желания и способностей. У меня ушло полтора-два года вялотекущего обучения. Т.е. пока в проблемы не тыкнешься дальше в обучении не продвигался. А если взяться как следует, то можно очень быстро освоить и начать кодить в редакторе самостоятельно
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Kerel  написал:кликами так не сделать?  абсолютно верно
Кстати, сделал на кликах - с помощью "словаря" таблицы с датами-месяцами в формате текста и формате дат.

Единственное этот словарь чувствителен к исходному формату даты в таблице (общий или текстовый).


А вот, Андрей Лящук, получается предложил вариант, которому все равно какой формат в ячейках.

Как я понял он каждый элемент таблицы раскладывает в отдельную ячейку, а потом собирает их вновь..


Код
    #"Объединенные запросы" = Table.NestedJoin(#"Другие удаленные столбцы", {"Column2"}, Период, {"Период_текст"}, "Период", JoinKind.LeftOuter),
    #"Развернутый элемент Период" = Table.ExpandTableColumn(#"Объединенные запросы", "Период", {"Период_нов"}, {"Период_нов"}),
    #"Заполнение вниз" = Table.FillDown(#"Развернутый элемент Период",{"Период_нов"}),
    #"Строки с примененным фильтром" = Table.SelectRows(#"Заполнение вниз", each [Column1] <> null and [Column1] <> ""),
Страницы: 1
Наверх