2014-08-27 49 views
1

假设我们有一个事实表“bi_slots”,其中有字段(id,region_id,city_id)。实际上有更多的领域,但他们在这里没有兴趣。在Mondrian/Saiku中创建来自不同表格名称的层次结构

还有'地区'表中有(id,name)字段和'cities'表(id,name,region_id)字段。

我需要的是为“bi_slots”的多维数据集制作维度,其中应用的是Region->Сity层次结构。而且,我需要从他们各自的表格中抓取地区和城市名称。

所以,外形尺寸是这样的:

<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"/> 

被放在这个样子,这让蒙德里安不显示这个立方体可言,但是当我从我的维度中删除CityLevel,我得到了一个完美的地区过滤。

任何帮助都会比欢迎,我们真的没有想法在这里。

+0

想要在多维数据集视图中使用SQL实现什么?当有非常复杂的数据时,我可能会使用它两次?你真的可以简化从雪花到星型模式的事情吗?在ETL过程中使表地址(ID,City_Name,ID_Region,Region_Name)。将区域视为最高级别。当多维数据集设置中出现错误时,Saiku不显示多维数据集,您可以检出日志文件,或尝试在Pentaho Schema Workbench中修改xml。 – fenix 2014-08-27 19:55:20

+0

视图中的SQL是无关紧要的,是一个只关心创建日期而不关注日期和时间的另一维度的简单转换。所以最好的做法是创建一个帮助表? – 2014-08-27 20:47:29

+0

在少数情况下,雪花很有用:当您无法构建StarSchema时,如果存在多方关系,那么当您的尺寸为高基数时。在你的情况下,最好阅读日志文件并检查:http://mondrian.pentaho.com/documentation/schema.php#Star_schemas – fenix 2014-08-27 20:56:20

回答

-1

不能像这样添加来自不同表格的列。

首先,正如在帖子的评论中指出的那样,您应该使用星型模式。

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

请参阅documentation的第4章。