2
votes

I'm running Saiku Community Edition 3.0 with a simple schema: 3 shared dimensions and two cubes like this:

<?xml version="1.0"?>
<Schema name="Schema1" metamodelVersion='4.0'>
    <PhysicalSchema>
        <Table name='dim_date' />
        <Table name='dim_time2' />
        <Table name='dim_user' />
        <Table name='fact_action' />
        <Table name='fact_feedback' />
    </PhysicalSchema>

    <Dimension name='Date' table='dim_date' key='Date Id' type='TIME'>...</Dimension>
    <Dimension name='Time' table='dim_time2' key='Time Id' type='TIME'>...</Dimension>
    <Dimension name='User' table='dim_user' key='User Id'>...</Dimension>

    <Cube name='Actions'>
        <Dimensions>
            <Dimension source='Date' />
            <Dimension source='Time' />
            <Dimension source='User' name='User1' />
            <Dimension source='User' name='User2' />
            <Dimension source='Comment' />
        </Dimensions>

        <CalculatedMembers>
            <CalculatedMember name='Action count' dimension='Measures' formula='Measures.[Type1 action count] + Measures.[Type2 action count] + Measures.[Type3 action count]' aggregator='sum'>
                <CalculatedMemberProperty name='FORMAT_STRING' value='#,###'/>
                <CalculatedMemberProperty name='DATATYPE' value='Integer' />
            </CalculatedMember>
        </CalculatedMembers>

        <MeasureGroups>
            <MeasureGroup name='Actions' table='fact_action'>
                <Measures>
                    <Measure name='Type1 action count' column='action_type1' aggregator='sum' formatString='#,###' />
                    <Measure name='Type2 action count' column='action_type2' aggregator='sum' formatString='#,###' />
                    <Measure name='Type3 action count' column='action_type3' aggregator='sum' formatString='#,###' />
                </Measures>
                <DimensionLinks>
                    <ForeignKeyLink dimension='Date' foreignKeyColumn='date_tk' />
                    <ForeignKeyLink dimension='Time' foreignKeyColumn='time2_tk' />
                    <ForeignKeyLink dimension='User1' foreignKeyColumn='user1_tk' />
                    <ForeignKeyLink dimension='User2' foreignKeyColumn='user2_tk' />
                </DimensionLinks>
            </MeasureGroup>
        </MeasureGroups>
    </Cube>

    <Cube name='Feedback'>
        <Dimensions>
            <Dimension source='Date' />
            <Dimension source='Time' />
            <Dimension source='User' name='User1' />
            <Dimension source='User' name='User2' />
        </Dimensions>

        <CalculatedMembers>
            <CalculatedMember name='Feedback count' dimension='Measures' formula='Measures.[Type1 feedback count] + Measures.[Type2 feedback count] + Measures.[Type3 feedback count] + Measures.[Type4 feedback count]' aggregator='sum'>
                <CalculatedMemberProperty name='FORMAT_STRING' value='#,###'/>
                <CalculatedMemberProperty name='DATATYPE' value='Integer' />
            </CalculatedMember>
        </CalculatedMembers>

        <MeasureGroups>
            <MeasureGroup name='Feedback' table='fact_feedback'>
                <Measures>
                    <Measure name='Type1 feedback count' column='type1_count' aggregator='sum' formatString='#,###' />
                    <Measure name='Type2 feedback count' column='type2_count' aggregator='sum' formatString='#,###' />
                    <Measure name='Type3 feedback count' column='type3_count' aggregator='sum' formatString='#,###' />
                    <Measure name='Type4 feedback count' column='type4_count' aggregator='sum' formatString='#,###' />
                </Measures>
                <DimensionLinks>
                    <ForeignKeyLink dimension='Date' foreignKeyColumn='date_tk' />
                    <ForeignKeyLink dimension='Time' foreignKeyColumn='time2_tk' />
                    <ForeignKeyLink dimension='User1' foreignKeyColumn='user1_tk' />
                    <ForeignKeyLink dimension='User2' foreignKeyColumn='user2_tk' />
                </DimensionLinks>
            </MeasureGroup>
        </MeasureGroups>
    </Cube>
</Schema>

This works fine. I see both cubes in Saiku and they work as expected. Now I need third, virtual cube that combines metrics from the two above. I've tried many different ways but I've failed to see the virtual cube in saiku. The weird thing is that usually when you upload a schema with wrong syntax you would not see ANY cube from it. But I still see the two cubes defined above but not the third, virtual cube.

I've tried defining it like below, just before closing </Schema> tag:

<VirtualCube name="Performance" enabled="true">
    <CubeUsages>
        <CubeUsage cubeName="Actions" />
        <CubeUsage cubeName="Feedback" />
    </CubeUsages>
    <VirtualCubeDimension name="Date" />
    <VirtualCubeMeasure cubeName="Feedback" name="[Measures].[Type1 feedback count]" visible="true" />
    <VirtualCubeMeasure cubeName="Actions" name="[Measures].[Type1 action count]" visible="true" />
    <CalculatedMember name="Feedback per Actions" formula="[Measures].[Type1 feedback count] / [Measures].[Type1 action count]" dimension="Measures">
    </CalculatedMember>
</VirtualCube>

What am I doing wrong that the virtual cube is not visible in Saiku?

2

2 Answers

1
votes

In Saiku 3 we use Mondrian 4, which uses a different schema definition and as such negates the need for virtual cubes(thank god), anyway, to get Mondrian 3 schema's working it does a bunch of on the fly changes when loading the schema to convert v3 to v4. My guess would be it can't process virtual cube definitions because Mondrian 4 doesn't use them, and as such skips it.

0
votes

Your schema follows Mondrian 4 rules as written in a metamodelVersion of the schema element <Schema name="Schema1" metamodelVersion='4.0'>. There are many differences between Mondrian 3 and Mondrian 4 schemes. The main is a usage of MeasureGroups (since Mondrian 4) instead of VirtualCubes (Mondrian 3).

You cannot use VirtualCube within Mondrian 4 anymore. To combine the metrics from the two cubes use the MeasureGroups.

Unfortunately, there is no official Mondrian 4 documentation by now. But this documentation stub seems as a Mondrian 4 documentation candidate. Read those chapters:

  • 2.1 Structure of a Schema
  • 3. Logical model

It doesn't seem to be actual from 4 chapter on. You can see a lot of TODOs. Completely ignore the section 5.1 Virtual cubes.

Compare Mondrian 4 documentation candidate to Mondrian 3 documentation to see the differences. Focus mainly on schema XML structure from the beginning of chapter 2.