Skip to content

Commit

Permalink
MONDRIAN: XMLA requests emit regular and calculated members, but only…
Browse files Browse the repository at this point in the history
… if visible. (Contributed by Bart Pappyn.)

[git-p4: depot-paths = "//open/mondrian/": change = 8424]
  • Loading branch information
julianhyde committed Dec 30, 2006
1 parent adb73ab commit 34b5921
Show file tree
Hide file tree
Showing 4 changed files with 306 additions and 27 deletions.
25 changes: 16 additions & 9 deletions src/main/mondrian/xmla/RowsetDefinition.java
Original file line number Diff line number Diff line change
Expand Up @@ -5264,7 +5264,7 @@ protected void populateCube(SchemaReader schemaReader,
if (isRestricted(MemberUniqueName)) {
// NOTE: it is believed that if MEMBER_UNIQUE_NAME is
// a restriction, then none of the remaining possible
// restrictions other than TREE_OP are relevant
// restrictions other than TREE_OP are relevant
// (or allowed??).
outputUniqueMemberName(schemaReader,
catalogName, cube, rows);
Expand All @@ -5288,13 +5288,13 @@ protected void populateCube(SchemaReader schemaReader,
if (!level.getUniqueName().equals(levelUniqueName)) {
continue;
}
// Get members of this level, without access control, but
// including calculated members.
Member[] members =
cube.getSchemaReader(null).getLevelMembers(level,
false);
cube.getSchemaReader(null).getLevelMembers(level, true);
outputMembers(schemaReader, members,
catalogName, cube, rows);
}

} else {
for (Dimension dimension : cube.getDimensions()) {
String uniqueName = dimension.getUniqueName();
Expand Down Expand Up @@ -5530,6 +5530,13 @@ private void outputMember(
RolapMember.setOrdinals(schemaReader, member);
}

// Check whether the members is visible, otherwise do not dump.
Boolean isVisible = (Boolean)
member.getPropertyValue(Property.VISIBLE.name);
if (isVisible != null && !isVisible) {
return;
}

final Level level = member.getLevel();
final Hierarchy hierarchy = level.getHierarchy();
final Dimension dimension = hierarchy.getDimension();
Expand Down Expand Up @@ -5594,15 +5601,15 @@ void setOrdinals(SchemaReader schemaReader, Member startMember) {
// result is same as v == 0
// For very big data set, it takes time= 73880ms
Hierarchy hierarchy = startMember.getHierarchy();
Member[][] membersArray =
Member[][] membersArray =
RolapMember.getAllMembers(schemaReader, hierarchy);
RolapMember.setOrdinals(schemaReader, startMember);
} else if (v == 2) {
// foodmart time for Sales: time=18
// result is NOT same as v == 0
int ordinal = 0;
Hierarchy hierarchy = startMember.getHierarchy();
Member[][] membersArray =
Member[][] membersArray =
RolapMember.getAllMembers(schemaReader, hierarchy);
// RME: this does a breath first setting of ordinals
Expand All @@ -5620,7 +5627,7 @@ void setOrdinals(SchemaReader schemaReader, Member startMember) {
int ordinal = 1;
int depth = 1;
Hierarchy hierarchy = startMember.getHierarchy();
Member[][] membersArray =
Member[][] membersArray =
RolapMember.getAllMembers(schemaReader, hierarchy);
Member[] rootMembers = membersArray[0];
LOGGER.debug("RowsetDefinition.setOrdinals: rootMembers.length=" +rootMembers.length);
Expand All @@ -5643,7 +5650,7 @@ void setOrdinals(SchemaReader schemaReader, Member startMember) {
// For very big data set, it takes time= 4241ms
int ordinal = 1;
Hierarchy hierarchy = startMember.getHierarchy();
Member[][] membersArray =
Member[][] membersArray =
RolapMember.getAllMembers(schemaReader, hierarchy);
Member[] leafMembers = membersArray[membersArray.length-1];
Expand Down Expand Up @@ -5685,7 +5692,7 @@ int setOrdinals(int ordinal, Member parent, Member[][] membersArray, int depth)
if (member.getParentMember() == parent) {
((RolapMember) member).setOrdinal(ordinal++);
if (nextLevelExists) {
ordinal =
ordinal =
setOrdinals(ordinal, member, membersArray, depth+1);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,24 +184,6 @@
<PARENT_COUNT>0</PARENT_COUNT>
<DEPTH>0</DEPTH>
</row>
<row>
<CATALOG_NAME>FoodMart</CATALOG_NAME>
<SCHEMA_NAME>FoodMart</SCHEMA_NAME>
<CUBE_NAME>Sales</CUBE_NAME>
<DIMENSION_UNIQUE_NAME>[Measures]</DIMENSION_UNIQUE_NAME>
<HIERARCHY_UNIQUE_NAME>[Measures]</HIERARCHY_UNIQUE_NAME>
<LEVEL_UNIQUE_NAME>[Measures].[MeasuresLevel]</LEVEL_UNIQUE_NAME>
<LEVEL_NUMBER>0</LEVEL_NUMBER>
<MEMBER_ORDINAL>7</MEMBER_ORDINAL>
<MEMBER_NAME>Profit last Period</MEMBER_NAME>
<MEMBER_UNIQUE_NAME>[Measures].[Profit last Period]</MEMBER_UNIQUE_NAME>
<MEMBER_TYPE>1</MEMBER_TYPE>
<MEMBER_CAPTION>Profit last Period</MEMBER_CAPTION>
<CHILDREN_CARDINALITY>0</CHILDREN_CARDINALITY>
<PARENT_LEVEL>0</PARENT_LEVEL>
<PARENT_COUNT>0</PARENT_COUNT>
<DEPTH>0</DEPTH>
</row>
<row>
<CATALOG_NAME>FoodMart</CATALOG_NAME>
<SCHEMA_NAME>FoodMart</SCHEMA_NAME>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
<?xml version="1.0" encoding="UTF-8"?>
<xmlacycle>

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
<RequestType>MDSCHEMA_MEMBERS</RequestType>
<Restrictions>
<RestrictionList>
<CUBE_NAME>Sales</CUBE_NAME>
<LEVEL_UNIQUE_NAME>[Measures].[MeasuresLevel]</LEVEL_UNIQUE_NAME>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
<DataSourceInfo>${datasource}</DataSourceInfo>
<Catalog>${catalog}</Catalog>
<Format>Tabular</Format>
</PropertyList>
</Properties>
</Discover>

<xmla:DiscoverResponse xmlns:xmla="urn:schemas-microsoft-com:xml-analysis">
<xmla:return>
<root xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:EX="urn:schemas-microsoft-com:xml-analysis:exception" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsd:schema elementFormDefault="qualified" targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:sql="urn:schemas-microsoft-com:xml-sql" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="row" type="row"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="uuid">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="row">
<xsd:sequence>
<xsd:element minOccurs="0" name="CATALOG_NAME" sql:field="CATALOG_NAME" type="xsd:string"/>
<xsd:element minOccurs="0" name="SCHEMA_NAME" sql:field="SCHEMA_NAME" type="xsd:string"/>
<xsd:element name="CUBE_NAME" sql:field="CUBE_NAME" type="xsd:string"/>
<xsd:element name="DIMENSION_UNIQUE_NAME" sql:field="DIMENSION_UNIQUE_NAME" type="xsd:string"/>
<xsd:element name="HIERARCHY_UNIQUE_NAME" sql:field="HIERARCHY_UNIQUE_NAME" type="xsd:string"/>
<xsd:element name="LEVEL_UNIQUE_NAME" sql:field="LEVEL_UNIQUE_NAME" type="xsd:string"/>
<xsd:element name="LEVEL_NUMBER" sql:field="LEVEL_NUMBER" type="xsd:unsignedInt"/>
<xsd:element name="MEMBER_ORDINAL" sql:field="MEMBER_ORDINAL" type="xsd:unsignedInt"/>
<xsd:element name="MEMBER_NAME" sql:field="MEMBER_NAME" type="xsd:string"/>
<xsd:element name="MEMBER_UNIQUE_NAME" sql:field="MEMBER_UNIQUE_NAME" type="xsd:string"/>
<xsd:element name="MEMBER_TYPE" sql:field="MEMBER_TYPE" type="xsd:int"/>
<xsd:element minOccurs="0" name="MEMBER_GUID" sql:field="MEMBER_GUID" type="uuid"/>
<xsd:element name="MEMBER_CAPTION" sql:field="MEMBER_CAPTION" type="xsd:string"/>
<xsd:element name="CHILDREN_CARDINALITY" sql:field="CHILDREN_CARDINALITY" type="xsd:unsignedInt"/>
<xsd:element name="PARENT_LEVEL" sql:field="PARENT_LEVEL" type="xsd:unsignedInt"/>
<xsd:element minOccurs="0" name="PARENT_UNIQUE_NAME" sql:field="PARENT_UNIQUE_NAME" type="xsd:string"/>
<xsd:element name="PARENT_COUNT" sql:field="PARENT_COUNT" type="xsd:unsignedInt"/>
<xsd:element minOccurs="0" name="TREE_OP" sql:field="TREE_OP" type="xsd:string"/>
<xsd:element minOccurs="0" name="DEPTH" sql:field="DEPTH" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<row>
<CATALOG_NAME>FoodMart</CATALOG_NAME>
<SCHEMA_NAME>FoodMart</SCHEMA_NAME>
<CUBE_NAME>Sales</CUBE_NAME>
<DIMENSION_UNIQUE_NAME>[Measures]</DIMENSION_UNIQUE_NAME>
<HIERARCHY_UNIQUE_NAME>[Measures]</HIERARCHY_UNIQUE_NAME>
<LEVEL_UNIQUE_NAME>[Measures].[MeasuresLevel]</LEVEL_UNIQUE_NAME>
<LEVEL_NUMBER>0</LEVEL_NUMBER>
<MEMBER_ORDINAL>0</MEMBER_ORDINAL>
<MEMBER_NAME>Unit Sales</MEMBER_NAME>
<MEMBER_UNIQUE_NAME>[Measures].[Unit Sales]</MEMBER_UNIQUE_NAME>
<MEMBER_TYPE>1</MEMBER_TYPE>
<MEMBER_CAPTION>Unit Sales</MEMBER_CAPTION>
<CHILDREN_CARDINALITY>0</CHILDREN_CARDINALITY>
<PARENT_LEVEL>0</PARENT_LEVEL>
<PARENT_COUNT>0</PARENT_COUNT>
<DEPTH>0</DEPTH>
</row>
<row>
<CATALOG_NAME>FoodMart</CATALOG_NAME>
<SCHEMA_NAME>FoodMart</SCHEMA_NAME>
<CUBE_NAME>Sales</CUBE_NAME>
<DIMENSION_UNIQUE_NAME>[Measures]</DIMENSION_UNIQUE_NAME>
<HIERARCHY_UNIQUE_NAME>[Measures]</HIERARCHY_UNIQUE_NAME>
<LEVEL_UNIQUE_NAME>[Measures].[MeasuresLevel]</LEVEL_UNIQUE_NAME>
<LEVEL_NUMBER>0</LEVEL_NUMBER>
<MEMBER_ORDINAL>1</MEMBER_ORDINAL>
<MEMBER_NAME>Store Cost</MEMBER_NAME>
<MEMBER_UNIQUE_NAME>[Measures].[Store Cost]</MEMBER_UNIQUE_NAME>
<MEMBER_TYPE>1</MEMBER_TYPE>
<MEMBER_CAPTION>Store Cost</MEMBER_CAPTION>
<CHILDREN_CARDINALITY>0</CHILDREN_CARDINALITY>
<PARENT_LEVEL>0</PARENT_LEVEL>
<PARENT_COUNT>0</PARENT_COUNT>
<DEPTH>0</DEPTH>
</row>
<row>
<CATALOG_NAME>FoodMart</CATALOG_NAME>
<SCHEMA_NAME>FoodMart</SCHEMA_NAME>
<CUBE_NAME>Sales</CUBE_NAME>
<DIMENSION_UNIQUE_NAME>[Measures]</DIMENSION_UNIQUE_NAME>
<HIERARCHY_UNIQUE_NAME>[Measures]</HIERARCHY_UNIQUE_NAME>
<LEVEL_UNIQUE_NAME>[Measures].[MeasuresLevel]</LEVEL_UNIQUE_NAME>
<LEVEL_NUMBER>0</LEVEL_NUMBER>
<MEMBER_ORDINAL>2</MEMBER_ORDINAL>
<MEMBER_NAME>Store Sales</MEMBER_NAME>
<MEMBER_UNIQUE_NAME>[Measures].[Store Sales]</MEMBER_UNIQUE_NAME>
<MEMBER_TYPE>1</MEMBER_TYPE>
<MEMBER_CAPTION>Store Sales</MEMBER_CAPTION>
<CHILDREN_CARDINALITY>0</CHILDREN_CARDINALITY>
<PARENT_LEVEL>0</PARENT_LEVEL>
<PARENT_COUNT>0</PARENT_COUNT>
<DEPTH>0</DEPTH>
</row>
<row>
<CATALOG_NAME>FoodMart</CATALOG_NAME>
<SCHEMA_NAME>FoodMart</SCHEMA_NAME>
<CUBE_NAME>Sales</CUBE_NAME>
<DIMENSION_UNIQUE_NAME>[Measures]</DIMENSION_UNIQUE_NAME>
<HIERARCHY_UNIQUE_NAME>[Measures]</HIERARCHY_UNIQUE_NAME>
<LEVEL_UNIQUE_NAME>[Measures].[MeasuresLevel]</LEVEL_UNIQUE_NAME>
<LEVEL_NUMBER>0</LEVEL_NUMBER>
<MEMBER_ORDINAL>3</MEMBER_ORDINAL>
<MEMBER_NAME>Sales Count</MEMBER_NAME>
<MEMBER_UNIQUE_NAME>[Measures].[Sales Count]</MEMBER_UNIQUE_NAME>
<MEMBER_TYPE>1</MEMBER_TYPE>
<MEMBER_CAPTION>Sales Count</MEMBER_CAPTION>
<CHILDREN_CARDINALITY>0</CHILDREN_CARDINALITY>
<PARENT_LEVEL>0</PARENT_LEVEL>
<PARENT_COUNT>0</PARENT_COUNT>
<DEPTH>0</DEPTH>
</row>
<row>
<CATALOG_NAME>FoodMart</CATALOG_NAME>
<SCHEMA_NAME>FoodMart</SCHEMA_NAME>
<CUBE_NAME>Sales</CUBE_NAME>
<DIMENSION_UNIQUE_NAME>[Measures]</DIMENSION_UNIQUE_NAME>
<HIERARCHY_UNIQUE_NAME>[Measures]</HIERARCHY_UNIQUE_NAME>
<LEVEL_UNIQUE_NAME>[Measures].[MeasuresLevel]</LEVEL_UNIQUE_NAME>
<LEVEL_NUMBER>0</LEVEL_NUMBER>
<MEMBER_ORDINAL>4</MEMBER_ORDINAL>
<MEMBER_NAME>Customer Count</MEMBER_NAME>
<MEMBER_UNIQUE_NAME>[Measures].[Customer Count]</MEMBER_UNIQUE_NAME>
<MEMBER_TYPE>1</MEMBER_TYPE>
<MEMBER_CAPTION>Customer Count</MEMBER_CAPTION>
<CHILDREN_CARDINALITY>0</CHILDREN_CARDINALITY>
<PARENT_LEVEL>0</PARENT_LEVEL>
<PARENT_COUNT>0</PARENT_COUNT>
<DEPTH>0</DEPTH>
</row>
<row>
<CATALOG_NAME>FoodMart</CATALOG_NAME>
<SCHEMA_NAME>FoodMart</SCHEMA_NAME>
<CUBE_NAME>Sales</CUBE_NAME>
<DIMENSION_UNIQUE_NAME>[Measures]</DIMENSION_UNIQUE_NAME>
<HIERARCHY_UNIQUE_NAME>[Measures]</HIERARCHY_UNIQUE_NAME>
<LEVEL_UNIQUE_NAME>[Measures].[MeasuresLevel]</LEVEL_UNIQUE_NAME>
<LEVEL_NUMBER>0</LEVEL_NUMBER>
<MEMBER_ORDINAL>5</MEMBER_ORDINAL>
<MEMBER_NAME>Promotion Sales</MEMBER_NAME>
<MEMBER_UNIQUE_NAME>[Measures].[Promotion Sales]</MEMBER_UNIQUE_NAME>
<MEMBER_TYPE>1</MEMBER_TYPE>
<MEMBER_CAPTION>Promotion Sales</MEMBER_CAPTION>
<CHILDREN_CARDINALITY>0</CHILDREN_CARDINALITY>
<PARENT_LEVEL>0</PARENT_LEVEL>
<PARENT_COUNT>0</PARENT_COUNT>
<DEPTH>0</DEPTH>
</row>
<row>
<CATALOG_NAME>FoodMart</CATALOG_NAME>
<SCHEMA_NAME>FoodMart</SCHEMA_NAME>
<CUBE_NAME>Sales</CUBE_NAME>
<DIMENSION_UNIQUE_NAME>[Measures]</DIMENSION_UNIQUE_NAME>
<HIERARCHY_UNIQUE_NAME>[Measures]</HIERARCHY_UNIQUE_NAME>
<LEVEL_UNIQUE_NAME>[Measures].[MeasuresLevel]</LEVEL_UNIQUE_NAME>
<LEVEL_NUMBER>0</LEVEL_NUMBER>
<MEMBER_ORDINAL>6</MEMBER_ORDINAL>
<MEMBER_NAME>Profit</MEMBER_NAME>
<MEMBER_UNIQUE_NAME>[Measures].[Profit]</MEMBER_UNIQUE_NAME>
<MEMBER_TYPE>1</MEMBER_TYPE>
<MEMBER_CAPTION>Profit</MEMBER_CAPTION>
<CHILDREN_CARDINALITY>0</CHILDREN_CARDINALITY>
<PARENT_LEVEL>0</PARENT_LEVEL>
<PARENT_COUNT>0</PARENT_COUNT>
<DEPTH>0</DEPTH>
</row>
<row>
<CATALOG_NAME>FoodMart</CATALOG_NAME>
<SCHEMA_NAME>FoodMart</SCHEMA_NAME>
<CUBE_NAME>Sales</CUBE_NAME>
<DIMENSION_UNIQUE_NAME>[Measures]</DIMENSION_UNIQUE_NAME>
<HIERARCHY_UNIQUE_NAME>[Measures]</HIERARCHY_UNIQUE_NAME>
<LEVEL_UNIQUE_NAME>[Measures].[MeasuresLevel]</LEVEL_UNIQUE_NAME>
<LEVEL_NUMBER>0</LEVEL_NUMBER>
<MEMBER_ORDINAL>8</MEMBER_ORDINAL>
<MEMBER_NAME>Profit Growth</MEMBER_NAME>
<MEMBER_UNIQUE_NAME>[Measures].[Profit Growth]</MEMBER_UNIQUE_NAME>
<MEMBER_TYPE>1</MEMBER_TYPE>
<MEMBER_CAPTION>Gewinn-Wachstum</MEMBER_CAPTION>
<CHILDREN_CARDINALITY>0</CHILDREN_CARDINALITY>
<PARENT_LEVEL>0</PARENT_LEVEL>
<PARENT_COUNT>0</PARENT_COUNT>
<DEPTH>0</DEPTH>
</row>
</root>
</xmla:return>
</xmla:DiscoverResponse>
</xmlacycle>
Loading

0 comments on commit 34b5921

Please sign in to comment.