Страницы: 1
RSS
Объединение данных с соседних строк в одну ячейку Power Query
 
Здравствуйте.

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

Хотелось бы либо с помощью Power Query это исправить или до импорта обычным функционалом excel.
Видится два варианта решения: добавление в столбы E и F данных с нижней строки либо в столбец G данных с верхних строк в нижнюю.

Помогите или посоветуйте куда копать, пожалуйста.

Код
let
    Источник = Folder.Files("C:\Users\ХХХ\Documents\Рабочее\Расходы\04 Сохраненки\2022\7У"),
    #"Добавлен пользовательский объект" = Table.AddColumn(Источник, "Пользовательский", each Extract7y([Folder Path]&[Name])),
    #"Разделить столбец по разделителю" = Table.SplitColumn(#"Добавлен пользовательский объект", "Name", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Name.1", "Name.2", "Name.3", "Name.4", "Name.5"}),
    #"Измененный тип" = Table.TransformColumnTypes(#"Разделить столбец по разделителю",{{"Name.1", Int64.Type}, {"Name.2", Int64.Type}, {"Name.3", type text}, {"Name.4", type text}, {"Name.5", type text}}),
    #"Разделить столбец по разделителю1" = Table.SplitColumn(#"Измененный тип", "Name.5", Splitter.SplitTextByDelimiter(".", QuoteStyle.Csv), {"Name.5.1", "Name.5.2"}),
    #"Измененный тип1" = Table.TransformColumnTypes(#"Разделить столбец по разделителю1",{{"Name.5.1", type text}, {"Name.5.2", type text}}),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Измененный тип1",{"Content", "Name.3", "Name.5.2", "Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Folder Path"}),
    #"Развернутый элемент Пользовательский" = Table.ExpandTableColumn(#"Удаленные столбцы", "Пользовательский", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13"}),
    #"Переименованные столбцы" = Table.RenameColumns(#"Развернутый элемент Пользовательский",{{"Name.1", "Год"}, {"Name.2", "Пер"}, {"Name.4", "Часть"}, {"Name.5.1", "СтрПдр"}, {"Column1", "№ стр"}, {"Column2", "Ст4ц"}, {"Column3", "Наименование расходов"}, {"Column4", "1.ФОТ"}, {"Column5", "2.ЕСН"}, {"Column6", "3.МАТ"}, {"Column7", "4.ТОП"}, {"Column8", "5.ЭЛЭ"}, {"Column9", "6.ПМЗ"}, {"Column10", "7.АМР"}, {"Column11", "8.ПРЗ"}, {"Column12", "ВСЕГО"}, {"Column13", "Уникальный ключ"}}),
    #"Измененный тип2" = Table.TransformColumnTypes(#"Переименованные столбцы",{{"Уникальный ключ", type text}, {"Ст4ц", type text}, {"№ стр", type text}, {"СтрПдр", type text}, {"Наименование расходов", type text}, {"Год", type text}, {"Часть", type text}})
in
    #"Измененный тип2"
 
Ну, объединение значений из разных строк так себе затея - если только через группировку.
Но стартовать по-любому надо с заполнения столбцов E и F. Выделяете либо оба, либо по одному -вкладка Преобразование - Заполнить. И выбираете вверх или вниз. По одному предпочтительнее, чтобы видели результат отдельно для каждого столбца. Потому что возможно, для F надо будет создавать отдельный столбец с проверкой столбца E на значения.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Ну, объединение значений из разных строк так себе затея - если только через группировку.
Но стартовать по-любому надо с заполнения столбцов E и F. Выделяете либо оба, либо по одному -вкладка Преобразование - Заполнить. И выбираете вверх или вниз. По одному предпочтительнее, чтобы видели результат отдельно для каждого столбца. Потому что возможно, для F надо будет создавать отдельный столбец с проверкой столбца E на значения.

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

Код
    ...
    #"Заполнено вверх" = Table.FillUp(#"Измененный тип2",{"№ стр"}),
    #"Условный столбец добавлен" = Table.AddColumn(#"Заполнено вверх", "Пользовательская", each if [Уникальный ключ] <> null then [Ст4ц] else Table.FillUp(#"Измененный тип3", {"Ст4ц"})
in
    #"Условный столбец добавлен"

И сейчас прихожу к выводу, что вариант 2 был бы предпочтительнее - объединить в одной ячейке разрезанное название позиции и удалить лишние строки. Так будет и файл меньше и тормозов меньше и удобнее лицезреть.
Изменено: luckyrichpaulp - 22.11.2022 12:05:14
 
Цитата
luckyrichpaulp написал:
в столбце F пусто должно быть
так не заполняйте и ориентируйтесь на столбец E...
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Год", Int64.Type}, {"Пер", Int64.Type}, {"Часть", type text}, {"СтрПдр", type text}, {"№ стр", Int64.Type}, {"Ст4ц", Int64.Type}, {"Наименование расходов", type text}, {"1.ФОТ", type number}, {"2.ЕСН", type number}, {"3.МАТ", type number}, {"4.ТОП", type number}, {"5.ЭЛЭ", type number}, {"6.ПМЗ", type number}, {"7.АМР", type number}, {"8.ПРЗ", type number}, {"ВСЕГО", type number}, {"Уникальный ключ", type text}}),
    #"Заполнено вверх" = Table.FillUp(#"Измененный тип",{"№ стр"}),
    #"Сгруппированные строки" = Table.Group(#"Заполнено вверх", {"Год", "Пер", "Часть", "СтрПдр", "№ стр"}, {{"Ст4ц", each List.Min([Ст4ц]), type nullable number}, {"Наименование расходов-текст", each _, type table [Год=nullable number, Пер=nullable number, Часть=nullable text, СтрПдр=nullable text, #"№ стр"=nullable number, Ст4ц=nullable number, Наименование расходов=nullable text, 1.ФОТ=nullable number, 2.ЕСН=nullable number, 3.МАТ=nullable number, 4.ТОП=nullable number, 5.ЭЛЭ=nullable number, 6.ПМЗ=nullable number, 7.АМР=nullable number, 8.ПРЗ=nullable number, ВСЕГО=nullable number, Уникальный ключ=nullable text]}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Сгруппированные строки", "Пользовательский", each Text.Combine([#"Наименование расходов-текст"][#"Наименование расходов"]," "))
in
    #"Добавлен пользовательский объект"

это если мышкой наклацать почти все. Только в группировке добавьте все нужные столбцы и просуммируйте, не забыв после Пользовательского столбца раскрыть все данные из полученной после группировки таблицы.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:

это если мышкой наклацать почти все. Только в группировке добавьте все нужные столбцы и просуммируйте, не забыв после Пользовательского столбца раскрыть все данные из полученной после группировки таблицы.
Дмитрий волшебник :)
В общем, полученный новый столбец перенес в конец, его раскрыл (только выбрал элементы затрат, всего и ключ), фильтранул по ключу (убрал null) - готово. Однако в загруженных данных в excel почему-то столбец Ст4ц пустой %(
Пробовал удалять Ст4ц и выводить его из раскрывающегося пользовательского - пусто.
Пробовал вообще все столбцы из раскрывающегося пользовательского - пусто + еще два столбца пустых получаются (год и еще какой-то)
Пробовал делать дубль, удаляя старый - пусто.
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
в столбце F пусто должно быть
Кстати, я не имел ввиду полностью, только по тем строкам где есть ключ и пусто, должно быть так, а остальные, где нет ключа, надо заполнить данными, со строки ниже.
 
Всё, победил! Поменял тип с number на text. Теперь выгружается столбец.
Спасибо большое, Дмитрий!!!

Хотел спросить еще: в коде Power Query можно делать пометки как в VBA, печатая знак '
???
 
Цитата
luckyrichpaulp написал:
можно делать пометки
для этого используется два слеша подряд: //
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
для этого используется два слеша подряд: //
Спасибо!
Страницы: 1
Наверх