DISCOVER_CALC_DEPENDENCY 行集
报告计算之间的依赖关系以及这些计算中引用的对象。 您可以在客户端应用程序中使用这些信息来报告与复杂公式相关的问题,或者在删除或修改相关对象时发出警告。 您还可以使用行集提取在度量值或计算列中使用的 DAX 表达式。
**适用于:**表格模型
行集列
DISCOVER_CALC_DEPENDENCY 行集包含以下各列。 该表还指定数据类型,指示是否可通过限制列来限制返回的行,并提供每列的说明。
列名 |
类型指示符 |
限制 |
说明 |
---|---|---|---|
DATABASE_NAME |
DBTYPE_WSTR |
是 |
指定包含要请求对其进行依赖关系分析的对象的数据库名称。 如果省略,则使用当前数据库。 可通过使用此列对 DISCOVER_DEPENDENCY_CALC 行集进行限制。 |
OBJECT_TYPE |
DBTYPE_WSTR |
是 |
指示要请求对其进行依赖关系分析的对象的类型。 该对象必须是以下类型之一:
可通过使用此列对 DISCOVER_DEPENDENCY_CALC 行集进行限制。 |
QUERY |
DBTYPE_WSTR |
是 |
对于在 SQL Server 2012 SP1 中创建的表格模型,您可以包含 DAX 查询或表达式,以显示该查询或表达式的依赖关系图。 QUERY 限制为客户端应用程序提供了一种方法,以确定 DAX 查询所使用的对象。 可在 XMLA 中或 DMV 查询的 WHERE 子句中指定 QUERY 限制。 有关详细信息,请参阅示例部分。 |
TABLE |
DBTYPE_WSTR |
要为其生成依赖关系信息的对象所在的表的名称。 |
|
OBJECT |
DBTYPE_WSTR |
要为其生成依赖关系信息的对象的名称。 如果该对象是某一度量值或计算列,则使用该度量值的名称。 如果该对象是某一关系,则为包含参与该关系的列的表(或者多维数据集维度)的名称。 |
|
EXPRESSION |
DBTYPE_WSTR |
包含要寻找其依赖关系的对象的公式。 |
|
REFERENCED_OBJECT_TYPE |
DBTYPE_WSTR |
返回具有对引用对象的依赖关系的对象的类型。 返回的对象可以是以下类型之一:
|
|
REFERENCED_TABLE |
DBTYPE_ WSTR |
包含依赖对象的表的名称。 |
|
REFERENCED_OBJECT |
DBTYPE_ WSTR |
具有对引用对象的依赖关系的对象的名称。 对于度量值和计算列,则为该度量值或列的名称。 对于关系,则为包含依赖对象的表(或多维数据集维度)的完全限定名称。 |
|
REFERENCED_EXPRESSION |
DBTYPE_WSTR |
依赖于所引用对象的计算列或度量值中的公式。 |
示例
基本语法
下面的查询是一个简单的 DMV 查询,该查询使用当前连接上的默认数据库返回此行集中所有列的值。 您可以在 MDX 查询窗口中运行此查询,并在 Management Studio 中查看其结果。 还可以按照从 Excel 查询 PowerPivot DMV 中描述的方法在 Excel 中查看 DMV 查询结果。
SELECT * FROM $System.DISCOVER_CALC_DEPENDENCY
对结果进行排序
添加 ORDER BY 以按表或其他列对行集进行排序。
SELECT * FROM $System.DISCOVER_CALC_DEPENDENCY ORDER BY [TABLE] ASC
使用 WHERE 子句进行筛选
下一个查询说明如何使用 WHERE 子句添加限制。 以下各列在 WHERE 子句中可以用作查询筛选器:Database_Name、Object_Type 和 Query。
SELECT * From $SYSTEM.DISCOVER_CALC_DEPENDENCY WHERE OBJECT_TYPE = 'RELATIONSHIP' OR OBJECT_TYPE = 'ACTIVE_RELATIONSHIP'
对度量值和计算列进行筛选,以查看基础 DAX 表达式
在此查询中,您可以只选择该度量值或计算列,然后查看计算中使用的 DAX 表达式。 EXPRESSION 列包含 DAX 表达式。 如果您使用 DISCOVER_CALC_DEPENDENCY 来提取模型中使用的 DAX 表达式,使用此查询即可实现此目的。 它将返回模型中使用的所有表达式,按升序排序。
SELECT * From $SYSTEM.DISCOVER_CALC_DEPENDENCY WHERE OBJECT_TYPE = 'MEASURE' OR OBJECT_TYPE = 'CALC_COLUMN' ORDER BY [EXPRESSION] ASC
使用 QUERY 进行筛选
使用 QUERY 限制,您可以提供 DAX 查询,以查看该查询中使用的所有对象。 请考虑一个简单查询,如“Evaluate Customer”。 顾名思义,此查询返回客户数据行,其中行的构成基于 Customer 表中的列。 如果您现在运行带有 QUERY 限制(“Evaluate Customer”)的 DISCOVER_CALC_DEPENDENCY,则会获得该查询中所使用的列(或对象)。 在此情况下,它是 Customer 表中列的列表。
下一组查询演示了 QUERY 限制的语法。 您可以对 AdventureWorks 表格模型 (SQL Server 2012) 运行这些查询以查看结果集。
第一个查询显示如何为包含空格的对象名称指定 QUERY 限制。 第二个查询(自通过 OLE DB 和 ADOMD.NET 执行 DAX 查询中借用)是一个更复杂的查询,其中包含来自多个表的对象。
注意 |
---|
尽管查询看起来使用了双引号,但实际上使用的是两个单引号。 一对单引号将“Evaluate <表名>”引起来,表名称周围所使用的单引号需要另加一对单引号以进行转义。 只有包含空格的表名称才需要在表名称周围加上单引号。 |
SELECT * From $SYSTEM.DISCOVER_CALC_DEPENDENCY WHERE QUERY = 'EVALUATE ''Reseller Sales'''
SELECT * from $system.DISCOVER_CALC_DEPENDENCY WHERE QUERY = 'EVALUATE CALCULATETABLE(VALUES(''Product Subcategory''[Product Subcategory Name]), ''Product Category''[Product Category Name] = "Bikes")'
QUERY 限制 XMLA 示例
您可以使用 XMLA Discover 命令来返回表中的查询对象。 XMLA 将结果作为原始 XML 返回。 您可以使用 ADOMD.NET 以更便于阅读的格式分析结果。
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
<RequestType>DISCOVER_CALC_DEPENDENCY</RequestType>
<Restrictions>
<RestrictionList>
<QUERY>Evaluate 'Reseller Sales'</QUERY>
</RestrictionList>
</Restrictions>
<Properties />
</Discover>
使用 ADOMD.NET 返回行集
在使用 ADOMD.NET 和架构行集检索元数据时,可以使用 GUID 或字符串在 GetSchemaDataSet 方法中引用架构行集对象。 有关详细信息,请参阅使用 ADOMD.NET 中的架构行集。
下表提供了用于标识此行集的 GUID 和字符串值。
参数 |
值 |
---|---|
GUID |
a07ccd46-8148-11d0-87bb-00c04fc33942 |
ADOMDNAME |
DependencyGraph |