我刚接触建模星型模式,刚刚阅读Data Warehouse Toolkit。
我的业务流程让客户和非客户与我们的一些员工召开电话会议。
我的事实表,称之为“受众”,将包含一个参与者与呼叫连接的时间长度,以及此人与呼叫连接的成本。谷物是“与电话会议的个人联系”。
我是否应该使用我的一致客户端维度并以这种方式创建非客户端维度(对于尚未成为客户的调用者)(省略不属于此问题的维度):
First potential model http://i50.tinypic.com/1416xr7.png
或者以这种方式拥有与一致客户维度相关的不符合的出席维度是否可行/更好:
Second potential model http://i47.tinypic.com/2ccm9tg.png
或者是否有更好/标准的机制来建模像这样的业务流程?
修改
如何使用上面的模型2,但在客户端维度表和参与维度之上创建一个视图,使其看起来只有一个维度?
这是Damir在下面回答的可接受的替代方案吗?
答案 0 :(得分:3)
无需将客户端拆分为两个表(维度)。只需将所有客户,活动和潜在客户放入同一维度表中即可。 然后,您可以引入一个IsActive属性(列)来区分付费客户和潜在客户。您迟早会使用数据挖掘工具来了解有关客户的更多信息,以及愿意为您的服务付费的人与非服务人员的区别。为了使算法起作用,您必须为两组人提供数据 - 付费人员和未付费人员。总而言之,潜在客户与付费客户属于同一桌面。
有了这个,您可以使用您的模型No 1.确保事实表中的度量有意义。例如,如果call_id = 123有10人参与,那么
sum(cost_of_connection)
from factAudience
where call_id = 123;
应该返回通话的总费用,而不是无意义的费用 - 比如实际费用的10倍。
修改强>
“付费客户”和“潜在客户”都是客户类型,因此属于同一维度表 - dimClient。在DW的某个地方,有一个与DimSale有FK的factSale(或类似)。即使您没有dimClient中的列来区分付费和潜在客户 - 您仍然可以通过加入factSale和dimClient来获得付费客户。
“谁是客户?”在组织中引入DW时,这是一个常见的争论。 为了能够分析客户获取,保留,转换等,前景与付费客户具有相同的待遇 - 至少在DW中。请记住,获取和创建新客户是(几乎)任何CEO的首选。
答案 1 :(得分:2)
我会选择第二种方式:它会根据自己的专用维度对与会者进行建模,同时允许您通过该维度中的属性公开其客户端(或其他方式),这可能是您希望的方式在现实生活中深入研究(“向我展示所有与会者”,然后是“现在哪些是客户”)。
在您的客户端维度中,我会为所有与会者填充client_id,与参与者不是客户的“未知”元素匹配。
这里有一个很好的讨论:
答案 2 :(得分:0)
没什么区别。第二个版本可能更正确,但你的olap系统是否支持这个?
答案 3 :(得分:0)
对我来说,第二个看起来像“雪花模式”。从维基百科文章开始,查看雪花模式。你会看到星与雪花之间的几个比较。