[SSAS] XML Schema für Nutzdaten in XML/A Execute / Discover / Cancel Requests

Thomas Darimont

Erfahrenes Mitglied
Hallo,

(Dieses Beispiel gilt in erster Linie für Sqlserver Analysis Services (SSAS) 2008, ob das bei anderen Anbietern von XML/A Schnittstellen (Beispielsweise SAP BW oder IBM InfoSphere Warehouse) auch gilt weis ich nicht.)

falls ihr auch so lange danach sucht... für die XML/A Spezifikation (http://xmla.org/) gibts ein Schema für die den Aufbau der Execute / Discover Requests. Dieses Schema findet man u.a. im Xmla SDK 1.1 von Microsoft:
http://www.microsoft.com/downloads/...fd-4729-4b09-9ee7-5e71140186ee&displayLang=en
je nach Installation im Ordner:
C:\Program Files (x86)\Microsoft XML For Analysis SDK 1.1\Samples\Sample.NET\Web References\MsXmlAnalysis
als vs.xsd vor.

Der allgemeine Aufbau der Nutzdaten für Execute / Discover Requests sind jedoch auf den ersten Blick nicht zu finden.
Schaut man sich nun die XML/A Response an so findet man im SOAP Body innerhalb des Root-Elements ein <xs:schema>-Element welches das Schema der Nutzdaten des jeweiligen Requests beschreibt.

Beispiel Request:
XML:
<SOAP-ENV:Envelope
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>
        <Execute
         xmlns="urn:schemas-microsoft-com:xml-analysis">
            <Command>
                <Statement>
<![CDATA[
select [Employee].[Employees].[Employee Level 06] on 0 from [Adventure Works]
  ]]>
                </Statement>
            </Command>
            <Properties>
                <PropertyList>
                    <Catalog>Adventure Works DW 2008</Catalog>
                    <Format>Multidimensional</Format>
                    <AxisFormat>TupleFormat</AxisFormat>
                </PropertyList>
            </Properties>
        </Execute>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Antwort:
XML:
<xs:schema targetNamespace="urn:schemas-microsoft-com:xml-analysis:mddataset" elementFormDefault="qualified" xmlns="urn:schemas-microsoft-com:xml-analysis:mddataset" xmlns:xs="http://www.w3.org/2001/XMLSchema">
                        <xs:complexType name="MemberType">
                            <xs:sequence>
                                <xs:any namespace="##targetNamespace" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
                            </xs:sequence><xs:attribute name="Hierarchy" type="xs:string"/>
                        </xs:complexType>
                        <xs:complexType name="PropType">
                            <xs:sequence>
                                <xs:element name="Default" minOccurs="0"/>
                            </xs:sequence><xs:attribute name="name" type="xs:string" use="required"/><xs:attribute name="type" type="xs:QName"/>
                        </xs:complexType>
                        <xs:complexType name="TupleType">
                            <xs:sequence>
                                <xs:element name="Member" type="MemberType" maxOccurs="unbounded"/>
                            </xs:sequence>
                        </xs:complexType>
                        <xs:complexType name="MembersType">
                            <xs:sequence>
                                <xs:element name="Member" type="MemberType" minOccurs="0" maxOccurs="unbounded"/>
                            </xs:sequence><xs:attribute name="Hierarchy" type="xs:string" use="required"/>
                        </xs:complexType>
                        <xs:complexType name="TuplesType">
                            <xs:sequence>
                                <xs:element name="Tuple" type="TupleType" minOccurs="0" maxOccurs="unbounded"/>
                            </xs:sequence>
                        </xs:complexType>
                        <xs:group name="SetType">
                            <xs:choice>
                                <xs:element name="Members" type="MembersType"/><xs:element name="Tuples" type="TuplesType"/><xs:element name="CrossProduct" type="SetListType"/>
                                <xs:element name="Union">
                                    <xs:complexType>
                                        <xs:group ref="SetType" minOccurs="0" maxOccurs="unbounded"/>
                                    </xs:complexType>
                                </xs:element>
                            </xs:choice>
                        </xs:group>
                        <xs:complexType name="SetListType">
                            <xs:group ref="SetType" minOccurs="0" maxOccurs="unbounded"/><xs:attribute name="Size" type="xs:unsignedInt"/>
                        </xs:complexType>
                        <xs:complexType name="OlapInfo">
                            <xs:sequence>
                                <xs:element name="CubeInfo">
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element name="Cube" maxOccurs="unbounded">
                                                <xs:complexType>
                                                    <xs:sequence>
                                                        <xs:element name="CubeName" type="xs:string"/><xs:element name="LastDataUpdate" minOccurs="0" type="xs:dateTime"/><xs:element name="LastSchemaUpdate" minOccurs="0" type="xs:dateTime"/>
                                                    </xs:sequence>
                                                </xs:complexType>
                                            </xs:element>
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                                <xs:element name="AxesInfo">
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element name="AxisInfo" maxOccurs="unbounded">
                                                <xs:complexType>
                                                    <xs:sequence>
                                                        <xs:element name="HierarchyInfo" minOccurs="0" maxOccurs="unbounded">
                                                            <xs:complexType>
                                                                <xs:sequence>
                                                                    <xs:any namespace="##targetNamespace" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
                                                                </xs:sequence><xs:attribute name="name" type="xs:string" use="required"/>
                                                            </xs:complexType>
                                                        </xs:element>
                                                    </xs:sequence><xs:attribute name="name" type="xs:string"/>
                                                </xs:complexType>
                                            </xs:element>
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                                <xs:element name="CellInfo">
                                    <xs:complexType>
                                        <xs:choice minOccurs="0" maxOccurs="unbounded">
                                            <xs:any namespace="##targetNamespace" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
                                        </xs:choice>
                                    </xs:complexType>
                                </xs:element>
                            </xs:sequence>
                        </xs:complexType>
                        <xs:complexType name="Axes">
                            <xs:sequence>
                                <xs:element name="Axis" maxOccurs="unbounded">
                                    <xs:complexType>
                                        <xs:group ref="SetType" minOccurs="0" maxOccurs="unbounded"/><xs:attribute name="name" type="xs:string"/>
                                    </xs:complexType>
                                </xs:element>
                            </xs:sequence>
                        </xs:complexType>
                        <xs:complexType name="CellData">
                            <xs:sequence>
                                <xs:element name="Cell" minOccurs="0" maxOccurs="unbounded">
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:any namespace="##targetNamespace" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
                                        </xs:sequence><xs:attribute name="CellOrdinal" type="xs:unsignedInt" use="required"/>
                                    </xs:complexType>
                                </xs:element>
                            </xs:sequence>
                        </xs:complexType>
                        <xs:element name="root">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:any namespace="http://www.w3.org/2001/XMLSchema" processContents="strict" minOccurs="0"/><xs:element name="OlapInfo" type="OlapInfo" minOccurs="0"/><xs:element name="Axes" type="Axes" minOccurs="0"/><xs:element name="CellData" type="CellData" minOccurs="0"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:schema>

Der Aufbau der Nutzdaten eines Discover-RequestTypes sieht je nach Discover Mode (*) anders aus.
Hier mal ein Beispiel für den MDSCHEMA_HIERARCHIES RequestType:

Request:
XML:
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
  <RequestType>DBSCHEMA_CATALOGS</RequestType>
  <!-- MDSCHEMA_DIMENSIONS -->
  <Restrictions>
    <RestrictionList>
      <CATALOG_NAME>Adventure Works DW 2008</CATALOG_NAME>
    </RestrictionList>
  </Restrictions>
  <Properties>
    <PropertyList>
      <Catalog>Adventure Works DW 2008</Catalog>
      <Format>Multidimensional</Format>
      <AxisFormat>TupleFormat</AxisFormat>
      <Cube>analysis</Cube>
    </PropertyList>
  </Properties>
</Discover>

Result:
XML:
  <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="CATALOG_NAME" name="CATALOG_NAME" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="SCHEMA_NAME" name="SCHEMA_NAME" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="CUBE_NAME" name="CUBE_NAME" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="DIMENSION_UNIQUE_NAME" name="DIMENSION_UNIQUE_NAME" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="HIERARCHY_NAME" name="HIERARCHY_NAME" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="HIERARCHY_UNIQUE_NAME" name="HIERARCHY_UNIQUE_NAME" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="HIERARCHY_GUID" name="HIERARCHY_GUID" type="uuid" minOccurs="0" />
          <xsd:element sql:field="HIERARCHY_CAPTION" name="HIERARCHY_CAPTION" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="DIMENSION_TYPE" name="DIMENSION_TYPE" type="xsd:short" minOccurs="0" />
          <xsd:element sql:field="HIERARCHY_CARDINALITY" name="HIERARCHY_CARDINALITY" type="xsd:unsignedInt" minOccurs="0" />
          <xsd:element sql:field="DEFAULT_MEMBER" name="DEFAULT_MEMBER" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="ALL_MEMBER" name="ALL_MEMBER" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="DESCRIPTION" name="DESCRIPTION" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="STRUCTURE" name="STRUCTURE" type="xsd:short" minOccurs="0" />
          <xsd:element sql:field="IS_VIRTUAL" name="IS_VIRTUAL" type="xsd:boolean" minOccurs="0" />
          <xsd:element sql:field="IS_READWRITE" name="IS_READWRITE" type="xsd:boolean" minOccurs="0" />
          <xsd:element sql:field="DIMENSION_UNIQUE_SETTINGS" name="DIMENSION_UNIQUE_SETTINGS" type="xsd:int" minOccurs="0" />
          <xsd:element sql:field="DIMENSION_MASTER_UNIQUE_NAME" name="DIMENSION_MASTER_UNIQUE_NAME" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="DIMENSION_IS_VISIBLE" name="DIMENSION_IS_VISIBLE" type="xsd:boolean" minOccurs="0" />
          <xsd:element sql:field="HIERARCHY_ORDINAL" name="HIERARCHY_ORDINAL" type="xsd:unsignedInt" minOccurs="0" />
          <xsd:element sql:field="DIMENSION_IS_SHARED" name="DIMENSION_IS_SHARED" type="xsd:boolean" minOccurs="0" />
          <xsd:element sql:field="HIERARCHY_IS_VISIBLE" name="HIERARCHY_IS_VISIBLE" type="xsd:boolean" minOccurs="0" />
          <xsd:element sql:field="HIERARCHY_ORIGIN" name="HIERARCHY_ORIGIN" type="xsd:unsignedShort" minOccurs="0" />
          <xsd:element sql:field="HIERARCHY_DISPLAY_FOLDER" name="HIERARCHY_DISPLAY_FOLDER" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="INSTANCE_SELECTION" name="INSTANCE_SELECTION" type="xsd:unsignedShort" minOccurs="0" />
          <xsd:element sql:field="GROUPING_BEHAVIOR" name="GROUPING_BEHAVIOR" type="xsd:unsignedShort" minOccurs="0" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>

(*) Hier eine (möglicherweise) unvollständige Liste möglicher Discover RequestType Parameter:


  1. DBSCHEMA_CATALOGS
  2. DBSCHEMA_COLUMNS
  3. DBSCHEMA_PROVIDER_TYPES
  4. DBSCHEMA_SCHEMATA
  5. DBSCHEMA_TABLES
  6. DBSCHEMA_TABLES_INFO
  7. DISCOVER_DATASOURCES
  8. DISCOVER_ENUMERATORS
  9. DISCOVER_KEYWORDS
  10. DISCOVER_LITERALS
  11. DISCOVER_PROPERTIES
  12. DISCOVER_SCHEMA_ROWSETS
  13. MDSCHEMA_ACTIONS
  14. MDSCHEMA_CUBES
  15. MDSCHEMA_DIMENSIONS
  16. MDSCHEMA_FUNCTIONS
  17. MDSCHEMA_HIERARCHIES
  18. MDSCHEMA_LEVELS
  19. MDSCHEMA_MEASURES
  20. MDSCHEMA_MEMBERS
  21. MDSCHEMA_PROPERTIES
Gruß Tom
 
Zuletzt bearbeitet von einem Moderator:
Zurück