Привет, Хабр! AI инструменты широко используются в разработке и других сферах, казалось бы, что ещё можно в них улучшить или добавить? Всё зависит от предметной области, в области Business Intelligence при работе с языком запросов DAX актуальными могут быть работа с мерами и создание новых мер. Рутинной задачей при этом является создание схемы данных и заполнение её данными для каждой меры, или можно использовать уже имеющуюся схему, однако при этом при переходе с одной схемы (где выполняются запросы) на другую приходится переименовывать таблицы и столбцы, сопоставлять типы данных и т.д. В связи с этим актуальным может быть инструмент для создания схемы данных для меры «на лету» и выполнения запроса с мерой, т.е. построение запроса и дашборда (концептуально, без форматирования) по мере «на лету».
В dax.do можно строить DAX запрос только для существующих схем, т.е. приходится тратить время на переименование полей и таблиц в DAX запросе при переносе написанного DAX-запроса из dax.do.
В этой статье рассматривается решение такой проблемы — генерация схемы, связей, запроса и дашборда «на лету» (концептуально, по аналогии с отображением дашборда на основе DAX в dax.do), но только сугубо средствами AI, без реальных DAX движков. Надеюсь, такие инструменты или идеи могут быть полезны аналитикам и разработчикам для повседневной работы, если Вам интересен AI в DAX — добро пожаловать под кат :)
Несмотря на то, что генерация дашбордов через AI DAX движок существует лишь на сайте портфолио и пока нет более серьезной или удобной имплементации, им уже можно пользоваться.
Рассмотрим на примере простой меры:
Sum = SUMX(sales, sales[price] * sales[quantity])Поскольку нет реального DAX движка, то можно добавить к мере текстовое описание, например, поле для группировки sales[productid]. Это уже вне синтаксиса DAX, просто как рекомендация для AI:
Sum = SUMX(sales, sales[price]* sales[quantity])
by sales[productid]В интерфейсе AI DAX движка это выглядит следующим образом:

Выглядит несколько абстрактно, но это всё, что требуется от пользователя для построения концептуальног�� дашборда по этой DAX мере, остальное берет на себя AI DAX движок. Не нужна ни схема, ни имена полей и таблиц, ни тестовые данные, ни сопоставление типов полей в мере и в тестовых данных и т.д.
Имеет смысл сразу вывести все результаты и далее описать всё детальнее. Использовалась модель gpt-4o, она дает значительно лучшие результаты, по сравнению, например, с gpt-3.5-turbo, но, соответственно, стоит дороже.

Хочется начать с полученного дашборда

Звучит несколько абстрактно, но это действительно простейший дашборд на основе описанной пользователем меры, аналогичный Table View из dax.do.

Однако по сравнению с Table View из dax.do, представленная таблица-дашборд строится на основе актуальной схемы данных, не нужно сопоставлять типы и имена полей, переносить из dax.do на актуальную схему данных и т.д.
Также AI DAX движок генерирует исходные тестовые данные — имеется ограничение на 10 строк в таблицах. Таким образом, сгенерирована таблица sales с 10 тестовыми строками для дашборда.

Если простить некоторые неудобства UI, то при необходимости можно сохранить такого вида таблицу, импортировать в Power BI, и дальше работать с ней в Power BI, соответственно, не потребуется заполнять тестовые данные вручную.
Наконец, AI DAX движок генерирует DAX с SUMMARIZECOLUMNS, поскольку это стандартная основа для обычных таблиц дашбордов Power BI.

Как можно видеть из ответа модели gpt-4o, она способна даже верно выполнить расчеты и получить корректные данные дашборда, и даже с детальными пояснениями.

В отформатированном виде DAX выглядит следующим образом.
EVALUATE
SUMMARIZECOLUMNS (
sales[productd],
"Total Sales", SUMX ( sales, sales[price] * sales[quantity] )
)Также можно сказать пару слов об имплементации «AI DAX движка», несмотря на то, что она достаточно проста. Использовался C#, и достаточно было создать API с OpenAI ключом через OpenAIAPI(...), создать чат через api.Chat.CreateConversation(), добавить условия DAX вывода через chat.AppendSystemMessage(...) и пример вывода chat.AppendExampleChatbotOutput(...). После этого для получения результата достаточно добавить запрос пользователя chat.AppendMessage(...) и прочитать результат через chat.GetResponseFromChatbotAsync().
Важно не забыть и использовать соответствующую модель, в данном случае gpt-4o, поскольку результаты, например, для gpt-3.5-turbo значительно хуже и не позволяют посчитать детально каждую строку дашборда, поэтому с gpt-3.5-turbo в нем выводится лишь dummy данные:

Казалось бы, рассмотренная мера примитивна, и нужно что-то более сложное. Без проблем, например, мера
Month Sales % =
SUM ( sales[amount] )
/ CALCULATE ( SUM ( sales[amount] ), REMOVEFILTERS ( calendar ) )причем нам нужна группировка по месяцам calendar[month]. Вот уже не совсем очевидный пример, и всё, что нужно сделать пользователю — это ввести
Month Sales % = SUM(sales[amount])/CALCULATE(SUM(sales[amount]), REMOVEFILTERS(calendar))
by calendar[month]Готово, AI DAX создал таблицы sales и calendar с тестовыми данными, и сгенерировал пример дашборда на основе модели gpt-4o.


Как видно, данные в дашборде верные с моделью gpt-4o, а для модели gpt-3.5-turbo результаты поскромнее, и для неё всего лишь dummy данные в дашборде.

Можно заметить, что возможностей AI с моделью gpt-4o хватает для корректных расчетов долей по месяцам, и получаем «дашборд» с верными данными. Для «схематичных» данных в дашборде можно использовать gpt-3.5-turbo.
Также можно добавить, что, как и любой AI инструмент, AI DAX может быть устойчив к ошибкам DAX синтаксиса, позволяет работать с нестрогой формулировкой меры, и предоставляет другие аналогичные возможности гибкой работы.
Конечно, описанный «AI DAX движок» в текущем виде сырой, но надеюсь, он может быть полезен даже в таком виде для анализа мер аналитикам или как пища для размышлений разработчикам.
Желаю успехов в BI, дашбордах и AI!