Pull to refresh

Использование dax.do для произвольной схемы данных на основе перевода DAX в Contoso через Telegram бот

Reading time3 min
Views1.1K

Привет, Хабр! В работе Business Intelligence аналитика могут встречаться задачи проверки DAX запроса на произвольной схеме, к которой может не быть доступа. Перевод DAX запроса из исходной схемы в схему, к которой есть доступ и есть возможность выполнения DAX запроса, может занимать некоторое время и требовать определенных усилий. В век AI, безусловно, хочется делать перевод в схему автоматически, при помощи AI. Кроме того, ресурс dax.do является достаточно удобной песочницей для Contoso схемы данных, поэтому такое впечатление, что одним из быстрых решений для анализа и запуска DAX без схемы данных является перевод произвольного DAX в dax.do (например, автоматически при помощи Telegram бота), что позволяет уже дальше смотреть полученный DAX в песочнице dax.do на схеме Contoso без каких-то ограничений. Это позволяет проверить работоспособность DAX на незнакомой схеме за секунды. Интересующимся новыми возможностями DAX песочниц — добро пожаловать под кат :)

Известной песочницей DAX является dax.do, в котором зашита схема Contoso.

Видно, что такая схема способна поддерживать DAX запросы достаточно сложной структуры. В связи с этим, если у нас есть DAX запрос, но нет самой схемы данных, актуальным является перевод DAX запроса в схему данных Contoso для dax.do, тогда можно легко использовать все возможности песочницы dax.do и исследовать DAX, аналогичный исходному, даже без самой исходной схемы.

Ручной перевод DAX в схему Contoso может быть утомительным и рутинным, и выглядит отличной задачей для AI. Соответственно, AI модели решают задачи перевода из одной схемы данных в другую без особенных проблем. Например, Telegram бот «dax.do Fiddle» способен легко решить подобные задачи. Рассмотрим следующий DAX и для перевода в Contoso из dax.do:

EVALUATE
SUMMARIZECOLUMNS (
    Клиент[Количество детей],
    FILTER ( Продажи, Продажи[Количество] > AVERAGE ( Продажи[Количество] ) ),
    FILTER ( Клиент, Клиент[Количество детей] > 1 ),
    "Calculated Количество",
        1 + 2 * CALCULATE (
            SUMX ( Продажи, Продажи[Количество] * RELATED ( Клиент[Количество детей] ) ),
            REMOVEFILTERS ( Продажи[Количество] ),
            FILTER ( Клиент, Клиент[Количество детей] < 4 )
        )
)

Отправим этот DAX в «dax.do Fiddle»

Готово, получили результат за секунды, теперь можно идти в dax.do и работать с полученным DAX, являющимся аналогом исходного DAX.

Видно, что переведенный в Contoso схему DAX запрос валидный и успешно выполняется.

Также можно рассмотреть и несколько более сложный DAX запрос.

DEFINE
    VAR filtered =
        FILTER (
            'факты',
            'факты'[количество] > 0
                && 'факты'[сумма] > 300
                && 'факты'[сумма] < 500
        )
    VAR yearly =
        SUMMARIZECOLUMNS (
            'даты'[год],
            'продукты'[производитель],
            'клиенты'[пол],
            "Продажи",
                SUMX ( filtered, 'факты'[сумма] * IF ( 'факты'[цена] > 0, 0.2, 0.7 ) )
        )
    VAR byYear =
        FILTER ( yearly, YEAR ( TODAY () ) > MAX ( 'даты'[год] ) )
    VAR top2 =
        TOPN ( 2, byYear, [Продажи], DESC )

EVALUATE
top2
ORDER BY 'продукты'[производитель] ASC

«dax.do Fiddle» также переводит в Contoso для dax.do и этот запрос:

В итоге получаем запрос, который успешно выполняется в dax.do:

Стоит отметить, что в боте использовалась всего лишь модель gpt-4o, результаты можно считать неплохими, возможно, подойдет и более простая модель. Изредка бот может давать невалидный DAX из-за несовпадения типов колонок (строка и число), но зачастую бот решает такие вопросы самостоятельно (как для YEAR(MAX('Date'[Date]))), иначе приходится исправлять вручную, но это в любом случае быстрее, чем обрабатывать запрос полностью вручную.

Надеюсь, работа над такими инструментами и сами инструменты вида «dax.do Fiddle» в форме Telegram бота могут быть полезными для аналитиков и разработчиков, имеющих дело с DAX. Успехов в дашбордах и DAX запросах :)

Tags:
Hubs:
Total votes 2: ↑1 and ↓10
Comments0

Articles