使用来自不同表的名称在Mondrian / Saiku中创建层次结构

时间:2014-08-27 19:30:38

标签: mondrian saiku

假设我们有一个事实表“bi_slots”,其中有字段(id,region_id,city_id)。事实上,有更多的领域,但这里没有兴趣。

还有'regions'表,其中有(id,name)字段和'cities'表,其中包含(id,name,region_id)字段。

我需要的是为“bi_slots”的多维数据集创建一个维度,其中应用的是Region->Сity层次结构。而且,我需要从各自的表中获取区域和城市名称。

因此,Dimension看起来像:

<Dimension name="AddressDimension" caption="Address">
    <Hierarchy name="AddressHierarchy" hasAll="true" primaryKey="id" caption="Region" allMemberCaption="Regions">
      <Table name="regions"/>  
      <Level table="regions" column="id" nameColumn="name" name="RegionLevel" uniqueMembers="true" type="String" caption="Region"/>
      <Level table="cities" column="id" nameColumn="name" name="CityLevel" uniqueMembers="true" type="String" caption="City"/>      
    </Hierarchy>
</Dimension>

具有此dimensionUsage的多维数据集的声明

<Cube name="SlotsCube" caption="Slot Cube">
   <View alias="bi_slots">
     <SQL><![CDATA[
       select *, date_trunc('day', created_at) as date_created_at from bi_slots
     ]]></SQL>
   </View>

<DimensionUsage name="AddressDimension" source="AddressDimension" foreignKey="region_id"/>

这样说,它让Mondrian根本不显示这个立方体,但是当我从我的尺寸中删除CityLevel时,我会得到一个完美的区域过滤。

任何帮助都会受到欢迎,我们真的没有想法。

1 个答案:

答案 0 :(得分:-1)

您无法像这样添加来自不同表的列。

首先,正如对帖子的评论中所指出的,你应该使用星型模式。

但是,如果你不能或不想,你可以创建连接,指定涉及的各种表以及如何加入。只有在定义它之后,您才能在同一维度的不同表中引用列。

documentation的第4章。