我正在尝试创建一个在Saiku中使用的Mondrian架构。架构的其余部分正常工作,但主过滤器不正常。 我已经尝试了几种方法来完成这项工作,但到目前为止,我总是得到重复。
这个问题只能与我们称之为fact_table
和user_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重复。有没有办法让这项工作?
答案 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_table
和user_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以了解有关星型模式概念和代理键的更多信息。