Integration Services での XMLA クエリの結果の使用
-
20-08-2019 - |
質問
次のような XML として Analysis Services キューブの状態と最終処理日を返す XMLA クエリがあります。
クエリ:
<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>
この XMLA クエリを Integration Services パッケージで使用し、結果を解析して SQL Server データベース テーブルに保存できるようにしたいと考えています。ただし、XMLA クエリを実行していると思われる唯一のタスクは「Analysis Services Execute DDL」タスクであり、私の知る限り、このタスクにはクエリの結果を返すメソッドがありません。
これを達成するための他の方法について何か提案がある人はいますか?
解決
SQL 実行タスクなど、SSIS のさまざまなメカニズムを通じて「通常の」 MDX/XMLA を実行できますが、MDX/XMLA は常に の内部にラップされます。はトップレベルのメソッドであり、 の中にラップすることができないため、問題が発生します。
考えられる解決策は 2 つあります。
- リレーショナル データベース内で OPENQUERY 呼び出しを使用して、XMLA を SQL 実行タスク内にラップします。SELECT * from OPENQUERY() のようなことを実行すると、実際に SQL Server 内で XML 結果セットを適切に解析できます。
- HTTP アクセスを構成して SSAS サーバーを開きます (http://www.microsoft.com/technet/prodtechnol/sql/2005/httpasws.mspx) なので、XMLA を Web サービス呼び出しとして送信できます。SSIS には、実行して結果を消費するために使用できる Web サービス タスクがあります。
これらのオプションには明らかに欠点があります。
他のヒント
を発見コマンドの場合:
これは私にとって非常によく動作します:
XMLA名スペースの問題を発見クエリを使用してスクリプトタスクを作成します。あなたが受け取ったら応答がXMLAを解析し、VB.NETのDataTableに追加して、SQLテーブルに解析されたデータを挿入します。
また、SSAS 2005年にSSAS 2008の新しいDMV構文または ASSPするからDMVの機能を使用することができます表形式でこのデータを戻します。
所属していません StackOverflow