Daanse Tutorial - Writeback Virtual Cube
Daanse Tutorial — Writeback combined through a Virtual Cube.
Two physical cubes sharing the same dimensions, one read-only and one writeback, joined through a VirtualCube.
CN(Cube-Numeric) — factFACT_N, oneSumMeasure(Amount), no writeback table. Stays read-only.CT(Cube-Text) — factFACT_T, oneTextAggMeasure(Comments)plus a numericSumMeasure(Value), writeback enabled toFACTWB_T. Each cell update writes one row carrying either the typed string inCOMMENTor the numericVALUEpayload.V(VirtualCube) — references both physical cubes and exposesAmount,ValueandCommentstogether. The sameCategoryandRegiondimensions show up across both cubes via per-cubeDimensionConnectorinstances pointing at the same sharedStandardDimension.
Why two cubes? PhysicalCube.writebackTable is per-cube in the ecore. A VirtualCube has no writeback field. Mixing a measure you want to write and one you don't on the same physical cube entangles their fact-table union behind one writeback table — cleaner to split into two cubes and combine views above them.
Database Schema
Five tables in one schema:
CATEGORY(CATEGORY, NAME)— dimension table.REGION(REGION, NAME)— dimension table.FACT_N(CATEGORY, REGION, AMOUNT)— Cube CN's facts.FACT_T(CATEGORY, REGION, VALUE, COMMENT)— Cube CT's facts.FACTWB_T(CATEGORY, REGION, VALUE, COMMENT, ID, USER)— writeback target for Cube CT. Both the numericVALUEcolumn and the textCOMMENTcolumn are writeable.IDis filled with a UUID by the runtime,USERwith the session user.
<relational:Schema xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:relational="http://www.omg.org/spec/CWM/1.1/resource/relational" xmi:id="_schema">
<ownedElement xsi:type="relational:Table" xmi:id="_table_fact_n" name="FACT_N">
<feature xsi:type="relational:Column" xmi:id="_column_fact_n_category" name="CATEGORY"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_n_region" name="REGION"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_n_amount" name="AMOUNT"/>
</ownedElement>
<ownedElement xsi:type="relational:Table" xmi:id="_table_fact_t" name="FACT_T">
<feature xsi:type="relational:Column" xmi:id="_column_fact_t_category" name="CATEGORY"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_t_region" name="REGION"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_t_value" name="VALUE"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_t_comment" name="COMMENT"/>
</ownedElement>
<ownedElement xsi:type="relational:Table" xmi:id="_table_category" name="CATEGORY">
<feature xsi:type="relational:Column" xmi:id="_column_category_category" name="CATEGORY"/>
<feature xsi:type="relational:Column" xmi:id="_column_category_name" name="NAME"/>
</ownedElement>
<ownedElement xsi:type="relational:Table" xmi:id="_table_region" name="REGION">
<feature xsi:type="relational:Column" xmi:id="_column_region_region" name="REGION"/>
<feature xsi:type="relational:Column" xmi:id="_column_region_name" name="NAME"/>
</ownedElement>
<ownedElement xsi:type="relational:Table" xmi:id="_table_factwb_t" name="FACTWB_T">
<feature xsi:type="relational:Column" xmi:id="_column_factwb_t_category" name="CATEGORY"/>
<feature xsi:type="relational:Column" xmi:id="_column_factwb_t_region" name="REGION"/>
<feature xsi:type="relational:Column" xmi:id="_column_factwb_t_value" name="VALUE"/>
<feature xsi:type="relational:Column" xmi:id="_column_factwb_t_comment" name="COMMENT"/>
<feature xsi:type="relational:Column" xmi:id="_column_factwb_t_id" name="ID"/>
<feature xsi:type="relational:Column" xmi:id="_column_factwb_t_user" name="USER"/>
</ownedElement>
</relational:Schema>Note: This is only a symbolic example. For the exact definition, see the Definition section.
Dimensions (shared)
Two StandardDimension instances at catalog scope:
Category— explicit hierarchy with one level keyed onCATEGORY.CATEGORY, name fromCATEGORY.NAME.Region— explicit hierarchy with one level keyed onREGION.REGION, name fromREGION.NAME.
Each physical cube gets its own DimensionConnector per dimension. All connectors setDimension(...) on the same shared dimension instance. The VirtualCube aggregates all four connectors so the same hierarchies surface for both cubes' measures.
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:relational="http://www.omg.org/spec/CWM/1.1/resource/relational" xmlns:rolapdim="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/dimension" xmlns:rolaphier="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/dimension/hierarchy" xmlns:rolaplev="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/dimension/hierarchy/level" xmlns:rolapsrc="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/database/source">
<rolapdim:StandardDimension xmi:id="_standarddimension_category" name="Category" hierarchies="_explicithierarchy_category"/>
<relational:Table xmi:id="_table_category" name="CATEGORY">
<feature xsi:type="relational:Column" xmi:id="_column_category_category" name="CATEGORY"/>
<feature xsi:type="relational:Column" xmi:id="_column_category_name" name="NAME"/>
</relational:Table>
<rolapsrc:TableSource xmi:id="_tablesource_category" table="_table_category"/>
<rolaplev:Level xmi:id="_level_category" name="Category" column="_column_category_category" nameColumn="_column_category_name" uniqueMembers="true"/>
<rolaphier:ExplicitHierarchy xmi:id="_explicithierarchy_category" name="Category" allMemberName="All Categories" primaryKey="_column_category_category" source="_tablesource_category" levels="_level_category"/>
</xmi:XMI>Note: This is only a symbolic example. For the exact definition, see the Definition section.
Cube CN (read-only, numeric)
CN is a plain read-only cube:
TableSourceoverFACT_N.DimensionConnectors forCategory(FK =FACT_N.CATEGORY) andRegion(FK =FACT_N.REGION).- One
MeasureGroupcontainingAmount = SumMeasure(AMOUNT). - No
writebackTable. Writebacks targeting[Measures].[Amount]are a no-op on this cube.
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:relational="http://www.omg.org/spec/CWM/1.1/resource/relational" xmlns:rolapcube="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/cube" xmlns:rolapdim="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/dimension" xmlns:rolaphier="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/dimension/hierarchy" xmlns:rolaplev="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/dimension/hierarchy/level" xmlns:rolapmeas="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/cube/measure" xmlns:rolapsrc="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/database/source">
<rolapcube:PhysicalCube xmi:id="_physicalcube_cn" name="CN" source="_tablesource_fact_n">
<dimensionConnectors xmi:id="_dimensionconnector_category" foreignKey="_column_fact_n_category" dimension="_standarddimension_category" overrideDimensionName="Category"/>
<dimensionConnectors xmi:id="_dimensionconnector_region" foreignKey="_column_fact_n_region" dimension="_standarddimension_region" overrideDimensionName="Region"/>
<measureGroups xmi:id="_measuregroup">
<measures xsi:type="rolapmeas:SumMeasure" xmi:id="_summeasure_amount" name="Amount" formatString=",##0" column="_column_fact_n_amount"/>
</measureGroups>
</rolapcube:PhysicalCube>
<rolapdim:StandardDimension xmi:id="_standarddimension_category" name="Category" hierarchies="_explicithierarchy_category"/>
<relational:Table xmi:id="_table_category" name="CATEGORY">
<feature xsi:type="relational:Column" xmi:id="_column_category_category" name="CATEGORY"/>
<feature xsi:type="relational:Column" xmi:id="_column_category_name" name="NAME"/>
</relational:Table>
<rolapsrc:TableSource xmi:id="_tablesource_region" table="_table_region"/>
<rolapsrc:TableSource xmi:id="_tablesource_category" table="_table_category"/>
<rolaplev:Level xmi:id="_level_category" name="Category" column="_column_category_category" nameColumn="_column_category_name" uniqueMembers="true"/>
<rolaphier:ExplicitHierarchy xmi:id="_explicithierarchy_category" name="Category" allMemberName="All Categories" primaryKey="_column_category_category" source="_tablesource_category" levels="_level_category"/>
<rolapsrc:TableSource xmi:id="_tablesource_fact_n" table="_table_fact_n"/>
<relational:Table xmi:id="_table_fact_n" name="FACT_N">
<feature xsi:type="relational:Column" xmi:id="_column_fact_n_category" name="CATEGORY"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_n_region" name="REGION"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_n_amount" name="AMOUNT"/>
</relational:Table>
<rolaphier:ExplicitHierarchy xmi:id="_explicithierarchy_region" name="Region" allMemberName="All Regions" primaryKey="_column_region_region" source="_tablesource_region" levels="_level_region"/>
<rolapdim:StandardDimension xmi:id="_standarddimension_region" name="Region" hierarchies="_explicithierarchy_region"/>
<rolaplev:Level xmi:id="_level_region" name="Region" column="_column_region_region" nameColumn="_column_region_name" uniqueMembers="true"/>
<relational:Table xmi:id="_table_region" name="REGION">
<feature xsi:type="relational:Column" xmi:id="_column_region_region" name="REGION"/>
<feature xsi:type="relational:Column" xmi:id="_column_region_name" name="NAME"/>
</relational:Table>
</xmi:XMI>Note: This is only a symbolic example. For the exact definition, see the Definition section.
Cube CT (writeback, text)
CT carries the writeback measures — one numeric, one text:
TableSourceoverFACT_T.DimensionConnectors forCategory(FK =FACT_T.CATEGORY) andRegion(FK =FACT_T.REGION).- One
MeasureGroupcontainingValue = SumMeasure(VALUE)andComments = TextAggMeasure(COMMENT, separator = " | "). WritebackTable("FACTWB_T")with twoWritebackAttributes (one per dimension connector) and twoWritebackMeasureentries:Value→FACTWB_T.VALUEandComments→FACTWB_T.COMMENT.
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:relational="http://www.omg.org/spec/CWM/1.1/resource/relational" xmlns:rolapcube="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/cube" xmlns:rolapdim="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/dimension" xmlns:rolaphier="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/dimension/hierarchy" xmlns:rolaplev="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/dimension/hierarchy/level" xmlns:rolapmeas="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/cube/measure" xmlns:rolapsrc="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/database/source">
<rolapcube:PhysicalCube xmi:id="_physicalcube_ct" name="CT" source="_tablesource_fact_t">
<dimensionConnectors xmi:id="_dimensionconnector_category" foreignKey="_column_fact_t_category" dimension="_standarddimension_category" overrideDimensionName="Category"/>
<dimensionConnectors xmi:id="_dimensionconnector_region" foreignKey="_column_fact_t_region" dimension="_standarddimension_region" overrideDimensionName="Region"/>
<writebackTable xmi:id="_writebacktable_factwb_t" name="FACTWB_T">
<writebackAttribute xmi:id="_writebackattribute_category" dimensionConnector="_dimensionconnector_category">
<column href="_column_factwb_t_category"/>
</writebackAttribute>
<writebackAttribute xmi:id="_writebackattribute_region" dimensionConnector="_dimensionconnector_region">
<column href="_column_factwb_t_region"/>
</writebackAttribute>
<writebackMeasure xmi:id="_writebackmeasure_value" name="Value">
<column href="_column_factwb_t_value"/>
</writebackMeasure>
<writebackMeasure xmi:id="_writebackmeasure_comments" name="Comments">
<column href="_column_factwb_t_comment"/>
</writebackMeasure>
</writebackTable>
<measureGroups xmi:id="_measuregroup">
<measures xsi:type="rolapmeas:SumMeasure" xmi:id="_summeasure_value" name="Value" formatString=",##0" column="_column_fact_t_value"/>
<measures xsi:type="rolapmeas:TextAggMeasure" xmi:id="_textaggmeasure_comments" name="Comments" column="_column_fact_t_comment" separator=" | ">
<orderByColumns href="_orderedcolumn_comment"/>
</measures>
</measureGroups>
</rolapcube:PhysicalCube>
<relational:Table xmi:id="_table_fact_t" name="FACT_T">
<feature xsi:type="relational:Column" xmi:id="_column_fact_t_category" name="CATEGORY"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_t_region" name="REGION"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_t_value" name="VALUE"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_t_comment" name="COMMENT"/>
</relational:Table>
<rolapdim:StandardDimension xmi:id="_standarddimension_category" name="Category" hierarchies="_explicithierarchy_category"/>
<relational:Table xmi:id="_table_category" name="CATEGORY">
<feature xsi:type="relational:Column" xmi:id="_column_category_category" name="CATEGORY"/>
<feature xsi:type="relational:Column" xmi:id="_column_category_name" name="NAME"/>
</relational:Table>
<rolapsrc:TableSource xmi:id="_tablesource_region" table="_table_region"/>
<rolapsrc:TableSource xmi:id="_tablesource_category" table="_table_category"/>
<rolaplev:Level xmi:id="_level_category" name="Category" column="_column_category_category" nameColumn="_column_category_name" uniqueMembers="true"/>
<rolaphier:ExplicitHierarchy xmi:id="_explicithierarchy_category" name="Category" allMemberName="All Categories" primaryKey="_column_category_category" source="_tablesource_category" levels="_level_category"/>
<rolapsrc:TableSource xmi:id="_tablesource_fact_t" table="_table_fact_t"/>
<rolaphier:ExplicitHierarchy xmi:id="_explicithierarchy_region" name="Region" allMemberName="All Regions" primaryKey="_column_region_region" source="_tablesource_region" levels="_level_region"/>
<rolapdim:StandardDimension xmi:id="_standarddimension_region" name="Region" hierarchies="_explicithierarchy_region"/>
<rolaplev:Level xmi:id="_level_region" name="Region" column="_column_region_region" nameColumn="_column_region_name" uniqueMembers="true"/>
<relational:Table xmi:id="_table_region" name="REGION">
<feature xsi:type="relational:Column" xmi:id="_column_region_region" name="REGION"/>
<feature xsi:type="relational:Column" xmi:id="_column_region_name" name="NAME"/>
</relational:Table>
</xmi:XMI>Note: This is only a symbolic example. For the exact definition, see the Definition section.
Virtual Cube V
V is a VirtualCube that references both physical cubes. Its dimensionConnectors are the four connectors above (two from each cube, pointing at the same shared dimensions). Its referencedMeasures are Amount, Value and Comments, drawn from their respective underlying cubes.
Clients querying [V] see one logical schema combining both facts. The default measure is Amount.
<rolapcube:VirtualCube xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:rolapcube="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/cube" xmlns:rolapmeas="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/cube/measure" xmi:id="_virtualcube_v" name="V">
<defaultMeasure xsi:type="rolapmeas:SumMeasure" href="_summeasure_amount"/>
<dimensionConnectors href="_dimensionconnector_category_2"/>
<dimensionConnectors href="_dimensionconnector_region_2"/>
<referencedMeasures xsi:type="rolapmeas:SumMeasure" href="_summeasure_amount"/>
<referencedMeasures xsi:type="rolapmeas:SumMeasure" href="_summeasure_value"/>
<referencedMeasures xsi:type="rolapmeas:TextAggMeasure" href="_textaggmeasure_comments"/>
</rolapcube:VirtualCube>Note: This is only a symbolic example. For the exact definition, see the Definition section.
Writeback flow (FACTWB_T)
When the client writes to ([Category].[A], [Region].[N], [Measures].[Comments]) = "hello" through [V] (or directly through [CT]), the runtime resolves the target measure to Comments on cube CT, detects its Datatype.VARCHAR (because TextAggMeasure resolves to ListAggAggregator), and emits exactly one row into FACTWB_T with CATEGORY='A', REGION='N', COMMENT='hello', the cell-key fields, ID = UUID() and USER = sessionUser.
A numeric write to ([Category].[A], [Region].[N], [Measures].[Value]) = 42 follows the same path: the runtime resolves Value on cube CT, detects Datatype.INTEGER from the SumMeasure, allocates the delta across matching rows and emits VALUE = 42 into FACTWB_T with the same cell-key fields plus ID and USER.
No row is written for [Measures].[Amount] even via [V], because Amount's owning cube CN has no writeback table.
<rolapwb:WritebackTable xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:rolapwb="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/database/writeback" xmi:id="_writebacktable_factwb_t" name="FACTWB_T">
<writebackAttribute xmi:id="_writebackattribute_category">
<column href="_column_factwb_t_category"/>
<dimensionConnector href="_dimensionconnector_category"/>
</writebackAttribute>
<writebackAttribute xmi:id="_writebackattribute_region">
<column href="_column_factwb_t_region"/>
<dimensionConnector href="_dimensionconnector_region"/>
</writebackAttribute>
<writebackMeasure xmi:id="_writebackmeasure_value" name="Value">
<column href="_column_factwb_t_value"/>
</writebackMeasure>
<writebackMeasure xmi:id="_writebackmeasure_comments" name="Comments">
<column href="_column_factwb_t_comment"/>
</writebackMeasure>
</rolapwb:WritebackTable>Note: This is only a symbolic example. For the exact definition, see the Definition section.
Definition
This file represents 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:relational="http://www.omg.org/spec/CWM/1.1/resource/relational" xmlns:rolapcat="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/catalog" xmlns:rolapcube="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/cube" xmlns:rolapdim="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/dimension" xmlns:rolaphier="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/dimension/hierarchy" xmlns:rolaplev="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/dimension/hierarchy/level" xmlns:rolapmeas="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/olap/cube/measure" xmlns:rolaprel="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/database/relational" xmlns:rolapsrc="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping/database/source">
<rolapdim:DimensionConnector xmi:id="_dimensionconnector_region_2" foreignKey="_column_fact_n_region" dimension="_standarddimension_region" overrideDimensionName="Region"/>
<rolaprel:OrderedColumn xmi:id="_orderedcolumn_comment" column="_column_fact_t_comment"/>
<rolapdim:DimensionConnector xmi:id="_dimensionconnector_category_2" foreignKey="_column_fact_n_category" dimension="_standarddimension_category" overrideDimensionName="Category"/>
<relational:SQLSimpleType xmi:id="_sqlsimpletype_character_varying" name="CHARACTER VARYING" structuralFeature="_column_factwb_t_category _column_category_category _column_fact_n_category _column_fact_t_category _column_fact_t_comment _column_factwb_t_comment _column_factwb_t_id _column_category_name _column_region_name _column_fact_t_region _column_fact_n_region _column_factwb_t_region _column_region_region _column_factwb_t_user" typeNumber="12"/>
<relational:SQLSimpleType xmi:id="_sqlsimpletype_integer" name="INTEGER" structuralFeature="_column_fact_n_amount _column_fact_t_value _column_factwb_t_value" typeNumber="4"/>
<rolapcat:Catalog xmi:id="_catalog_writeback_virtual_cube" description="Two physical cubes sharing Category + Region dimensions — one read-only (SumMeasure 'Amount'), one with text writeback (TextAggMeasure 'Comments') — combined through a VirtualCube. Demonstrates that writeback lives on the underlying PhysicalCube even when queries flow through the VirtualCube." name="Daanse Tutorial - Writeback Virtual Cube" cubes="_physicalcube_cn _physicalcube_ct _virtualcube_v" dbschemas="_schema"/>
<relational:Schema xmi:id="_schema">
<ownedElement xsi:type="relational:Table" xmi:id="_table_fact_n" name="FACT_N">
<feature xsi:type="relational:Column" xmi:id="_column_fact_n_category" name="CATEGORY" type="_sqlsimpletype_character_varying"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_n_region" name="REGION" type="_sqlsimpletype_character_varying"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_n_amount" name="AMOUNT" type="_sqlsimpletype_integer"/>
</ownedElement>
<ownedElement xsi:type="relational:Table" xmi:id="_table_fact_t" name="FACT_T">
<feature xsi:type="relational:Column" xmi:id="_column_fact_t_category" name="CATEGORY" type="_sqlsimpletype_character_varying"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_t_region" name="REGION" type="_sqlsimpletype_character_varying"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_t_value" name="VALUE" type="_sqlsimpletype_integer"/>
<feature xsi:type="relational:Column" xmi:id="_column_fact_t_comment" name="COMMENT" type="_sqlsimpletype_character_varying"/>
</ownedElement>
<ownedElement xsi:type="relational:Table" xmi:id="_table_category" name="CATEGORY">
<feature xsi:type="relational:Column" xmi:id="_column_category_category" name="CATEGORY" type="_sqlsimpletype_character_varying"/>
<feature xsi:type="relational:Column" xmi:id="_column_category_name" name="NAME" type="_sqlsimpletype_character_varying"/>
</ownedElement>
<ownedElement xsi:type="relational:Table" xmi:id="_table_region" name="REGION">
<feature xsi:type="relational:Column" xmi:id="_column_region_region" name="REGION" type="_sqlsimpletype_character_varying"/>
<feature xsi:type="relational:Column" xmi:id="_column_region_name" name="NAME" type="_sqlsimpletype_character_varying"/>
</ownedElement>
<ownedElement xsi:type="relational:Table" xmi:id="_table_factwb_t" name="FACTWB_T">
<feature xsi:type="relational:Column" xmi:id="_column_factwb_t_category" name="CATEGORY" type="_sqlsimpletype_character_varying"/>
<feature xsi:type="relational:Column" xmi:id="_column_factwb_t_region" name="REGION" type="_sqlsimpletype_character_varying"/>
<feature xsi:type="relational:Column" xmi:id="_column_factwb_t_value" name="VALUE" type="_sqlsimpletype_integer"/>
<feature xsi:type="relational:Column" xmi:id="_column_factwb_t_comment" name="COMMENT" type="_sqlsimpletype_character_varying"/>
<feature xsi:type="relational:Column" xmi:id="_column_factwb_t_id" name="ID" type="_sqlsimpletype_character_varying"/>
<feature xsi:type="relational:Column" xmi:id="_column_factwb_t_user" name="USER" type="_sqlsimpletype_character_varying"/>
</ownedElement>
</relational:Schema>
<rolapsrc:TableSource xmi:id="_tablesource_fact_t" table="_table_fact_t"/>
<rolapsrc:TableSource xmi:id="_tablesource_region" table="_table_region"/>
<rolapsrc:TableSource xmi:id="_tablesource_fact_n" table="_table_fact_n"/>
<rolapsrc:TableSource xmi:id="_tablesource_category" table="_table_category"/>
<rolaplev:Level xmi:id="_level_category" name="Category" column="_column_category_category" nameColumn="_column_category_name" uniqueMembers="true"/>
<rolaplev:Level xmi:id="_level_region" name="Region" column="_column_region_region" nameColumn="_column_region_name" uniqueMembers="true"/>
<rolaphier:ExplicitHierarchy xmi:id="_explicithierarchy_category" name="Category" allMemberName="All Categories" primaryKey="_column_category_category" source="_tablesource_category" levels="_level_category"/>
<rolaphier:ExplicitHierarchy xmi:id="_explicithierarchy_region" name="Region" allMemberName="All Regions" primaryKey="_column_region_region" source="_tablesource_region" levels="_level_region"/>
<rolapdim:StandardDimension xmi:id="_standarddimension_category" name="Category" hierarchies="_explicithierarchy_category"/>
<rolapdim:StandardDimension xmi:id="_standarddimension_region" name="Region" hierarchies="_explicithierarchy_region"/>
<rolapcube:PhysicalCube xmi:id="_physicalcube_cn" name="CN" source="_tablesource_fact_n">
<dimensionConnectors xmi:id="_dimensionconnector_category_1" foreignKey="_column_fact_n_category" dimension="_standarddimension_category" overrideDimensionName="Category"/>
<dimensionConnectors xmi:id="_dimensionconnector_region_1" foreignKey="_column_fact_n_region" dimension="_standarddimension_region" overrideDimensionName="Region"/>
<measureGroups xmi:id="_measuregroup_1">
<measures xsi:type="rolapmeas:SumMeasure" xmi:id="_summeasure_amount" name="Amount" formatString="#,##0" column="_column_fact_n_amount"/>
</measureGroups>
</rolapcube:PhysicalCube>
<rolapcube:PhysicalCube xmi:id="_physicalcube_ct" name="CT" source="_tablesource_fact_t">
<dimensionConnectors xmi:id="_dimensionconnector_category" foreignKey="_column_fact_t_category" dimension="_standarddimension_category" overrideDimensionName="Category"/>
<dimensionConnectors xmi:id="_dimensionconnector_region" foreignKey="_column_fact_t_region" dimension="_standarddimension_region" overrideDimensionName="Region"/>
<writebackTable xmi:id="_writebacktable_factwb_t" name="FACTWB_T">
<writebackAttribute xmi:id="_writebackattribute_category" column="_column_factwb_t_category" dimensionConnector="_dimensionconnector_category"/>
<writebackAttribute xmi:id="_writebackattribute_region" column="_column_factwb_t_region" dimensionConnector="_dimensionconnector_region"/>
<writebackMeasure xmi:id="_writebackmeasure_value" column="_column_factwb_t_value" name="Value"/>
<writebackMeasure xmi:id="_writebackmeasure_comments" column="_column_factwb_t_comment" name="Comments"/>
</writebackTable>
<measureGroups xmi:id="_measuregroup">
<measures xsi:type="rolapmeas:SumMeasure" xmi:id="_summeasure_value" name="Value" formatString="#,##0" column="_column_fact_t_value"/>
<measures xsi:type="rolapmeas:TextAggMeasure" xmi:id="_textaggmeasure_comments" name="Comments" column="_column_fact_t_comment" orderByColumns="_orderedcolumn_comment" separator=" | "/>
</measureGroups>
</rolapcube:PhysicalCube>
<rolapcube:VirtualCube xmi:id="_virtualcube_v" name="V" defaultMeasure="_summeasure_amount" dimensionConnectors="_dimensionconnector_category_2 _dimensionconnector_region_2" referencedMeasures="_summeasure_amount _summeasure_value _textaggmeasure_comments"/>
</xmi:XMI>Tutorial Zip
This file contains the data-tables as csv and the mapping as xmi file.