多个客户维度

时间:2019-03-09 04:07:21

标签: sql-server data-warehouse

我是dwh的新手,正在为我的公司创建数据仓库。我们有一个要创建的客户维度。但是财务团队客户列表ID和名称与CRM列表ID和名称不同。 我们创建了一个映射表,但有时对于相同的财务ID,我们会有多个crmid。我该如何处理...我必须创建两个客户维度

   CRM        Name
  CRMID1     XXXX
  CRMID2     YYYYY
  CRMID3     ZZZ

映射表

   CRMID    FINID
   CRMID1   FINID1
   CRMID2   FINID1
   CRMID3   FINID2
   CRMID4   FINID3

FinTable

   FINID1   XXXX
   FINID2   YYYY
   FINID3   ZZZ

创建维度并连接这三个表

最终尺寸

  ClientKey CRMID   FINID
    1      CRMID1   FINID1
    2      CRMID2   FINID1
    3      CRMID3   FINID2
    4      CRMID4   FINID3

当我将维度表与事实表结合起来并在事实表中添加ClientKey时,这会导致重复。

我应该为客户端创建二维还是我可以在一个维度中处理二维的其他方式?

3 个答案:

答案 0 :(得分:0)

如果您的映射始终是1:1或M:1 CRM客户:财务客户,那么您不必创建两个客户维度。但是涉及的每个人都必须了解,客户有多个级别/视图,这会使事情变得复杂。在营销客户/购买决策客户和计费客户之间存在差异是一种常见的情况。这些客户属性在主数据管理和数据仓库中组合在一起,形成一个一致的组合视图,称为一致维度。

在报告系统/数据集市中,您只需定义映射表,并最终在CRM客户ID的粒度级别定义单个客户维度。只需将FINID视为客户的非唯一属性

您可能最终不得不确定“父母客户”,以使财务系统粒度上的事实不会在具有匹配FINID的所有CRMID中重复数据。如果可以标记父客户(每个FinID一个CRMID),则可以将所有财务事实归属于该父客户CRMID,并将所有营销/销售事实归属于任何适用的CRMID。

答案 1 :(得分:0)

作为数据仓库,您 必须 具有唯一的客户ID。

涉及您的操作系统的解决方案是最佳(即主数据管理),但是如果很难(通常是这样)来驱动,则至少要在DWH客户中创建唯一的客户ID尺寸。

CRMID和FINID都是“客户”维度中客户的属性,无论它们之间的当前关系如何(1:1或1:M甚至M:M)。

mmarie提到您的唯一客户ID 是业务密钥的组合,但我 strong 建议创建单独的代理密钥,因为Ralph Kimball表示生产密钥不稳定\易失。

另一个原因是,即使客户没有,您的源系统也会随时间变化(如您提到的那样),因此您需要能够在多个系统和时段内跟踪和报告客户。

假设您要使用SCD类型2 –您将需要以下内容:

  • PK(代理,时变)
  • CustomerID(代理,永久,DWH生成,每个客户唯一)
  • CRMID(CRM业务密钥)
  • FINID(业务密钥)
  • ATTRIBUTE_1
  • ATTRIBUTE_2
  • START_DATE
  • END_DATE

答案 2 :(得分:0)

在中央DIM_CUSTOMERS中映射所有描述的关系没有问题,请参见以下示例中的最后2条记录

  1. CRMID FINID
  2. CRMID1 FINID1
  3. CRMID2 FINID1
  4. CRMID3 FINID2
  5. CRMID4 -1
  6. -1 FINID2

在我看来,您的问题更多是由于推动公司不同部门之间的合作及其在DWH项目中的普遍挑战

DWH的关键工作是集成组织的各个孤岛,并且不同部门需要时间来了解它们如何相互影响。

鼓励\推动您的财务团队和CRM所有者在它们之间进行数据同步(在给他们一个有关问题的提示之后)的最佳方法只是报告\反映垃圾数据(客户不是新CRM中已存在或未按财务映射)。

这将是

  1. 在两个播放器上施加管理压力以同步实体–在这种情况下,您只需要更新维度中的-1键,或者
  2. 反映出问题并不像您填写的那么重要-在这种情况下您的工作已经完成