Страницы: 1
RSS
Как выгруженный из 1С журнал проводок в Power Query сделать плоской таблицей, Выгрузка из 1С делается по 3 строки на каждую запись в базе
 
Добрый день.

Проблема в следующем.
Выгружаю из "1С Бухгалтерия" (редакция 1.6) Журнал проводок.
При этом одна запись делается тремя строками.
Как сделать таблицу нормализованной?
Чтобы каждые три строки преобразовались в одну. Чтобы потом сводную можно сделать было.
Три строки через транспонирование преобразовать получилось. А как пройтись циклом по всем строкам никак не соображу(
Помогите сделать запрос в Power Query.
Изменено: Александр Медведев - 11.11.2019 15:35:54
Если не можешь победить беспорядок, то надо возглавить его.
 
Можете составить вручную таблицу, которую хотите видеть на выходе?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Да. Сейчас.
Если не можешь победить беспорядок, то надо возглавить его.
 
Кроме первого столбца, который удаляется. Все остальные столбцы разворачиваются по три вправо.
Например колонка 1:
Период
Документ
Организация
Становятся отдельными колонками: Период Документ Организация
И таким же образом все остальные, даже если они пустые.
Если не можешь победить беспорядок, то надо возглавить его.
 
Я немножко изменил диапазон умной таблицы (см. пример), чтобы убрать ненужные преобразования. А сам запрос выглядит так:
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    AddedIndex = Table.AddIndexColumn(Источник, "Индекс", 0, 1),
    AddedGroup = Table.AddColumn(AddedIndex, "группа", each Number.IntegerDivide([Индекс], 3), Int64.Type),
    GroupedRows = Table.Group(AddedGroup, {"группа"}, {{"таб", each Table.FromRows( {List.Combine( Table.ToRows( _ ) )} ), type table}}),
    Custom1 = Table.Combine( GroupedRows[таб] ),
    PromotedHeaders = Table.PromoteHeaders(Custom1, [PromoteAllScalars=true]),
    SelectedColumns = Table.SelectColumns(PromotedHeaders, List.Select( Table.ColumnNames( PromotedHeaders ), each not Text.Contains( _, "Column" ) ) )
in
    SelectedColumns
Вот горшок пустой, он предмет простой...
 
А третья строка
AddedGroup = Table.AddColumn(AddedIndex, "группа", each Number.IntegerDivide([Индекс], 3), Int64.Type),
добавляется вручную или есть функция на ленте?
Если не можешь победить беспорядок, то надо возглавить его.
 
Александр Медведев,
Вот горшок пустой, он предмет простой...
 
Хм. И такое есть.
Придется видимо переквалифицироваться с VBA на PQ. Вернее сказать дополнить его функционалом и отчасти заменить.
Очень интересные возможности открываются.
Спасибо! Результат устраивает.
Буду разбираться.
Если не можешь победить беспорядок, то надо возглавить его.
 
Цитата
Александр Медведев написал:
Очень интересные возможности открываются.
Скажем так, после 2.5 лет знакомства с PQ он не устает меня удивлять, и на текущем уровне развития (я далеко не гуру, так чуть выше среднего) я по работе не сталкивался с задачами преобразования таблиц в удобоваримый вид, которые этим инструментом нельзя разрешить. Если только маркерами для преобразований не является форматирование ячеек. Хотя и этот вопрос в принципе решаем, вот так, например, но не на моем уровне.
Ну и скорость, конечно тоже - из того что я видел: вылизанный код VBA всегда работает быстрее чем вылизанный код PQ (там своя специфическая сторона вопроса).
Удачи в познании.
Изменено: PooHkrd - 11.11.2019 16:10:32
Вот горшок пустой, он предмет простой...
 
PooHkrd, подскажите пожалуйста, что означает символ "_" в коде вашего запроса?
 
Александр Медведев, отвечаю на вопрос из лички.
Переделал запрос чтобы было видно все по шагам. Все шаги сделаны мышкоклацательным способом. Все примененные функции при создании новых столбцов  взяты отсюда.
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Added Index" = Table.AddIndexColumn(Источник, "Индекс", 0, 1),
    #"Inserted Integer-Division" = Table.AddColumn(#"Added Index", "Целочисленное деление", each Number.IntegerDivide([Индекс], 3), Int64.Type),
    #"Grouped Rows" = Table.Group(#"Inserted Integer-Division", {"Целочисленное деление"}, {{"Таблицы", each _, type table}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Пользовательская", each Table.ToRows( [Таблицы] )),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Пользовательская1", each List.Combine( [Пользовательская] )),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Пользовательская2", each Table.FromRows( {[Пользовательская1]} )),
    Custom1 = Table.Combine( #"Added Custom2"[Пользовательская2] ),
    #"Promoted Headers" = Table.PromoteHeaders(Custom1, [PromoteAllScalars=true])
in
    #"Promoted Headers"

Такой вид группировки выполняется так:


Murderface_,
Вот здесь Андрей VG расписывал что это такое.
Изменено: PooHkrd - 12.11.2019 10:06:12
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх