-1

我有一个 XMLA 查询,它以 XML 形式返回 Analysis Services 多维数据集的状态和上次处理日期,如下所示:

询问:

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
  <RequestType>DISCOVER_XML_METADATA</RequestType>
  <Restrictions >
    <RestrictionList xmlns="urn:schemas-microsoft-com:xml-analysis">
      <DatabaseID>SSAS - Premium and Claims V2</DatabaseID>
      <CubeID>PDW04 1</CubeID>
      <ObjectExpansion>ReferenceOnly</ObjectExpansion>
    </RestrictionList>
  </Restrictions>
  <Properties />
</Discover>

结果:

<return xmlns="urn:schemas-microsoft-com:xml-analysis">
  <root xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:schema targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:sql="urn:schemas-microsoft-com:xml-sql" elementFormDefault="qualified">
      <xsd:element name="root">
        <xsd:complexType>
          <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="row" type="row" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:simpleType name="uuid">
        <xsd:restriction base="xsd:string">
          <xsd:pattern value="[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}" />
        </xsd:restriction>
      </xsd:simpleType>
      <xsd:complexType name="xmlDocument">
        <xsd:sequence>
          <xsd:any />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="row">
        <xsd:sequence>
          <xsd:element sql:field="METADATA" name="METADATA" type="xmlDocument" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
    <row>
      <xars:METADATA xmlns="http://schemas.microsoft.com/analysisservices/2003/engine" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:xars="urn:schemas-microsoft-com:xml-analysis:rowset">
        <Cube>
          <Name>Premium</Name>
          <ID>PDW04 1</ID>
          <CreatedTimestamp>2008-11-23T22:31:06</CreatedTimestamp>
          <LastSchemaUpdate>2009-01-22T00:50:13</LastSchemaUpdate>
          <LastProcessed>2009-01-07T22:28:34</LastProcessed>
          <State>Processed</State>
        </Cube>
      </xars:METADATA>
    </row>
  </root>
</return>

我希望能够在 Integration Services 包中使用这个 XMLA 查询,解析结果并将结果存储在 SQL Server 数据库表中。然而,似乎执行 XMLA 查询的唯一任务是“Analysis Services Execute DDL”任务,据我所知,它没有返回查询结果的方法。

有没有人对如何实现这一目标有任何建议?

4

3 回答 3

4

虽然您可以通过 SSIS 中的各种机制(包括通过执行 SQL 任务)运行“常规”MDX/XMLA,但它始终会将其包装在 . 是一个顶级方法,就像不能被包裹在里面,因此问题。

您有两种可能的解决方案:

  1. 使用关系数据库中的 OPENQUERY 调用将 XMLA 包装在 Execute SQL 任务中。您可以执行 SELECT * from OPENQUERY() 之类的操作,并且实际上可以很好地解析 SQL Server 中的 XML 结果集。
  2. 通过配置 HTTP 访问 ( http://www.microsoft.com/technet/prodtechnol/sql/2005/httpasws.mspx )打开您的 SSAS 服务器,以便您可以将 XMLA 作为 Web 服务调用发送。SSIS 中有一个 Web 服务任务,您可以使用它来执行和使用结果。

这两种选择显然都有一些缺点。

于 2009-01-29T20:29:33.160 回答
1

对于发现命令:

这对我来说非常有效:

使用 XMLA 名称空间创建脚本任务发出发现查询。收到响应后,解析 xmla 并添加到 VB.NET Datatable 并将解析的数据插入到 sql 表中。

于 2009-03-11T21:28:11.970 回答
1

您还可以使用 SSAS 2008 中的新 DMV 语法或从ASSP到 SSAS 2005 中的 DMV 函数以表格格式返回此数据。

于 2009-07-22T01:35:07.813 回答