假设我们有一个事实表“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时,我会得到一个完美的区域过滤。
任何帮助都会受到欢迎,我们真的没有想法。
答案 0 :(得分:-1)
您无法像这样添加来自不同表的列。
首先,正如对帖子的评论中所指出的,你应该使用星型模式。
但是,如果你不能或不想,你可以创建连接,指定涉及的各种表以及如何加入。只有在定义它之后,您才能在同一维度的不同表中引用列。
见documentation的第4章。