【发布时间】:2021-03-08 02:30:45
【问题描述】:
我正在尝试向 Analysis Services 实例发出用于“发现”的 XMLA 语句。从 Management Studio 中的 XMLA 窗口发送 XMLA 可以正常工作并返回所需的结果,所以我相信我的基本语法是正确的。
将它包装在一个 SQL 查询中(见下文),它会返回: "链接服务器 "ANALYSIS" 的 OLE DB 提供程序 "MSOLAP" 返回消息 "Das Discover-Element in Zeile 2, Spalte 58 (urn:schemas-microsoft-com:xml-analysis-Namespace) ist unter Envelope/Body/执行/命令/批处理 nicht zulässig."
自己的翻译:“第 2 行第 58 列中的 Discover-Element ... 位于 Envelope/Body/Execute/Command/Batch ... 下...不允许。”。
我关注了SSAS XMLA DISCOVER: how to get list of roles in SSAS database,其中包含一个工作示例和一个屏幕截图。那是 2010 年......所以那里使用的版本很可能是 SQL 2008 或 SQL 2008 R2。 我的代码应该是相同的,但它在 SQL 2012 上不起作用(不再?)。
我什至认为这是正确的,引用https://docs.microsoft.com/de-de/analysis-services/xmla/xml-elements-commands/batch-element-xmla?view=sql-analysis-services-2016: "子元素(Batch):Bindings、DataSource、DataSourceView、ErrorConfiguration、Parallel
以下一个或多个 XMLA 命令:Alter、Backup、BeginTransaction、ClearCache、CommitTransaction、Create、Delete、DesignAggregations、Drop、Insert、Lock、MergePartitions、NotifyTableChange、Process、Restore、RollbackTransaction、SetPasswordEncryptionKey、Statement , 订阅, 同步, 解锁, 更新, UpdateCells"
这里没有提到“发现”是一个有效的命令。 如果没有 Batch,它也不起作用。我当然测试过。上面给出的错误只是更改为“Envelope/Body/Execute/Command 下不允许”
那么,知道如何做到这一点吗?
DECLARE @xmla AS NVARCHAR(MAX) = '<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
<RequestType>DISCOVER_XML_METADATA</RequestType>
<Restrictions>
<RestrictionList xmlns="urn:schemas-microsoft-com:xml-analysis">
<DatabaseID>DBName</DatabaseID>
<CubeID>CubeName</CubeID>
<MeasureGroupID>MGName</MeasureGroupID>
</RestrictionList>
</Restrictions>
<Properties/>
</Discover>
</Batch>';
EXEC (@xmla) AT [ANALYSIS_LINKED_SERVER];
【问题讨论】:
-
如果你浏览微软页面的链接,你会发现“发现”不是一个命令,而是一个方法。 “执行”也是一种方法。如果您从 SQL 执行“EXEC”,那么您已经在“Execute”方法路径下,并且不能“返回”以使用“Discover”方法 - 这是有道理的。但是如何向 SSAS 发布另一种方法呢?我试过 OpenQuery() 但这也返回错误“不允许在命令下”。
标签: sql-server sql-server-2012 ssas linked-server xmla