Анализ запроса DAX с помощью регулярного выражения для получения мер и измерений

Я хочу создать приложение, которое использует расширенные события для анализа использования моделей Azure Analysis Services. В частности, я хочу знать, какие меры и измерения используют конечные пользователи.

Я смотрю на событие QueryEnd и пытаюсь разобрать поле TextData. В зависимости от инструмента, используемого для запроса модели, я получаю MDX или DAX в TextData.

Я думаю, что мне удалось разобрать MDX с помощью этого регулярного выражения: ([[\w ]+].[[\w ]+](?:.(?:Members|[Q\d]))?) (из этого сообщение: Регулярное выражение для извлечения элемента из запроса MDX)

Теперь проблема с разбором DAX. Если я запрашиваю модель из fx PowerBI, я получаю такой DAX:

EVALUATE 
TOPN(
502,
SUMMARIZECOLUMNS(
ROLLUPADDISSUBTOTAL('Product'[Color], \"IsGrandTotalRowTotal\"),
\"Order_Count\", 'SalesOrderDetail'[Order Count]
),
[IsGrandTotalRowTotal],
0,
[Order_Count],
0,
'Product'[Color],
1
)
ORDER BY
[IsGrandTotalRowTotal] DESC, [Order_Count] DESC, 'Product'[Color]

Что я хотел бы сопоставить с RegEx:

«Продукт» [Цвет] и «SalesOrderDetail» [Количество заказов]

И... как я узнаю, что количество заказов используется как мера, а цвет является атрибутом измерения продукта?..... думаю, я не буду?

Спасибо большое Николай


person NicolajB    schedule 08.04.2019    source источник


Ответы (2)


думаю, я только что нашел возможное решение для анализа запросов DAX и MDX:

([\[\'][\w ]+[\]\']\.?[\[\'][\w ]+[\]\'])(?!.*\1)

Это даст мне то, что мне нужно.... без дубликатов. Улучшения приветствуются :-)

person NicolajB    schedule 08.04.2019

Чтобы устранить неоднозначность столбцов из показателей, я бы запросил DMV для развернутой модели, чтобы получить список столбцов и список показателей. Затем вы можете просто просмотреть проанализированные токены в двух списках:

Документы DMV

Динамическое административное представление столбца

Измерение DMV.

Обратите внимание, что имена мер глобально уникальны среди всего множества имен столбцов и мер, поэтому их легко найти (просто отбросьте ссылку на таблицу). Имена столбцов уникальны только в пределах таблицы, к которой они принадлежат.

Похоже, у вас уже есть регулярное выражение, которое работает на вас, так что используйте его.

Я также отмечу, что почти все визуальные элементы PBI, которые возвращают что-либо, кроме простого списка (например, слайсеры или таблицы с одним столбцом возвращают только список), будут следовать шаблону запроса, которым вы поделились.

Все меры должны быть в более поздних аргументах до SUMMARIZECOLUMNS. Шаблон:

SUMMARIZECOLUMNS (
    <grouping columns, optionally in a ROLLUPADDISSUBTOTAL>,
    <filters, defined above in VARs>,
    <measures as ("Alias", [Measure]) pairs>
)
person greggyb    schedule 22.08.2019