In a complex cube, at least one dimension of the schema contains multiple levels. For example, you have flat data that contains three fields:
data:Object = {
product:"ColdFusion"
year :"2006"
quarter :"Q1"
revenue: "100.00",
}
The data fields of each record can contain the following values:
In this example, your schema defines two dimensions, with the TimeDim dimension containing levels for year and quarter, as the following code shows:
<mx:OLAPCube name="FlatSchemaCube"
dataProvider="{flatData}"
id="myMXMLCube"
complete="runQuery(event);">
<mx:OLAPDimension name="ProductDim">
<mx:OLAPAttribute name="Product" dataField="product"/>
<mx:OLAPHierarchy name="ProductHier" hasAll="true">
<mx:OLAPLevel attributeName="Product"/>
</mx:OLAPHierarchy>
</mx:OLAPDimension>
<mx:OLAPDimension name="TimeDim">
<mx:OLAPAttribute name="Year" dataField="year"/>
<mx:OLAPAttribute name="Quarter" dataField="quarter"/>
<mx:OLAPHierarchy name="Time-PeriodHier" hasAll="true">
<mx:OLAPLevel attributeName="Year"/>
<mx:OLAPLevel attributeName="Quarter"/>
</mx:OLAPHierarchy>
</mx:OLAPDimension>
<mx:OLAPMeasure name="Revenue"
dataField="revenue"
aggregator="SUM"/>
</mx:OLAPCube>
The cube has the following structure:
ProductDim // Dimension
Product // Hierarchy
(All) // Member
ColdFusion // Member
Flex // Member
Dreamweaver // Member
Illustrator // Member
ProductHier // Hierarchy
(All) // Level
ColdFusion // Member
Flex // Member
Dreamweaver // Member
Illustrator // Member
Product // Level
ColdFusion // Member
Flex // Member
Dreamweaver // Member
Illustrator // Member
TimeDim // Dimension
Year // Hierarchy
(All) // Member
2006 // Member
2007 // Member
Quarter // Hierarchy
(All) // Member
Q1 // Member
Q2 // Member
Q3 // Member
Q4 // Member
Time-PeriodHier // Hierarchy
(All) // Level
2006
Q1
Q2
Q3
Q4
2007
Q1
Q2
Q3
Q4
Year // Level
2006 // Member
2007 // Member
Quarter // Level
Q1 (having 2006 as a parent) // Member
Q1 (having 2007 as a parent) // Member
Q2 (having 2006 as a parent) // Member
Q2 (having 2007 as a parent) // Member
Q3 (having 2006 as a parent) // Member
Q3 (having 2007 as a parent) // Member
Q4 (having 2006 as a parent) // Member
Q4 (having 2007 as a parent) // Member
Notice in this cube:
The reason for the multiple entries for a single quarter in the Quarter level under the Time-PeriodHier hierarchy is that a cube has to be able to return results for each quarter for each year. For example, this structure lets you write a query to return data aggregations for all quarters for all years, for all quarters for 2006, or for all quarters for 2007.
Since the ProductDim contains a single level, you can write queries for it in the same way as you did for a simple cube. See Writing a query for a simple OLAP cube for more information.
The following table shows the information returned for different ways to access the TimeDim by calling the findAttribute() method:
|
Reference to method and property |
Returns |
|---|---|
| findDimension("TimeDim").findAttribute("Year").children |
2006, 2007 |
| findDimension("TimeDim").findAttribute("Year").members |
(All), 2006, 2007 |
| findDimension("TimeDim").findMember("2006") |
2006 |
| findDimension("TimeDim").findAttribute("Quarter").children |
Q1, Q2, Q3, and Q4 |
| findDimension("TimeDim").findAttribute("Quarter").members |
(All), Q1, Q2, Q3, and Q4 |
| findDimension("TimeDim").findMember("Q2") |
Q2 having 2006 as a parent. This is the first instance of Q2 in the cube. |
The following table shows the information returned for different ways to use the OLAPDimension.findHierarchy(), OLAPHierarchy.findLevel(), and OLAPLevel.findMember() methods:
|
Reference to method and property |
Returns |
|---|---|
| findDimension("TimeDim").findHierarchy("Time-PeriodHier"). findLevel("Year").children |
2006, 2007 |
| findDimension("TimeDim").findHierarchy("Time-PeriodHier"). findLevel("Year").members |
(All), 2006, 2007 |
| IOLAPElement(cube.findDimension("TimeDim"). findHierarchy("Time-PeriodHier").findLevel("Year"). findMember("2006").getItemAt(0)) |
2006 |
| findDimension("QuarterDim").findHierarchy("QuarterHier"). findLevel("Quarter").children |
Q1, Q2, Q3, and Q4 |
| findDimension("QuarterDim").findHierarchy("QuarterHier"). findLevel("Quarter").members |
(All), Q1, Q2, Q3, and Q4 |
| findDimension("TimeDim").findHierarchy("Time- PeriodHier").findLevel("Quarter").findMember("Q1") |
All Q1 members |
| IOLAPElement(cube.findDimension("QuarterDim"). findHierarchy("QuarterHier").findLevel("Quarter"). findMember("Q2").getItemAt(0)) |
Q2 having 2006 as a parent. Cast the result to an instance of IOLAPElement because getItemAt() returns an Object. |
| IOLAPElement(cube.findDimension("QuarterDim"). findHierarchy("QuarterHier").findLevel("Quarter"). findMember("Q2").getItemAt(1)) |
Q2 having 2007 as a parent. Cast the result to an instance of IOLAPElement because getItemAt() returns an Object. |
You could add a Month level to the TimeDim, as the following definition of TimeDim shows:
<mx:OLAPDimension name="TimeDim">
<mx:OLAPAttribute name="Year" dataField="year"/>
<mx:OLAPAttribute name="Quarter" dataField="quarter"/>
<mx:OLAPAttribute name="Month" dataField="month"/>
<mx:OLAPHierarchy name="Time-PeriodHier" hasAll="true">
<mx:OLAPLevel attributeName="Year"/>
<mx:OLAPLevel attributeName="Quarter"/>
<mx:OLAPLevel attributeName="Month"/>
</mx:OLAPHierarchy>
</mx:OLAPDimension>
For this example, the structure of the TimeDim dimension is:
TimeDim // Dimension
Year // Hierarchy
(All) // Member
2006 // Member
2007 // Member
Quarter // Hierarchy
(All) // Member
Q1 // Member
Q2 // Member
Q3 // Member
Q4 // Member
Month // Hierarchy
(All) // Member
Jan // Member
Feb // Member
... // Adiitional members for each month
Time-PeriodHier // Hierarchy
(All) // Level
2006
Q1
Jan
Feb
Mar
...
2007
Q1
Jan
Feb
Mar
...
Year // Level
2006 // Member
2007 // Member
Quarter // Level
Q1 (having 2006 as a parent) // Member
Q1 (having 2007 as a parent) // Member
Q2 (having 2006 as a parent) // Member
Q2 (having 2007 as a parent) // Member
Q3 (having 2006 as a parent) // Member
Q3 (having 2007 as a parent) // Member
Q4 (having 2006 as a parent) // Member
Q4 (having 2007 as a parent) // Member
Month // Level
Jan (having Q1 having 2006 as a parent) // Member
Feb (having Q1 having 2006 as a parent) // Member
Jan (having Q1 having 2007 as a parent) // Member
Feb (having Q1 having 2007 as a parent) // Member
... // Additional members for each possible
// combination of month, quarter,
// and year
Notice in this cube: