Power Query Продвинутый №19. Заголовки в двух строках, List.Zip

Поделиться
HTML-код
  • Опубликовано: 15 сен 2024
  • В этом уроке мы обработаем заголовки, которые находятся в двух строках. Нам понадобится функция List.Zip
    Файлы для спонсоров Boosty: boosty.to/comr...
    Файлы для спонсоров ВК: comrade...
    Файлы для спонсоров RUclips: • Post
    Индивидуальное обучение: comrade-xl.ru/...
    Страница урока на сайте: comrade-xl.ru/...

Комментарии • 18

  • @comrade_excel
    @comrade_excel  5 лет назад

    Файлы для спонсоров Boosty: boosty.to/comrade-xl/posts/3032ecb2-9766-40ea-a866-fc87d8f1edb5?share=post_link
    Файлы для спонсоров ВК: vk.com/comrade.excel?w=wall-185123800_169
    Файлы для спонсоров RUclips: ruclips.net/user/postUgwRTxlBcrccDJSM9CF4AaABCQ
    Индивидуальное обучение: comrade-xl.ru/pq-training/
    Страница урока на сайте: comrade-xl.ru/2019/07/28/powerquery-123-listzip-zagolovki-2-stroki/

  • @orfeusmilenium4544
    @orfeusmilenium4544 5 лет назад +4

    Как всегда, очень интересно, Тимур! Мне кажется это одна из самых часто встречаемых задач- замена заголовков.Даже здорово, что Вы возвращаетесь в предыдущие модули! Если будет возможность, рассмотрите пожалуйста еще раз получение данных из папки методами интерфейса. Вроде простая задача - изменить кое что в файле примера, потом распространить изменения на все файлы папки, и прописать относительный путь к ней.. Но у меня все время возникают сложности

    • @comrade_excel
      @comrade_excel  5 лет назад

      Спасибо!
      У меня есть в планах 1 урок по консолидации. Сделаю его с пользовательским интерфейсом.

    • @delkaaaa
      @delkaaaa 5 лет назад +1

      Cогласен!!!

  • @vasilijkravchenko8912
    @vasilijkravchenko8912 3 года назад +1

    Тимур, добрый день! Правильно я понимаю, что предварительно Вы рассказываете про формулу на отметке 6:43 не про Table.TransformColumnNames, а про Table.RenameColumns?

  • @orfeusmilenium4544
    @orfeusmilenium4544 4 года назад

    Добрый день, Тимур! Не могли бы Вы еще раз вернуться к теме, рассмотренной в данном видео. Я натолкнулся на трудности при конкатенации заголовков в двух строках.Дело в том , что я пытался склеить заголовки не последовательно, как у Вас , а параллельно, так как у меня они не пустые и мне не подходит объединение с &. У Ник. Павлова есть решение. но двойная трансформация не кажется мне изящным решением...

    • @comrade_excel
      @comrade_excel  4 года назад

      Разместите файлы в облаке и ссылку в ответ на комментарий напишите. Я не понял в чем дело.

    • @orfeusmilenium4544
      @orfeusmilenium4544 4 года назад

      yadi.sk/i/ME8cBbfJWUiTnQ Вот ссылка, пример чисто условный. Я тренировался на нем, в файле и мои потуги решения .Я Пытался слить заголовки из строк 6 и 7, если смотреть в excele, спасибо за хлопоты, Если Вас не затруднит... мне кажется, это частая задача

    • @comrade_excel
      @comrade_excel  4 года назад +1

      Очевидно, файл выгружается из какой-то системы вроде 1С. Кто его выгружает? Вы или кто-то другой? Вы можете как-то влиять на процесс выгрузки файла?
      Если да, то выгружается файл в формате TXT(UTF-8) или в формате CSV. С файлами XLSX вы должны работать только если нет другого выбора.
      Обычно во всех системах доступна выгрузка в формате txt.
      Ниже ответ на ваш вопрос. Скопируйте и вставьте в свой файл.
      let
      Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
      Пользовательская2 =
      List.Zip(
      {Table.ColumnNames(Источник),
      Record.ToList(Источник{0})}
      ),
      Пользовательская3 =
      List.Transform(
      Пользовательская2,
      each List.ReplaceValue(_, null, "", Replacer.ReplaceValue)
      ),
      Пользовательская1 =
      List.Transform(
      Пользовательская3,
      each _{0}& " " & _{1}
      ),
      Пользовательская4 =
      Table.RenameColumns(
      Источник,
      List.Zip({Table.ColumnNames(Источник), Пользовательская1})
      )
      in
      Пользовательская4

    • @orfeusmilenium4544
      @orfeusmilenium4544 4 года назад

      Огромное спасибо, Тимур! Подскажите пожалуйста, а почему из 1С, надо выгружать не в excele? мне казалось это так естественно..... Кстати там есть варианты выгрузки в TXT(UTF-8), TXT(ANSI), документы HTML 2,3,4, электронная таблица UDF. кажите пожалуйста, какой предпочтительнее и почему? Извините за назойливость, хочется понять и разобраться....

    • @comrade_excel
      @comrade_excel  4 года назад +6

      @@orfeusmilenium4544 предпочтительнее txt (utf-8).
      Excel из 1С (и любой другой системы) выгружается коряво: лишние столбцы, непечатные символы и т. д.
      Вторая причина - скорость обработки файла. TXT обработается в несколько раз быстрее, чем XLSX с тем же содержанием. Подключаться при помощи PQ всегда лучше к txt (utf-8) или csv.
      Формат xls вообще нужно избегать. Это устаревший формат. Он больше весит, намного дольше обрабатывается.

  • @user-wr5rc5pp8r
    @user-wr5rc5pp8r 4 года назад

    Тимур здравствуйте. А возможно в определённом файле разделить данные по "слоям" растянуть их в одну строку и склеить?
    Файл для примера.
    1drv.ms/x/s!AvHg5A6Wyul5gcQufq-1r0Rc5MC9YQ

    • @comrade_excel
      @comrade_excel  4 года назад

      Здравствуйте! Ответил в прошлом комментарии.

  • @alexandrus
    @alexandrus 4 года назад

    А можно объединить эти 2 строки для заголовка?
    www.screencast.com/t/ATT3ClWkrrr
    File: www.dropbox.com/s/ikhstmjk9z4u9cs/firmgru.xlsx?dl=1
    Спасибо

    • @comrade_excel
      @comrade_excel  4 года назад

      Можно!
      1. Транспонировать
      2. Заполнить вниз
      3. Склеить

    • @alexandrus
      @alexandrus 4 года назад

      Спасибо, работает

  • @xazratxonsultonxonov9537
    @xazratxonsultonxonov9537 2 года назад +1

    в конце при List.Zip выходит ошибка, может кто помочь?
    let
    Источник = Excel.Workbook(File.Contents("D:\Хазратхон\Учеба\power bi\Bob\2. Отчетная дата\Портфель\Портфель 01.01.2022.xlsx"), null, true),
    #"D:\Хазратхон\Учеба\power bi\Bob\2. Отчетная дата\Портфель\_Портфель 17.12.2021.xlsx" = Источник{[Item="Лист1",Kind="Sheet"]}[Data],
    Data = Источник{[Item="Лист1",Kind="Sheet"]}[Data],
    #"Добавлен пользовательский объект" = Table.AddColumn(Data, "Дата отчета", each Data{0}[Column2]),
    #"Разделить столбец по положению" = Table.SplitColumn(#"Добавлен пользовательский объект", "Дата отчета", Splitter.SplitTextByPositions({0, 10}, false), {"Дата отчета.1", "Дата отчета.2"}),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Разделить столбец по положению",{"Дата отчета.2"}),
    #"Пониженные заголовки" = Table.DemoteHeaders(#"Удаленные столбцы"),
    Лист1 = List.LastN(Record.ToList(#"Пониженные заголовки"{0}),1),
    Лист2 = List.FirstN(Record.ToList(#"Пониженные заголовки"{2}),205),
    ЗаголовкиЛист = Лист2&Лист1,
    Пользовательский1 = #"Пониженные заголовки",
    #"Удаленные верхние строки" = Table.Skip(Пользовательский1,3),
    Пользовательский2 = Table.RenameColumns(#"Удаленные верхние строки", List.Zip({Table.ColumnNames(#"Удаленные верхние строки"), ЗаголовкиЛист}))
    in
    Пользовательский2