Power Query. ВПР без Merge / Join

Поделиться
HTML-код
  • Опубликовано: 20 окт 2024

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

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

    Файлы для спонсоров Boosty: boosty.to/comrade-xl/posts/09e1eef0-1e9a-4273-b0d5-d15f3249928e?share=post_link
    Файлы для спонсоров ВК: vk.com/comrade.excel?w=wall-185123800_536
    Файлы для спонсоров RUclips: ruclips.net/user/postUgkxTJ29KU2S4TbPMbguhH94tlw_gd2YZnnN
    🧑‍🏫 Индивидуальное обучение: comrade-xl.ru/pq-training/
    💻 Страница урока на сайте: comrade-xl.ru/2022/07/06/pq-vars-vlookup-single-column/
    Эпизоды:
    00:00 О чем этот урок
    01:06 Предварительная работа
    03:45 Подставляем данные из столбца другой таблицы

  • @chale_r
    @chale_r 2 года назад +9

    Где Вы всему этому научились?
    Как возможно в принципе дойти до такого ...???!!!
    Я в шоке от каждого видео.
    Низкий поклон за труд.

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

      Спасибо! Что-то прочитал, а что-то потом приходит с опытом.

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

      @@comrade_excel Очень интересно, но ничего не понятно :)

  • @ДмитрийНикитин-и8о
    @ДмитрийНикитин-и8о 9 месяцев назад

    5:18 Вот никак не пойму, почему тут нам не выдаёт ошибку: [ticket_type]{[ticket_type=[ticket_type]]}? Ведь мы же ссылаемся на столбец внешней таблицы, который по идее не виден, и должна выдаваться ошибка. Товарищ Excel, пожалуйста, объясни этот момент: почему в примерах где мы использовали функцию Table.SelectRows и ссылались на столбец внешней таблицы, нам выдавалась ошибка (и мы использовали вложенную конструкцию let ... in ...), а в этом примере ошибку не выдаёт?

  • @ДмитрийНикитин-и8о
    @ДмитрийНикитин-и8о 9 месяцев назад

    Интересное наблюдение: чтобы из table сделать record я сначала по ошибке использовал функцию Table.ToRecords. В итоге получил list из records, то есть совсем не то, что требовалось. Потом подсмотрел в данном видео, что использовалась другая функция - Record.FromTable. Ещё важная особенность этой функции в том, что первый столбец таблицы должен непременно называться Name, а второй - Value, иначе PQ выдаёт ошибку, поэтому переименование столбцов в данном видео было отнюдь не косметическое.
    Ещё важный момент: в таблицах, из которых подтягиваем значения, не должно быть дублей - иначе выдаст ошибки.

  • @alexeast555
    @alexeast555 2 года назад

    Спасибо за видео, подскажите, если в таблице есть повторяющиеся значения, как сделать так, чтоб ошибка не появлялась, и бралось первое значение, как происходит когда используем merge?

    • @Shorek_chelvok
      @Shorek_chelvok 7 месяцев назад

      при объединении как раз добавятся все вхождения

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

    Из текущего примера не совсем понятно для чего городить огород? чем эта функция лучше merge? в данном примере рациональнее использовать именно merge, тк в будущем разобраться в происходящем будет сильно проще, чем в этом избыточном нагромождении кода.

    • @Supersnickers91
      @Supersnickers91 4 месяца назад

      А как быть, если, например, в "Таблице №1" есть много строк "операция" с дублирующими значениями (и удалять их нельзя, т.к. каждая строка это каждая фин.операция), столбец "сумма" по каждой строке. И нужно добавить к этой таблице только один столбец с "наименованием проекта". И есть "Таблица №2", где есть столбец "операция" и как раз нужный нам столбец "наименование проекта". Так вот, если сделать merge к "Таблице №1" "Таблицу №2", по ключу "операция", то он задублирует некоторые позиции и "сумма" будет также задублирована.

    • @ruMontyRaptor
      @ruMontyRaptor 3 месяца назад

      @@Supersnickers91 как это относится к текущему примеру? после операции merge, под которой мы понимаем стандартную функцию Table.NestedJoin, у нас точно также добавляется столбец "mergeName", который содержит вложенную таблицу, и вот если эта вложенная таблица содержит несколько строк и мы ее развернем, только тогда у нас появятся дубли по основной таблице, но что нам мешает выполнить любые операции со вложенными таблицами? по типу List.Sum если нужно сумма по определенному столбцу, или list.Max average, table.Max для проверки по доп столбцу и тд и тп. зачем нам всю таблицу добавлять к каждой строке и потом ее фильтровать нагромождениями сложночитаемого кода, если есть join? к тому же merge поддерживает параметры, где не только JoinKind.LeftOuter, получается что функционал merge сильно выше, чем то что предлагает автор видео.

    • @ruMontyRaptor
      @ruMontyRaptor 3 месяца назад

      @@Supersnickers91 я даже решил потестить и если во вложенных табличках будут дубли по заведенному ключу(если все выполнять по методике автора видео, то что он пишет #table{[key = [inpurValue]]}), то вместо record вы получите "Expression.Error: Ключ соответствовал более чем одной строке в таблице."
      для того чтобы 1 в 1 скопировать впр из эксельки, нам нужно сделать мерж и от вложенной таблички взять первую строку.

    • @Supersnickers91
      @Supersnickers91 3 месяца назад

      @@ruMontyRaptor я имел ввиду, как вообще сделать такой мерж, чтобы остались все строки из таблицы №1 (даже дублирующие), при этом подтянулись все совпадающие из таблицы №2 и при этом столбец «сумма» из таблицы №1 не дублировался?)

    • @ruMontyRaptor
      @ruMontyRaptor 3 месяца назад

      @@Supersnickers91 надо чтобы во вложенных таблицах была 1 строка, те простой вариант просто удалить дубликаты по ключу во второй таблице
      ну и да, вариантов как поступить на самом деле сильно больше, в зависимости от задачи

  • @MrSiberianMan
    @MrSiberianMan 2 года назад

    Если подтягиваемого значения не окажется,выдаст ошибку по аналогии с впр? И как сделать так чтобы ошибки не было? Iferror ?

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

      Аналог ЕСЛИОШИБКА - это try-otherwise. Пример использования здесь comrade-xl.ru/2020/06/15/power-query-links-3/

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

    Можно немного сократить количество ссылок с помощью List.PositionOf:
    = Table.AddColumn(
    Пользовательский1,
    "ticket_price",
    each rec_tables[ticket_types][ticket_price]
    { List.PositionOf( rec_tables[ticket_types][ticket_type], [ticket_type] ) }
    )

    • @Антоха-ц4ю
      @Антоха-ц4ю 2 года назад +3

      Сократить то конечно можно, но оно должно быть еще и понятно для простых смертных)

  • @ilzebra2679
    @ilzebra2679 2 года назад +2

    Не рекомендую этот метод
    Во первых он работает дольше, чем Join таблиц. Если мы попытаемся таким методом соединить две большие таблицы, то это займёт очень много времени. Даже с буферизацией таблиц.
    Во вторых, в этом видео пропущена важная деталь, которая может привести к ошибке. Когда мы составляем подобный запрос TableName{[ColumName = Value1]} то если в таблице будет несколько одинаковых значений Value1 то произойдет ошибка. Т.е. таблица из которой мы берём значения должна содержать только уникальные значения