如何提取SSAS多维数据集的所有维度与度量值(Extended Events场景)
提取SSAS多维数据集所有维度和度量值的方法
嘿,刚好我对SSAS的这类需求很熟悉!要提取目标多维数据集的所有维度和度量值,用SSAS自带的**动态管理视图(DMVs)**是最便捷的方式,完全不需要复杂的XMLA脚本,直接用类似SQL的查询就能搞定。下面是几个实用的查询语句,你可以根据自己的需求调整:
获取所有度量值信息
这个查询会返回指定立方体下所有度量值的详细信息,包括所属度量值组、显示名称等:
SELECT CUBE_NAME AS CubeName, MEASURE_GROUP_NAME AS MeasureGroupName, MEASURE_NAME AS MeasureName, MEASURE_CAPTION AS MeasureCaption, MEASURE_UNIT_NAME AS MeasureUnit FROM $SYSTEM.MDSCHEMA_MEASURES WHERE CUBE_NAME = 'YourTargetCube' -- 替换为你的多维数据集名称 ORDER BY MeasureGroupName, MeasureName;
获取所有维度及属性信息
如果你需要维度本身的基本信息,用这个查询:
SELECT CUBE_NAME AS CubeName, DIMENSION_NAME AS DimensionName, DIMENSION_CAPTION AS DimensionCaption, DIMENSION_TYPE AS DimensionType FROM $SYSTEM.MDSCHEMA_DIMENSIONS WHERE CUBE_NAME = 'YourTargetCube' -- 替换为你的多维数据集名称 ORDER BY DimensionName;
如果要获取维度下的具体属性(也就是用户查询时会用到的维度字段),可以用这个查询:
SELECT CUBE_NAME AS CubeName, DIMENSION_NAME AS DimensionName, LEVEL_NAME AS AttributeName, LEVEL_CAPTION AS AttributeCaption FROM $SYSTEM.MDSCHEMA_LEVELS WHERE CUBE_NAME = 'YourTargetCube' -- 替换为你的多维数据集名称 AND LEVEL_NUMBER > 0 -- 排除维度本身的顶级层级,只返回具体属性 ORDER BY DimensionName, LEVEL_NAME;
结合你的Extended Events数据做匹配
拿到维度和度量值列表后,你就可以和临时表#List里的TextData做关联分析了。比如下面的示例可以找出所有调用了目标度量值的事件:
SELECT l.TraceFileName, l.TraceEvent, l.TextData, m.MeasureName FROM #List l JOIN ( SELECT MEASURE_NAME FROM $SYSTEM.MDSCHEMA_MEASURES WHERE CUBE_NAME = 'YourTargetCube' ) m ON CHARINDEX(m.MeasureName, l.TextData) > 0;
如果要匹配维度属性,只需要把JOIN子查询换成维度属性的查询结果即可。
内容的提问来源于stack exchange,提问作者Shoaib Maroof
相关产品推荐
相关产品推荐

