将日期或日期时间加载到日期维度
Loading date or datetime into date dimension
假设我有一个日期维度,根据我的业务需求,我知道我需要进行的最细粒度的检查是检查事件发生在一个月中的特定日期。
我得到的数据为我提供了事件发生的确切时间 (YYYY-MM-DD HH:MM:SS)。我有两个选择:
- 在将数据加载到日期维度之前,从日期中切出 HH:MM:SS。
- 在我的日期维度中创建时间属性并插入完整的日期时间。
在我看来,我应该选择选项 1。这将删除冗余数据并保存一些 space。但是,如果我选择选项 2,如果业务需求发生变化,或者如果我的经理突然想要更细化,我就不需要修改我的原始设计。哪个选项更常用?还有更多我没有考虑的选择吗?
更新 - 跟进问题
我每个月都会收到新数据。如果我使用包含所有日期的预建日期维度,那么我每个月都需要 运行 我的脚本以使用该月的新日期填充 table 或者我是否会有一个连续的过程,其中每个day 插入 table 一行,那将是那个日期?
我同意你的看法并避免选择选项 2。标准日期维度 table 处于个人日期级别。如果您确实需要按一天中的时间进行分析,您可以在一天中的秒级创建一个额外的一天中的时间维度,并且 link 从您的事实 table.
您的日期维度应该由脚本自动创建,而不是从事件发生的日期开始。这使您可以使用标准的预建维度分析来自其他事实的一系列事件,以及没有事件发生的日期。
我还将完整的 date/time 戳记作为事实 table 中的一列,连同维度 table 的 'DateKey'。这将允许您使用一些 visibility/analysis 的时间戳,您不会丢失数据,并且仍然允许您按日期维度进行分析。
更新 - 跟进问题
您预先构建的日期维度(标准的做法)通常会包含一些未来的日期。例如,没有理由不在 table 中包含另外 5 年的日期。但是,如果您希望它随着时间的推移逐渐增长,您可以使用 运行 每天一次、每月一次或每年一次的脚本来添加新日期。这完全取决于你!有许多用于构建日期维度的示例脚本 - 只是 google 日期维度脚本。它们存在于您选择的语言中,例如SQL、C#、Power Query 等
假设我有一个日期维度,根据我的业务需求,我知道我需要进行的最细粒度的检查是检查事件发生在一个月中的特定日期。
我得到的数据为我提供了事件发生的确切时间 (YYYY-MM-DD HH:MM:SS)。我有两个选择:
- 在将数据加载到日期维度之前,从日期中切出 HH:MM:SS。
- 在我的日期维度中创建时间属性并插入完整的日期时间。
在我看来,我应该选择选项 1。这将删除冗余数据并保存一些 space。但是,如果我选择选项 2,如果业务需求发生变化,或者如果我的经理突然想要更细化,我就不需要修改我的原始设计。哪个选项更常用?还有更多我没有考虑的选择吗?
更新 - 跟进问题
我每个月都会收到新数据。如果我使用包含所有日期的预建日期维度,那么我每个月都需要 运行 我的脚本以使用该月的新日期填充 table 或者我是否会有一个连续的过程,其中每个day 插入 table 一行,那将是那个日期?
我同意你的看法并避免选择选项 2。标准日期维度 table 处于个人日期级别。如果您确实需要按一天中的时间进行分析,您可以在一天中的秒级创建一个额外的一天中的时间维度,并且 link 从您的事实 table.
您的日期维度应该由脚本自动创建,而不是从事件发生的日期开始。这使您可以使用标准的预建维度分析来自其他事实的一系列事件,以及没有事件发生的日期。
我还将完整的 date/time 戳记作为事实 table 中的一列,连同维度 table 的 'DateKey'。这将允许您使用一些 visibility/analysis 的时间戳,您不会丢失数据,并且仍然允许您按日期维度进行分析。
更新 - 跟进问题
您预先构建的日期维度(标准的做法)通常会包含一些未来的日期。例如,没有理由不在 table 中包含另外 5 年的日期。但是,如果您希望它随着时间的推移逐渐增长,您可以使用 运行 每天一次、每月一次或每年一次的脚本来添加新日期。这完全取决于你!有许多用于构建日期维度的示例脚本 - 只是 google 日期维度脚本。它们存在于您选择的语言中,例如SQL、C#、Power Query 等