Перейти к содержимому

7a. Power Query и язык М

Power Query вызывает источник больше раз, чем вы ожидаете

В прошлый раз мы рассмотрели, как можно реализовать свёртывание запроса с помощью Table.View. Мы разобрались, почему нельзя однозначно ответить на вопрос «какие функции языка М сворачиваются?». Ответ зависит от версии Power Query, коннектора данных, аргументов функции и даже набора внешних данных, к которым осуществляется доступ.

Как вы думаете, Power Query взаимодействует с каждым внешним источником при обработке выражения только один раз? Гарантируется ли получение одинаковых результатов: а) при обработке выражения локально PQ, б) частичной свёртке в источник, в) полной свёртке?[1]

Подробнее »Power Query вызывает источник больше раз, чем вы ожидаете

Язык М Power Query. Свёртывание запросов

При свёртывании запроса Power Query принимает выражение M и преобразует его частично или полностью в собственный язык запросов или язык запросов источника данных (например, перевод M в T-SQL или в запрос OData), а затем просит источник выполнить этот запрос. Вы написали код M, но свёртывание запроса выгрузило некоторую часть выражения во внешний источник данных, переписав логику M на родной язык источника.[1]

Свёртывание запросов — это ключевая концепция в экосистеме Power Query. Она создает потенциал для значительного повышения производительности. Благодаря таким механизмам, как индексы и разбиение данных в памяти по страницам, источник данных часто находит нужные данные гораздо эффективнее, чем при потоковой передаче необработанных строк из источника в Power Query для локальной обработки.

Подробнее »Язык М Power Query. Свёртывание запросов

Язык М Power Query. Управление глобальной средой, замыкание

В прошлый раз мы узнали, что код М обычно вычисляется в глобальной среде, состоящей из всех общих членов разделов и стандартной библиотеки. Кроме того, обычно мы не можем вводить дополнительные идентификаторы непосредственно в эту глобальную среду. Обычно… но не всегда! Сегодня мы узнаем об исключениях.

Но и это еще не всё. Знаете ли вы, что у M есть механизм для запоминания того, как получить доступ к переменным, которые позже выйдут за рамки видимости? Этот механизм называется замыканием. Он особенно полезен при генерации функций. Замыкание позволяет создавать объектоподобную конструкцию, которая поддерживает внутреннее частное состояние (private state) и взаимодействует с ней через общедоступный интерфейс (public interface; что-то вроде объекта из объектно-ориентированного программирования!).[1]

Подробнее »Язык М Power Query. Управление глобальной средой, замыкание

Язык М Power Query. Области определения идентификаторов и секции

Одно и то же имя идентификатора (например, имя переменной, поля и т.п.) в запросе Power Query может быть определено несколько раз. Если вы используете имя идентификатора, на какое из этих определений будет указывать ссылка? В этом посте мы узнаем, как M разбирается с этим. Мы также рассмотрим разделы – обычно скрытые «фреймы», лежащие в основе организации выражений, составляющих код Power Query.[1]

Рис. 1. Описание члена раздела, хранящимся в литеральном атрибуте Description

Подробнее »Язык М Power Query. Области определения идентификаторов и секции

Крис Уэбб. Функция Csv.Document M Power Query

CSV-файлы часто используются в качестве источника данных для Power Query в Excel или Power BI Desktop. Однако документация Microsoft по функции Csv.Document() ограничена и в некоторых случаях неверна. В этой довольно длинной заметке я покажу вам столько возможностей этой функции, сколько мне удалось обнаружить.

Это перевод заметки Криса Уэбба. Повествование ведется от лица Криса. Мои примечания набраны с отступом.

Рис. 1. Простой CSV-файл

Подробнее »Крис Уэбб. Функция Csv.Document M Power Query

Функция Table.FromList M Power Query

Недавно столкнулся с неожиданной ошибкой в работе функции Table.FromList() языка M Power Query. Простой код…

Запрос1[1]

… не работает, и возвращает ошибку:

Рис. 1. Неожиданное поведение функции Table.FromList()

Подробнее »Функция Table.FromList M Power Query

Язык М Power Query. Метаданные

Power Query позволяет прикрепить к значению сведения о нём. Обычно эти описательные фрагменты невидимы. Их присутствие не меняет поведение движка М. Однако код (ваш или чужой, например, функция стандартной библиотеки) может считывать и задавать эти нотации. Они известны как метаданные. Их можно использовать для передачи дополнительной информации, относящейся к значению. Метаданные применяются в информационных или диагностических целях. Они также могут быть задействованы в выражениях, поскольку метаданные определяют поведение значений.[1]

Предыдущая заметка  Следующая заметка

Возьмем, например, параметры. Они обрабатываются особым образом в пользовательском интерфейсе Microsoft Excel (и Power BI), но в самом Power Query они хранятся как обычные значения.

Рис. 1. Параметры в Microsoft Excel

Подробнее »Язык М Power Query. Метаданные

Крис Уэбб. Устранение неполадок с обновлением веб-службы в Power BI с помощью функции диагностики Power Query

Это перевод статьи Криса Уэбба, дополненный моими комментариями с использованием Chat GPT (набраны с отступом). Повествование ведется от первого лица (Криса).

Ранее я писал в блоге о том, как устранять проблемы с обновлением веб-службы с помощью стороннего инструмента под названием Fiddler. Информация по-прежнему актуальна, но Fiddler — сложный инструмент. Установить его и дать правильные разрешения для просмотра всего, что ему нужно, непросто. К счастью, новая функция диагностики Power Query в Power BI (выпущенная в октябре 2019 г.) означает, что вам больше не нужно использовать Fiddler для такого рода работы. Полная информация о том, как использовать эту функцию, приведена здесь, но я подумал, что было бы полезно сосредоточиться на одном конкретном варианте ее использования.

Функция диагностики в Excel на момент публикации перевода не доступна.

Рис. 1. Запрет скачивания в фоновом режиме

Подробнее »Крис Уэбб. Устранение неполадок с обновлением веб-службы в Power BI с помощью функции диагностики Power Query

Крис Уэбб. Параметры RelativePath и Query функции M Power Query Web.Contents()

Это перевод нескольких связанных статей Криса Уэбба, дополненный моими комментариями с использованием Chat GPT (набраны с отступом).

Функция Web.Contents() в языке M Power Query позволяет получать данных с веб-страниц и веб-служб и имеет ряд полезных, но плохо документированных опций, которые упрощают создание URL-адресов для вызовов веб-служб.

Рассмотрим следующий URL-адрес:

Это вызов API метаданных с сайта https://www.data.gov.uk/, портала открытых данных правительства Великобритании. По этому адресу возвращается документ JSON (рис. 1), в котором перечислены наборы данных, найденные при поиске по ключевому слову cows (коровы).

Рис. 1. Документ JSON, возвращаемый по Запросу 1; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке

Подробнее »Крис Уэбб. Параметры RelativePath и Query функции M Power Query Web.Contents()

Крис Уэбб. Ошибка в Power Query Длина блока не соответствует его дополнению

Это перевод статьи Криса Уэбба, дополненный моими комментариями и использованием Chat GPT (набраны с отступом).

При использовании функции Web.Contents для вызова веб-службы в Power Query может возникнуть ошибка Длина блока не соответствует его дополнению. Например

Запрос 1[1]

…вызывает веб-службу и на момент написания статьи выдает ошибку:[2]

Рис. 1. Ошибка Длина блока не соответствует его дополнению

Подробнее »Крис Уэбб. Ошибка в Power Query Длина блока не соответствует его дополнению