【问题标题】:Dimensional Date Table with multiple first day of weeks具有多个星期的第一天的维度日期表
【发布时间】:2017-02-21 13:23:24
【问题描述】:

我即将开始使用 SQl Server 2012 为数据仓库项目创建维度日期表。

在第一个用户 cmets 上是......

'不同的客户会有不同的一周的第一天,所以并不总是星期一'。

我将如何在单个暗表中容纳可能 7 个不同的工作日开始,或者我应该简单地在事实表中以每个客户为基础动态计算它而不使用暗日期表?

【问题讨论】:

    标签: datetime sql-server-2012 data-warehouse


    【解决方案1】:

    选项 1. 使用内置日期匹配函数即时计算。 SQL Server 默认将星期日作为一周的第一天。

    选项 2。在表格中为一周中的每一天创建一个额外的列,指示其一周中的天数。例如,TuesdayFirst 列的每个星期二为 1,每个星期三为 2。

    选项 3。(最佳)在您的日期维度上创建一个视图,用于计算每天的附加列。选择中不需要的任何列都将被忽略且不计算。这提供了持久列和一致的计算方法的好处,但与预先计算相比确实有一些处理开销。

    如果您选择选项 3,请不要使用 CASE 语句来计算它。您必须严格使用日期数学,以使其在聚合时表现得体。

    【讨论】:

    • 感谢韦斯的回复。我喜欢选项 3 的想法。所以只是为了做到这一点......该视图将包括所有可能的开始日期,还是仅包括“按需”的开始日期?原始 Dim 日期表上的所有属性会受到这个不同开始日期的影响吗?即,如果 'Wednesday' 那么 [StartOfWeekDate] =Wednesay 日期,[EndOfWeekDate]= 星期二日期,[DayofWeek] 可能还有 [DayNumber]。星期三现在是“1”还是默认的“2”?当然,只有少数受影响的属性,所以不确定视图是否包含上述所有属性 x 7?
    • 如果您需要每个客户的所有基于周的列,是的,您需要为每个属性设置七个。如果您这样做并且您正在使用 SSAS,我强烈建议您在多维数据集日期维度中使用文件夹,以便更好地为您的最终用户组织它。如果星期三是一周的第一天,我希望它是一周的第一天。
    猜你喜欢
    • 1970-01-01
    • 2019-10-19
    • 2014-02-11
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多