Если вам приходилось работать со списками SharePoint List, далее загружать данные списка для анализа в Power BI, то можно было столкнуться с трудностью вывода данных из объектных представлений типа List и/или Record. Решение этой задачи может быть разное, но я покажу способ, который я заимствовал и в дальнейшем использовал практически всегда.

 

 

Выделяем данные из List->Record одной формулой

Допустим у вас есть список, в котором хранятся данные о менеджерах в виде списка (List). При организации модели данных требуется перейти в режим работы с запросами на уровне Power Query.

 

Задача сводится к тому, чтобы создать Пользовательский столбец/ Сustom Column и в качестве формулы указать такую формулу (DAX/M Code):

let typeList = [types], 
typeCount = List.Count([types]) in Text.Combine(List.Transform(List.Numbers(0, typeCount, 1), 
each Record.Field(typeList{_},"Name")), ", ")

Поясню немного про список: [types] - это наименование поля с объектом List. Вы указываете имя своего поля с таким типом. Как видите, в формуле вам нужно обратиться дважды к полю и "Name" - это наименование целевого поля вывода из List->Record. предварительно вам нужно посмотреть, кликая мышкой на значения этих данных целевое поле для вывода из массива, хранимого в Record. Не могу сказать за другие объектные модели данных, но в SharePoint структуру можно представить в виде простой иерархии:

|-- List/
|   |-- Record
|          |-- Name
|          |-- Data
|          |-- email

В этой формуле нет обработки на ошибки, например если есть пустые значения в результирующем поле Name. Для нивелирования этой проблемы можете использовать конcтрукцию try ... otherwise.

Выделяем данные из Record 

Эта задача гораздо проще предыдущей и тоже нередко используется при работе с данными из списков SharePoint. Приведу пример формулы получения данных записи из поля с типом Record

try Record.Field([MyField]{0},"title") otherwise ""

В этой формуле [MyField] - поле с данными типа Record, а в записи мне нужно значение поля "title". Использование конструкции try ... otherwise позволяет обработать корректно массив запрашиваемых данных, даже если там есть ошибки в значениях, выводя для таких записей пустое текстовое значение "".