Hierarchy - Query based on all in one Table
In some cases, all data are stored in one table, the fact as well as multiple levels. This Tutorial shows how to handle this case.
Database Schema
The cube defined in this example is based on only one tables. The Fact table contains a measures the name of the Town and the Country.
<roma:DatabaseSchema id="_dbschema">
<tables xsi:type="roma:PhysicalTable" id="_tab_fact" name="Fact">
<columns xsi:type="roma:PhysicalColumn" id="_col_fact_country" name="KEY"/>
<columns xsi:type="roma:PhysicalColumn" id="_col_fact_value" name="VALUE" type="Integer"/>
</tables>
</roma:DatabaseSchema>
Note: This is only a symbolic example. For the exact definition, see the Definition section.
Query Fact
The TableQuery for the Levels and the Measure.
<roma:TableQuery id="_query" table="_tab_fact"/>
Note: This is only a symbolic example. For the exact definition, see the Definition section.
Level
The level of the Town used the column
attribute to define the column that holds the name, wich is also the key Column.
<roma:Level id="_level_town" name="Town" column="_col_fact_key"/>
Note: This is only a symbolic example. For the exact definition, see the Definition section.
Level
The level of the Country used the column
attribute to define the column that holds the name, wich is also the key Column.
<roma:Level id="_level_country" name="Country" column="_col_fact_country"/>
Note: This is only a symbolic example. For the exact definition, see the Definition section.
Hierarchy
This Hierarchy contains both defined levels. The primaryKey
attribute defines the column that contains the primary key of the hierarchy. The query
attribute references to the query that will be used to retrieve the data for the hierarchy.
The order of the Levels in the hierarchy is important, as it determines the drill-down path for the hierarchy.
<roma:Hierarchy id="_hierarchy_town" name="TownHierarchy" levels="_level_country _level_town" primaryKey="_col_fact_key" query="_query"/>
Note: This is only a symbolic example. For the exact definition, see the Definition section.
Dimension
The Dimension has only one hierarchy.
<roma:StandardDimension id="_dim_town" name="Town" hierarchies="_hierarchy_town"/>
Note: This is only a symbolic example. For the exact definition, see the Definition section.
Cube and DimensionConnector and Measure
The cube contains only one Measure in a unnamed MeasureGroup and references to the Dimension.
To connect the dimension to the cube, a DimensionConnector is used. The dimension has set the attribute foreignKey
to define the column that contains the foreign key of the dimension in the fact table.
<roma:PhysicalCube id="_cube" name="Cube Query linked Tables" query="_query">
<dimensionConnectors foreignKey="roma:PhysicalColumn _col_fact_country" dimension="roma:StandardDimension _dim_town"/>
<measureGroups>
<measures xsi:type="roma:SumMeasure" id="_measure" name="theMeasure" column="_col_fact_value"/>
</measureGroups>
</roma:PhysicalCube>
Note: This is only a symbolic example. For the exact definition, see the Definition section.
Definition
This files represent the complete definition of the catalog.
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:roma="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping">
<roma:Catalog name="Hierarchy - Query - all in 1 Table" cubes="_cube" dbschemas="_dbschema"/>
<roma:DatabaseSchema id="_dbschema">
<tables xsi:type="roma:PhysicalTable" id="_tab_fact" name="Fact">
<columns xsi:type="roma:PhysicalColumn" id="_col_fact_country" name="KEY"/>
<columns xsi:type="roma:PhysicalColumn" id="_col_fact_value" name="VALUE" type="Integer"/>
</tables>
</roma:DatabaseSchema>
<roma:PhysicalColumn id="_col_fact_key" name="KEY"/>
<roma:TableQuery id="_query" table="_tab_fact"/>
<roma:Level id="_level_country" name="Country" column="_col_fact_country"/>
<roma:Level id="_level_town" name="Town" column="_col_fact_key"/>
<roma:Hierarchy id="_hierarchy_town" name="TownHierarchy" levels="_level_country _level_town" primaryKey="_col_fact_key" query="_query"/>
<roma:StandardDimension id="_dim_town" name="Town" hierarchies="_hierarchy_town"/>
<roma:PhysicalCube id="_cube" name="Cube Query linked Tables" query="_query">
<dimensionConnectors foreignKey="_col_fact_country" dimension="_dim_town"/>
<measureGroups>
<measures xsi:type="roma:SumMeasure" id="_measure" name="theMeasure" column="_col_fact_value"/>
</measureGroups>
</roma:PhysicalCube>
</xmi:XMI>
Turorial Zip
This files contaisn the data-tables as csv and the mapping as xmi file.