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:
Antwort:
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:
Result:
(*) Hier eine (möglicherweise) unvollständige Liste möglicher Discover RequestType Parameter:
(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:
- DBSCHEMA_CATALOGS
- DBSCHEMA_COLUMNS
- DBSCHEMA_PROVIDER_TYPES
- DBSCHEMA_SCHEMATA
- DBSCHEMA_TABLES
- DBSCHEMA_TABLES_INFO
- DISCOVER_DATASOURCES
- DISCOVER_ENUMERATORS
- DISCOVER_KEYWORDS
- DISCOVER_LITERALS
- DISCOVER_PROPERTIES
- DISCOVER_SCHEMA_ROWSETS
- MDSCHEMA_ACTIONS
- MDSCHEMA_CUBES
- MDSCHEMA_DIMENSIONS
- MDSCHEMA_FUNCTIONS
- MDSCHEMA_HIERARCHIES
- MDSCHEMA_LEVELS
- MDSCHEMA_MEASURES
- MDSCHEMA_MEMBERS
- MDSCHEMA_PROPERTIES
Zuletzt bearbeitet von einem Moderator: