Pentaho 使用Mondrian按组筛选时重复

Pentaho 使用Mondrian按组筛选时重复,pentaho,mondrian,star-schema,Pentaho,Mondrian,Star Schema,我正在尝试创建一个蒙德里安模式,用于塞库语。架构的其余部分工作正常,但主筛选器不正常。 我试过几种方法来实现这一点,但到目前为止,我总是得到重复的 只有两个表可以重复这个问题,我们称之为fact\u table和user\u group。fact\u表包含用户id和度量值,例如: user_id|amount 1 |10 2 |15 3 |17 user\u group表包含user\u id及其所属的组。如果一个用户属于多个组,它将有多行 user_id|gro

我正在尝试创建一个蒙德里安模式,用于塞库语。架构的其余部分工作正常,但主筛选器不正常。 我试过几种方法来实现这一点,但到目前为止,我总是得到重复的

只有两个表可以重复这个问题,我们称之为
fact\u table
user\u group
fact\u表
包含用户id和度量值,例如:

user_id|amount
1      |10
2      |15
3      |17
user\u group
表包含
user\u id
及其所属的组。如果一个用户属于多个组,它将有多行

user_id|group_id
1      |100
1      |200
2      |100
每次对组100和200运行查询时,我都会得到以下不正确的数据:

user_id|amount
1      |20
2      |15

请注意,用户1的金额是重复的,因为它属于两个组。问题是维度不希望id重复。有什么方法可以做到这一点吗?

您的数据仓库架构似乎没有遵循规则。维度表
user\u group
应仅包含一个具有唯一值的键列(
user\u id
列不足)

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

1)将
组id
列添加到
事实表
(导致重复的金额记录)。

事实表:

<强> 2)考虑<代码> FaseTABLE < /COD>和 USELGROUP 表作为维度,并在它们上面加上一个新的事实表。< /强>

事实表:

第一维度表:

第二维度表:


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

非常感谢您的回答。我还需要做一些测试来确保它能正常工作。但应该有其他方法不涉及将维度数据移动到事实表。
user_id | group_id | amount
1       | 100      | 10
1       | 200      | 10
2       | 100      | 15
3       | #null    | 17
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