0

我需要有关如何在我的数据仓库中构建重叠日期范围的帮助。我的目标是以允许对报告进行日期级别过滤的方式对数据进行建模。

我有维度—— DimEmployeeDimDate和一个名为FactAttendance的事实。这个事实中的记录存储如下——</p>

事实考勤

用图形表示——</p>

休假管理系统

需要根据这些数据创建报告,最终用户可以通过选择日期范围来过滤它。假设用户选择日期范围 D1 到 D20。在进行此选择时,用户应该看到至少一名员工休假天数的值。在这个特定的示例中,我应该看到底部添加了浅蓝色段,即 11 天。

我正在考虑的一种方法是在每个员工的每个日期为每个休假存储一行。这种方法的唯一问题是它会以指数方式增加事实表中的记录数。此外,事实上还有其他列会有冗余数据。

仓库中通常如何处理此类重叠的日期/时间问题?有没有更好的方法不涉及插入大量行?

4

1 回答 1

0

考虑像这样对您的事实建模:

fact_attendance (date_id,employee_id,hours,...)

这将使您能够通过简单地过滤日期维度来回答您的原始问题,但您还可以处理休假积分和小数天休假使用等问题。

是的,它可能比您的第一个建议使用更多的存储空间,但它是更好的维度表示,并且将满足更多(潜在)要求。

如果你真的担心存储——可能不是真的担心——使用带有列压缩的 DBMS,你会看到大量的磁盘节省。

我说存储“不是真正的担心”的原因是您的储蓄在当今的存储世界中毫无意义。1,000 名员工每年休假 20 天,超过 5 年意味着总共有 100,000 行。您的 DBMS 可能会在 RAM 中执行整个星形连接。即使是 100 万员工,在压缩之前也需要不到 1 TB 的数据。

于 2016-03-02T10:01:36.223 回答