Sql server 销售目标(又名预算)事实,具有模糊层次结构,其中父项为';s度量值小于它的和';儿童';s措施

Sql server 销售目标(又名预算)事实,具有模糊层次结构,其中父项为';s度量值小于它的和';儿童';s措施,sql-server,database-design,data-modeling,data-warehouse,fact,Sql Server,Database Design,Data Modeling,Data Warehouse,Fact,我的组织需要在SQL Server中构建一个数据仓库(最终在SSAS中构建一个多维数据集),其中一个事实表是销售目标/预算数据 到目前为止,我只处理了与此相反的问题,即孩子的价值总和小于父母的价值总和 这里的问题是如何对事实表建模,其中子项的值之和是父项值之和的n倍 下表是我描述问题的最佳方式 每位员工都有一个销售目标/预算金额,如下所示: EmployeeId | EmployeeBudgetAmount$ -----------+---------------------- Emp1

我的组织需要在SQL Server中构建一个数据仓库(最终在SSAS中构建一个多维数据集),其中一个事实表是销售目标/预算数据

到目前为止,我只处理了与此相反的问题,即孩子的价值总和小于父母的价值总和

这里的问题是如何对事实表建模,其中子项的值之和是父项值之和的n倍

下表是我描述问题的最佳方式

每位员工都有一个销售目标/预算金额,如下所示:

EmployeeId | EmployeeBudgetAmount$
-----------+----------------------
Emp1       |   100
Emp2       |   200
Emp3       |   500
EmployeeId | PracticeTypeId | PracticeId | EmployeePracticeBudgetAmount$
Emp1 | PracType1 | Prac1 | 20
Emp1 | PracType1 | Prac2 | 80
Emp1 | PracType2 | Prac10 | 40
Emp1 | PracType2 | Prac20 | 60
Emp1 | PracType3 | Prac100 | 30
Emp1 | PracType3 | Prac200 | 70

Emp2 | PracType1 | Prac1 | 160
Emp2 | PracType1 | Prac2 | 40
Emp2 | PracType2 | Prac10 | 80
Emp2 | PracType2 | Prac20 | 120
Emp2 | PracType3 | Prac100 | 140
Emp2 | PracType3 | Prac200 | 60

Emp3 | PracType1 | Prac1 | 0
Emp3 | PracType1 | Prac2 | 500
Emp3 | PracType2 | Prac10 | 100
Emp3 | PracType2 | Prac20 | 400
Emp3 | PracType3 | Prac100 | 200
Emp3 | PracType3 | Prac200 | 300
上述员工层面的预算值分为以下几种做法(相当于法律惯例的组织术语,如移民、公司等):

EmployeeId | EmployeeBudgetAmount$
-----------+----------------------
Emp1       |   100
Emp2       |   200
Emp3       |   500
EmployeeId | PracticeTypeId | PracticeId | EmployeePracticeBudgetAmount$
Emp1 | PracType1 | Prac1 | 20
Emp1 | PracType1 | Prac2 | 80
Emp1 | PracType2 | Prac10 | 40
Emp1 | PracType2 | Prac20 | 60
Emp1 | PracType3 | Prac100 | 30
Emp1 | PracType3 | Prac200 | 70

Emp2 | PracType1 | Prac1 | 160
Emp2 | PracType1 | Prac2 | 40
Emp2 | PracType2 | Prac10 | 80
Emp2 | PracType2 | Prac20 | 120
Emp2 | PracType3 | Prac100 | 140
Emp2 | PracType3 | Prac200 | 60

Emp3 | PracType1 | Prac1 | 0
Emp3 | PracType1 | Prac2 | 500
Emp3 | PracType2 | Prac10 | 100
Emp3 | PracType2 | Prac20 | 400
Emp3 | PracType3 | Prac100 | 200
Emp3 | PracType3 | Prac200 | 300
员工的总预算在该员工的每种实践类型的预算中都得到满足

Emp1's total budget = SUM(Emp1's practice budget) for PracType1
Emp1's total budget = SUM(Emp1's practice budget) for PracType2
Emp1's total budget = SUM(Emp1's practice budget) for PracType3
……等等

如果实践预算表(上面的第二个表)用于事实表,则将员工的所有EmployeePracticeBudgetAmount相加,得出的预算金额为员工预算的3倍(可用实践类型的数量)

Emp1's total budget = SUM(Emp1's practice budget) for PracType1
Emp1's total budget = SUM(Emp1's practice budget) for PracType2
Emp1's total budget = SUM(Emp1's practice budget) for PracType3
关于如何将其建模为事实表,有什么建议/想法吗

提前谢谢


注意:在员工级别之上还有其他维度,如会计月和会计年度,需要在这些维度上汇总预算金额。出于简洁的原因,我没有在上面的问题中介绍这些内容。

当你将员工的预算分为三次,每一次都是三种实践类型时,如果你只按员工分组,你(如你所说)将得到三倍的总预算

Emp1's total budget = SUM(Emp1's practice budget) for PracType1
Emp1's total budget = SUM(Emp1's practice budget) for PracType2
Emp1's total budget = SUM(Emp1's practice budget) for PracType3
如果一个事实表是像第二个表一样创建的,那么预算将是“半累加”的,因为跨实践类型求和是没有意义的

您可以通过教育用户来处理它(确保人们在构建查询/报告时了解这一点)。对于SSA,EnterpriseEdition具有定义半累加度量的能力,您可以通过更多的工作(和谷歌搜索)来解决标准版的这一问题

如果您确实希望员工预算汇总时不会出现这种复杂情况,您可以为其设置单独的事实表,但这听起来是可选的


因此,这将是一个用于员工预算的事实表,一个用于实践预算,一个用于员工维度,一个用于实践维度(合并实践类型)。

如果您的
EmployeeBudgetAmount$
值实际上是每个实践类型的预算金额,那么您正处于需要的位置。否则,情况并非如此。然后,您只需要更改如何将预算值分布到第二个表中的所有记录上。如何做到这一点完全取决于你自己。我遗漏了什么吗?@R.Richards,谢谢你的回复。EmployeeBudgetAmount$是每个员工的预算金额,也是每个实践类型的预算金额。但是,正如我在问题中所说的,如果我使用EmployeePracticeBudgetAmount$中的第二个表作为事实表,那么在员工级别执行求和会显示预算比员工的预算更多。例如,根据第二个表,Emp1的预算为300,而不是100(100是正确的金额)。编辑:另外,第一个和第二个表都是实际的OLTP表,与数据仓库本身无关。
EmployeeBudgetAmount$
是每个员工的预算金额,也是每个实践类型的预算金额?怎么可能两者兼而有之?现在是晚一点。如果要获得与第一个表中列出的数字相同的数字,请按第二个表中的
EmployeeId
PracticeTypeId
进行分组。Emp1每个练习类型有100个。你的最终目标是什么?检查每个员工的每个机构的预算是否小于或等于其允许的预算?防止人们输入超出预算的内容?还有别的吗?