我的任务是为客户创建一个数据仓库。所涉及的表格并没有真正遵循传统的例子(产品/订单),所以我需要一些帮助才能开始。客户本质上是案件的处理中心(类似于法律案件)。每天,新案例都会在“案例”表格下输入数据库。每列包含与案例相关的一些信息。在处理案例时,将使用与案例相关的事件填充其他一对多表。这些事件表中有很多,示例表可能是:(case-open,case-dept1,case-dept2,case-dept3等)。这些表中的每一个都有一个caseid,它映射回“cases”表。还涉及一些查找表。
目前,报告需求涉及暴露各个阶段的瓶颈,并且粒度在该过程的某些区域处于小时水平。
我可能在这里要求太多,但我正在寻找一些方向,以便我如何设置我的Dim and Fact表或您可能有的任何其他建议。
答案 0 :(得分:4)
事实表是案例事件,它是“无事实的”,因为它没有数值。维度可以是时间,事件类型,大小写,也可能是其他一些维度,具体取决于系统中的其他数据。
您需要将事件表合并到一个事实表中,并标记为“事件类型”维度。吞吐量/瓶颈报告计算特定情况下特定事件类型组合的事件时间之间的差异。
报告应计算事件事件时间,并可能将它们分成直方图。您还可以标记某些类型的事件组合,并将标签应用于感兴趣的事件。然后,这些事件可以记录它们的时间,这将允许使用OLAP工具对时间进行切片和骰子操作。
如果您想对生命周期进程中的某些阶段进行基准测试,您将拥有一个表格,其中包括案例类型,事件类型1,事件类型2,基准时间。
通过一些按摩,您可以使用数据挖掘工具包甚至简单的回归分析来发现案例属性和事件事件时间(YMMV)之间的相关性。
答案 1 :(得分:2)
我建议您查看Kimball的书籍,特别是this one,这应该有一些示例可以让您考虑应用程序到您的问题域。
在任何情况下,您都需要确定尺寸模型是否合适。使用不同的索引或摘要或其他方式处理3NF数据库的“企业数据仓库”是完全可能的。
如果没有看到您当前的架构,那真的很难说。听起来你会得到几个星形模型,它们有一些一致的尺寸将它们捆绑在一起。因此,您可能将案例维度作为一致的维度之一。彼此表中的事实实际上是表格,这些表格既包含一致的维度,也包含适用于事实的任何其他维度,因此,例如,如果在案例打开时存在员工ID,则会链接到员工一致的维度,从案例开放事实表。这个一致的维度可能会与您的几个子事实表相关联。
Kimball的建模方法相当简单,可以像配方一样遵循。您需要首先确定所有事实,将它们分组到事实表中,识别每个事实表上的各个维度,然后根据需要将它们分组到维度表中,并确定每个维度的类型。
答案 2 :(得分:1)
与开发的任何其他方面一样,您必须从最终要求(如果您愿意,“用户故事”)向后解决问题。仓库最保守的方法是简单地表示事务数据库的副本。从那里开始,在需求的指导下,可以进行某些优化以增强某些数据访问模式的性能。但是,我认为将这些看作是优化而不是假设数据仓库自动必须是每个事实的每个可能维度的复杂爆炸是很重要的。我的经验是,对于大多数用途,直接表示对于90%以上的分析查询来说是足够的或甚至是理想的。对于其余部分,首先考虑索引,索引视图,其他统计信息或可在不影响结构的情况下进行的其他优化。然后,如果需要聚合或其他冗余结构来提高性能,则考虑将它们分成“数据集市”(至少在概念上),其提供原始事实与其冗余之间的分离。最后,如果要求太流畅并且聚合要求很高,以便以这种方式有效地运行,那么您可能会考虑批量爆炸数据,即星型模式。但同样,请尽可能将其限制为数据的最小横截面。
答案 3 :(得分:0)
这是我基本上提出的。 Thx NXC
的EventID TimeKey CaseID
的EventID EventDesc
TimeKey
RegionID RegionDesc
CaseID RegionID
答案 4 :(得分:0)
这可能是在您考虑问题之前选择解决方案的情况。并非所有数据仓库都适合星型模式。我没有看到你在这里汇总任何数据。到目前为止,我们有一个无事实的事实表和至少一个快速变化的维度(案例)。
看看到目前为止我看到的情况,我认为这个数据库中的中心实体应该是这样的。试图将事件放在中间似乎不对。尝试以不同的方式看待它。也许,案例,事件和案例事件要开始。