我想创建一个使用扩展事件来分析Azure Analysis Services模型使用情况的应用程序。 具体来说,我想知道最终用户正在使用哪些度量和维度。
我查看QueryEnd事件,并尝试解析TextData字段。根据查询模型所用的工具,我可以在TextData中获得MDX或DAX。
我想我已经使用此RegEx解析了MDX:([[\ w] +]。[[\ w] +](?:。(?: Members | [Q \ d]))?) (摘自这篇文章:Regular expression for extracting element from MDX Query)
现在解析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” [订单数]
然后...。我怎么知道订单数被用作商品,而颜色是产品维度的属性呢?.....我猜不会吗?
非常感谢 尼古拉(Nicolaj)
答案 0 :(得分:0)
认为我刚刚找到了一种解析DAX和MDX查询的可能解决方案:
([\[\'][\w ]+[\]\']\.?[\[\'][\w ]+[\]\'])(?!.*\1)
这会给我我所需要的...。欢迎改进:-)
答案 1 :(得分:0)
要从度量中消除列的歧义,我将查询DMV以获取已部署模型的信息,以获取列列表和度量列表。然后,您可以只在两个列表中查找解析的令牌:
请注意,度量名称在列和度量名称的总体中是全局唯一的,因此可以轻松查找(只需丢弃表引用即可)。列名仅在它们所属的表中唯一。
您似乎已经拥有了适合您的正则表达式,因此可以运行它。
我还将注意到,几乎所有返回简单列表以外的内容(例如,切片器或一列表将仅返回列表)的PBI视觉对象都将遵循您共享查询的模式。
度量应全部放在SUMMARIZECOLUMNS
的后面的args中。模式是:
SUMMARIZECOLUMNS (
<grouping columns, optionally in a ROLLUPADDISSUBTOTAL>,
<filters, defined above in VARs>,
<measures as ("Alias", [Measure]) pairs>
)