FormulaCamp
Пройдено
9. Power Query · Источники, ошибки и M · 15 мин

8. Язык M: как читать запрос

Урок 8 из 8
    Теория урока

    Каждый шаг Power Query — строка на языке M. Весь запрос виден в «Расширенном редакторе» (Главная → Расширенный редактор):

    let
        Источник = Csv.Document(File.Contents("C:\Данные\продажи.csv"), [Delimiter=";", Encoding=65001]),
        Заголовки = Table.PromoteHeaders(Источник),
        Тип = Table.TransformColumnTypes(Заголовки, {{"Сумма", type number}}),
        Оплачено = Table.SelectRows(Тип, each [Статус] = "Оплачен"),
        Итоги = Table.Group(Оплачено, {"Город"}, {{"Сумма", each List.Sum([Сумма]), type number}})
    in
        Итоги
    • let … in: шаги — это переменные, каждый ссылается на предыдущий; после in — какой шаг вернуть;
    • each [Статус] = "Оплачен" — короткая функция для каждой строки, [Статус] — поле текущей строки;
    • M чувствителен к регистру: table.selectrows не сработает, а «Оплачен» ≠ «оплачен»;
    • параметры (Главная → Управление параметрами) заменяют жёсткие значения, например путь к папке или порог фильтра;
    • try [Цена] * 1 otherwise 0 — перехват ошибки в выражении.

    В тренажёре формулу каждого шага видно над предпросмотром; редактировать M напрямую тренажёр не умеет.

    Проверьте себя

    1. Что вернёт запрос, если после in написано Тип, а последний шаг — Итоги?
    2. Что означает each [Сумма] > 1000 в Table.SelectRows?
    3. Почему Table.SelectRows(Тип, each [Город] = "алматы") ничего не нашёл, хотя в данных «Алматы»?
    4. Как сделать, чтобы путь к папке с отчётами меняли без правки кода?
    5. Какое выражение заменит ошибку преобразования нулём?