我有一个小型的销售数据仓库。这里我有销售发票的事实表和维度,如客户,日期,时间,销售地域,产品代码。
事实表:Sales ->
Invoice Date, Customer code, Product Code, Sales Geo Code, Billing qty, Amount, Tax, Total Amount对于Sales Geo dimension ->
Sales Geo Code, City Name, Regional Code, Zone Code, Regional Manager Code, Zonal Manager code 我在如何联系我的销售人员,如区域经理和区域经理等方面感到困惑。
区域经理领导多个城市的一个区域,区域经理领导多个区域。
有时我们改变区域或区域,他们得到提升,他们离开等等。
如何创建维度,并将销售团队与销售事实联系起来,以获得正确的销售报告。
问候
发布于 2020-10-30 19:20:18
我能想到几个选项:
角色
如果除了在Sales Geo的上下文中,您永远不想将Manager信息链接到事实,那么选项1可能更有意义-因为使用此事实表的查询中的潜在联接较少。
选项2更灵活,因为您可以将经理信息与事实相关联,而无需使用Sales Geo
选项3是最灵活的,但也可能给出最差的查询性能(对于任何需要两种类型的管理器的查询),而且区域管理器和区域管理器之间的唯一联系是通过事实;维度中没有层次结构信息。因此,选项3是我最不可能选择的选项
发布于 2020-10-30 21:21:20
对事实数据表中的区域经理代码和区域经理代码进行非规范化。
因此,基本上您将在每个事实行中存储Sales Geo Code以及在销售时两个经理角色的当前分配(在加载记录时更精确)。
此模型允许这两种类型的报告使用
在事务处理时分配的
现在,您的设置只允许第二种类型的报告,这在经理经常被重新分配的情况下可能是次优的。
如果您不希望对事实表进行非规范化,您可以随时将Sales Geo维度切换为SCDType2,这将引入维度和经理分配的历史视图。
您不仅需要使用Sales Geo Code从事实表连接到Sales Geo维度,还需要考虑事务日期……
Invoice_Date between sales_geo.validfrom_date and sales_geo.validto_date ..。以获取在事务处理时分配的经理。
该决策在存储和维护一致性与更复杂的连接和维护另一端的维度历史之间具有典型的折衷。
https://stackoverflow.com/questions/64606496
复制相似问题