Power Query Продвинутый №25. Функция List.Accumulate

Поделиться
HTML-код
  • Опубликовано: 25 май 2020
  • В этом уроке мы с нуля разберем функцию List.Accumulate. Сначала я объясню цикл For, а потом мы закрепим знания на несложных, но очень интересных примерах.
    1:33 Принцип работы List.Accumulate в визуализаторе Python.
    4:16 Счетчик количества state.
    5:48 Список порядковых номеров исходного списка List, использование if-then-else.
    11:11 Сумма всех значений в исходном списке List (визуализатор Python).
    12:21 Нарастающий итог (визуализатор Python).
    14:27 Сумма всех значений в исходном списке List (Power Query).
    15:14 Нарастающий итог (Power Query).
    16:34 Максимальное значение в списке List (визуализатор Python).
    18:28 Максимальное значение в списке List (Power Query).
    19:44 seed в виде значения, record, list, table.
    21:41 Количество чисел, которое делятся без остатка.
    22:58 Список всех чисел, которые делятся без остатка.
    25:13 Список всех месяцев.
    26:40 Создание Таблицы "календарь", seed в виде пустой таблицы, объединение таблиц через Table.Combine
    30:01 Список из чисел в строку из чисел.
    30:55 Счетчик количества високосных годов.
    32:00 Список високосных годов из исходного списка List.
    Файлы для спонсоров Boosty: boosty.to/comrade-xl/posts/f1...
    Файлы для спонсоров ВК: comrade.excel?w=wall-1...
    Файлы для спонсоров RUclips: • Post
    Индивидуальное обучение: comrade-xl.ru/pq-training/
    Страница урока на сайте: comrade-xl.ru/2020/05/26/powe...

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

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

    1:33 Принцип работы List.Accumulate в визуализаторе Python.
    4:16 Счетчик количества state.
    5:48 Список порядковых номеров исходного списка List, использование if-then-else.
    11:11 Сумма всех значений в исходном списке List (визуализатор Python).
    12:21 Нарастающий итог (визуализатор Python).
    14:27 Сумма всех значений в исходном списке List (Power Query).
    15:14 Нарастающий итог (Power Query).
    16:34 Максимальное значение в списке List (визуализатор Python).
    18:28 Максимальное значение в списке List (Power Query).
    19:44 seed в виде значения, record, list, table.
    21:41 Количество чисел, которое делятся без остатка.
    22:58 Список всех чисел, которые делятся без остатка.
    25:13 Список всех месяцев.
    26:40 Создание Таблицы "календарь", seed в виде пустой таблицы, объединение таблиц через Table.Combine
    30:01 Список из чисел в строку из чисел.
    30:55 Счетчик количества високосных годов.
    32:00 Список високосных годов из исходного списка List.
    Файлы для спонсоров Boosty: boosty.to/comrade-xl/posts/f1b5a4b1-d79c-49f0-96d8-1bc7b227961a?share=post_link
    Файлы для спонсоров ВК: vk.com/comrade.excel?w=wall-185123800_182
    Файлы для спонсоров RUclips: ruclips.net/user/postUgzHxLMm7l8tmVCTNuF4AaABCQ
    Индивидуальное обучение: comrade-xl.ru/pq-training/
    Страница урока на сайте: comrade-xl.ru/2020/05/26/power-query-list-accumulate/

  • @alievairina
    @alievairina 9 месяцев назад +1

    Спасибо за урок. Как всегда интересно, местами сложновато)

  • @user-ui2wu6mm9l
    @user-ui2wu6mm9l 7 месяцев назад

    Спасибо автору за урок! Есть замечания к подаче материала, но в целом можно разобраться. Раза 3 его пересматривал, чтобы всё понять и усвоить. Пока для меня самый сложный урок в этом цикле

  • @anmiss08
    @anmiss08 3 года назад

    Как всегда в комментариях все самое вкусное)) Тимур, благодарю!!

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

    1:33 Принцип работы List.Accumulate в визуализаторе Python.
    4:16 Счетчик количества state.
    5:48 Список порядковых номеров исходного списка List, использование if-then-else.
    11:11 Сумма всех значений в исходном списке List (визуализатор Python).
    12:21 Нарастающий итог (визуализатор Python).
    14:27 Сумма всех значений в исходном списке List (Power Query).
    15:14 *Нарастающий итог (Power Query).*
    16:34 Максимальное значение в списке List (визуализатор Python).
    18:28 *Максимальное значение в списке List (Power Query).*
    19:44 seed в виде значения, record, list, table.
    21:41 Количество чисел, которое делятся без остатка.
    22:58 Список всех чисел, которые делятся без остатка.
    25:13 Список всех месяцев.
    26:40 *Создание Таблицы* "календарь", *seed в виде пустой таблицы, объединение таблиц через Table.Combine*
    30:01 Список из чисел в строку из чисел.
    30:55 Счетчик количества високосных годов.
    32:00 Список високосных годов из исходного списка List.

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

    4:59 seed - первое значение state, а не первое положение state.
    Тут все просто и понятно, если сделать такую ассоциацию:
    state - номер ящика,
    seed - номер первого ящика,
    current - текущее содержание ящика.

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

      Причём тут "номер ящика", если у нас например список один, какие ещё номера. А "номер первого ящика" вообще не в тему, если у нас в seed пустой список или таблица, причём тут вообще тогда "номер первого ящика"?

  • @user-ui2wu6mm9l
    @user-ui2wu6mm9l 7 месяцев назад

    25:09 Сколько ни пытался, не смог распутать этот клубок условий и понять как это работает. К тому же способ применим только в случае, если присутствует цифра 3 в начале списка.

  • @filipp-pro
    @filipp-pro 3 года назад +1

    Наверное это не относится к теме урока, но я на всякий случай замечу, что создать пустой список а потом его расширять при каждом следующем шаге цикла - это очень долго. Таким образом создаётся N+1 списков размерами от 0 до N, т. е. для цикла от 1 до 4 система создаст 5 списков: {}, {1}, {1, 2}, {1, 2, 3}, {1, 2, 3, 4}. А представьте если этих чисел будет 10000? Лучше сначала создать пустой список из N элементов: {null, null, null, null} а потом с каждым следующим шагом устанавливать в её ячейках значения. Вот как этот список будет выглядеть после 2-го шага: {1, 2, null, null}.
    А вообще - большое спасибо за уроки, я бы без них продолжал гвозди микроскопом забивать (через VBA)

  • @vinosserg
    @vinosserg 4 года назад +4

    Добрый день! Не совсем понял 'ДелениеБезОстатка_2', зачем такая большая формула?? "(state, current)=> if Number.Mod(current, 3) = 0 then state & {current} else state", такой разве не достаточно?
    И по шагу 'Текст', более эстетично на мой взгляд, избавиться от `запятая пробел` в конце с помощью Text.Combine, "Seed = null", `(state, current)=> if current = null then Text.From(current) else Text.Combine({state, Text.From(current)}, ", ")`
    Спасибо за урок и примеры использования List.Accumulate!!!

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

      От запятой с пробелом можно избавиться при помощи Trim. Просто обернуть последний шаг в Trim и указать какие символы резать.
      По формуле остатка, если у вас работает значит достаточно и так, если не работает, то значит недостаточно. У вас работает?

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

      @@comrade_excel работает) про трим думал, что он как и везде урезает пробелы только! не дает резать два символа, нужен только один символ для trim, ну или два раза оборачивать!

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

      Почему "как и везде"? Лично я точно могу сказать, что в SQL, Pandas и Power Query в параметрах для Trim можно указать, что ему резать. Пробелы - это по умолчанию, если ничего не указывать.

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

      Значит можно, если работает. Хорошо, что заметили.

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

      Точно, {current}, все думал как же кастовать Number в List, в #shared ничего не нашел.

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

    Тимур, подскажите пожалуйста... вы показываете логику расчетов используя Python.
    Что можете посоветовать прочитать/посмотреть для большего понимания языка? Как вы изучали его (видео контент, книги и т.п.?)

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

      Я его основательно не изучал. У меня подписка DataCamp. Там курсы Python, R, SQL, но только применительно к Data Science. Сервис неплохой, но не могу сказать, что я им доволен на 100%. Поверхностно довольно.

    • @romanvasiura6705
      @romanvasiura6705 3 года назад

      @@comrade_excel Спасибо за ответ!

  • @user-ui2wu6mm9l
    @user-ui2wu6mm9l 7 месяцев назад

    В общем, что я понял по функции List.Accumulate:
    1. Самое главное - это не List, a Seed.
    Каким будет задан Seed (список, запись, число), то и получим на выходе.
    Из List просто берутся значения (current) для перебора в Function
    2. State - это тот же Seed, только с накоплением. С накоплением по той логике, что задана в Function. На выходе получим именно state

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

    Спасибо - как всегда - автору.
    Вопрос: что быстрее работает - набор из List.LastN, List.FirstN, List.Range или List.Accumulate?

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

      Для простых вычислений лучше использовать простые функции. Здесь счет и сумма проста для объяснения разбираются.

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

      @@comrade_excel Спасибо. Просто после выхода видео по List.Generate на радостях попробовал его использовать вместо указанного набора, Но в новом столбце - список нужен был в каждой ячейке. Тормоза жуткие. Вернул как было. Кстати заметил, что List.LastN вместе с List.FirstN в таком случае работают быстрее, чем List.Range.

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

      Вы не забыли про List.Buffer, когда использовали List.Generate?

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

      @@comrade_excel Таки да :) Вернее не забыл, а из-за того, что список внутри формулы получался из столбца - проигнорировал, как "лишнюю запчасть". А зря... Думал, что раз все внутри одного запроса, то влияния не будет. Надо было список отдельным шагом создать, забуферить, а потом к нему по имени обращаться. Причем в буфер именно список, а не таблицу, колонкой которой он является.
      Как говорится: "айн-унд-цванцих фир-унд-зибцих, что в переводе означает - обосрамился". :)
      Спасибо ещё раз.