星型模式 - 统一来自不同来源的不同结构的数据
Star Schema - Unify data with varying structure from different sources
我目前正在为衡量在线产品性能的报告数据库设计星型模式。挑战在于,我收到的信息原则上衡量的是相同的事实(访问、购买)并且具有相同的维度(用户性别、用户年龄、日期),但根据来源的不同粒度不同,例如,给定总计共 10 次访问:
- 来源 A returns 每天一行,格式为:
- 访问次数、购买次数、性别、年龄范围、日期(总访问次数 = 15)
- 来源 B returns 一天两行,因为它不允许性别和年龄的组合:
- 访问次数、购买次数、性别、天数(总访问次数 = 10)
- 访问次数、购买次数、年龄范围、天数(总访问次数 = 10)
问题是,如果我将它们存储在同一个事实中 table,我将在应用聚合函数时得到不正确的值:
Day
Visits
Age
Gender
Source
19/04/2022
5
18-24
Male
A
19/04/2022
10
18-24
Female
A
19/04/2022
2
NULL
Male
B
19/04/2022
8
NULL
Female
B
19/04/2022
10
18-24
NULL
B
(来源 B 的访问列总和为 20,尽管我们对该来源只有 10 次访问,但由于数据结构不同,它们只是显示为两倍)
对于维度和事实大致相同但原始数据粒度不同的情况,是否有最佳实践?
Is there a best practice for cases where dimensions and facts are generally the same, but the raw data granularity is different?
您通常只能以与所有来源兼容的粒度呈现组合数据,例如 (Day)、(Age,Day) 或 (Gender,Day)。
或者,您可以“分配”源 B 数据,比如将当天的性别划分应用到每个年龄组。总计有效,但向下钻取没有意义。
我目前正在为衡量在线产品性能的报告数据库设计星型模式。挑战在于,我收到的信息原则上衡量的是相同的事实(访问、购买)并且具有相同的维度(用户性别、用户年龄、日期),但根据来源的不同粒度不同,例如,给定总计共 10 次访问:
- 来源 A returns 每天一行,格式为:
- 访问次数、购买次数、性别、年龄范围、日期(总访问次数 = 15)
- 来源 B returns 一天两行,因为它不允许性别和年龄的组合:
- 访问次数、购买次数、性别、天数(总访问次数 = 10)
- 访问次数、购买次数、年龄范围、天数(总访问次数 = 10)
问题是,如果我将它们存储在同一个事实中 table,我将在应用聚合函数时得到不正确的值:
Day | Visits | Age | Gender | Source |
---|---|---|---|---|
19/04/2022 | 5 | 18-24 | Male | A |
19/04/2022 | 10 | 18-24 | Female | A |
19/04/2022 | 2 | NULL | Male | B |
19/04/2022 | 8 | NULL | Female | B |
19/04/2022 | 10 | 18-24 | NULL | B |
(来源 B 的访问列总和为 20,尽管我们对该来源只有 10 次访问,但由于数据结构不同,它们只是显示为两倍)
对于维度和事实大致相同但原始数据粒度不同的情况,是否有最佳实践?
Is there a best practice for cases where dimensions and facts are generally the same, but the raw data granularity is different?
您通常只能以与所有来源兼容的粒度呈现组合数据,例如 (Day)、(Age,Day) 或 (Gender,Day)。
或者,您可以“分配”源 B 数据,比如将当天的性别划分应用到每个年龄组。总计有效,但向下钻取没有意义。