使用Mondrian按组过滤时重复

时间:2015-03-09 11:18:43

标签: pentaho mondrian star-schema

我正在尝试创建一个在Saiku中使用的Mondrian架构。架构的其余部分正常工作,但主过滤器不正常。 我已经尝试了几种方法来完成这项工作,但到目前为止,我总是得到重复。

这个问题只能与我们称之为fact_tableuser_group的两个表重复。 fact_table包含用户ID和度量,例如:

user_id|amount
1      |10
2      |15
3      |17

user_group表包含user_id及其所属的组。如果用户属于多个组,则它将有多行

user_id|group_id
1      |100
1      |200
2      |100

每次我对组100和200运行查询时,都会收到以下错误数据:

user_id|amount
1      |20
2      |15

请注意,用户1的金额是重复的,因为它属于两个组。问题是维度不期望由id重复。有没有办法让这项工作?

1 个答案:

答案 0 :(得分:0)

您的数据仓库架构似乎不符合star schema规则。您的维度表 user_group应仅包含一个密钥列,其中包含唯一值(user_id列不足)。

更多可能的解决方案发挥作用:

1)将group_id列添加到fact_table(导致重复的金额记录)。

事实表:

user_id | group_id | amount
1       | 100      | 10
1       | 200      | 10
2       | 100      | 15
3       | #null    | 17

2)将fact_tableuser_group表视为维度,并在其顶部使用新的事实表。

事实表:

new_fact_key | user_id | group_id 
1            | 1       | 100      
2            | 1       | 200      
3            | 2       | 100      
4            | 3       | #null  

第一维度表:

user_id|amount
1      |10
2      |15
3      |17  

第二维表:

group_id
100
200
100       

您可以使用代理键替换#null值。我建议阅读本书关于数据仓库建模The Data Warehouse Toolkit, 3rd Edition以了解有关星型模式概念和代理键的更多信息。