【DAX 系列】分析师必备,日期表模板

2020-02-17 13:06:03 浏览数 (1)

很多小伙伴问日期表模板,那这次分享一个截止 2020.1 为止,可以看到的相对好用的日期表模板,这也是罗叔一直使用的模板。

日期表模板

DAX 如下:

代码语言:javascript复制
Model.DatesTemplate =
// 模板函数
// 构造日期表的方法
// 本方法基于数据模型中最大的表

VAR BeginDate   = MINX( { MIN( 'Model_Order'[订单日期] ) , MIN( 'Model_Order'[发货日期] ) } , [Value] )  // 根据实际修改
VAR EndDate     = MAXX( { MAX( 'Model_Order'[订单日期] ) , MAX( 'Model_Order'[发货日期] ) } , [Value] )  // 根据实际修改

// 生成日期表,以下内容无需修改

RETURN
ADDCOLUMNS(
    CALENDAR(
        DATE( YEAR( BeginDate ) ,   1  ,    1  ) , // 开始日期
        DATE( YEAR( EndDate ) ,     12 ,    31 )   // 结束日期
    ),
    "Year" , YEAR( [Date] ) ,
    "Quarter" , QUARTER( [Date] ) ,
    "YearQuarter" , YEAR( [Date] ) * 10   QUARTER( [Date] ) ,
    "Month" , MONTH( [Date] ) ,
    "YearMonth" , YEAR( [Date] ) * 100   MONTH( [Date] ) ,
    "Week" , WEEKNUM( [Date] , 2 ) ,
    "YearWeek" , YEAR( [Date] ) * 100   WEEKNUM( [Date] , 2 ) ,
    "Weekday" , WEEKDAY( [Date] , 2 ) ,
    "Day" , DAY( [Date] ) ,
    "DayInWeek" , WEEKDAY( [Date] , 2 ) // 周1 = 1 , ... ,周日 = 7
)

创建日期表模板,复制上述所有内容,进入 PowerBI,点击【新建表】,粘贴后回车即可。

使用方法

接着 罗叔 给你一个独门使用方法,请记住刚刚的【日期表】是【日期表模板】,而不是日期表,区别在于哪里呢?

考虑到未来,有可能你会有多处日期表的需求,因此我们需要一个模板原型。

我们正式建立日期表,在 PowerBI 中点击【新建表】,如下:

代码语言:javascript复制
Model_Calender = 'Model.DatesTemplate'

请看,这里的 Model_Calendar 才是真正的日期表。如果你要问为什么要间接的来一步,不太重要,有点偏技术,不特意去解释了,你这么用就对了。

更重要的是,请注意这两行语句:

代码语言:javascript复制
VAR BeginDate   = MINX( { MIN( 'Model_Order'[订单日期] ) , MIN( 'Model_Order'[发货日期] ) } , [Value] )  // 根据实际修改
VAR EndDate     = MAXX( { MAX( 'Model_Order'[订单日期] ) , MAX( 'Model_Order'[发货日期] ) } , [Value] )  // 根据实际修改

在你的一堆表里,可能日期表的日期范围需要覆盖很多表,那么请照葫芦画瓢地使用上面的套路来修改刚刚的模板即可。

日期表最佳实践

在 PowerBI 中,如果您正涉及和日期有关的任何计算,请严格遵守以下规则:

  • 如果开始写第一个 DAX 公式,就遵守此约定。
  • 禁用系统日期表。 (【文件】【选项】【加载】取消勾选【自动时间智能】)
  • 分析随日期的变化,永远拖拽日期表中的字段。
  • 如果有多个日期,也优先使用一个全局日期表,建立虚线关系。
  • 日期表的日期列必须用日期格式(2020/01/01),而不是数字类型(20200101)。
  • 没有任何其他要求了。

请注意,在使用以上的日期表模板后,并遵守这里的规则,你在使用日期智能函数或其他和日期有关的计算就可以最大限度地躲过坑坑洼洼的地方。

附加

面试题:

在 PowerBI 中使用日期表时,什么时候必须设置日期表为日期表,如下:

虽然这句话读起来很怪,但请注意,在本文的日期表中,根本没有设置日期表,而您正在使用日期表。请注意:此处不需要设置为日期表

对于非 IT 人员,你只需要按规则用即可。

总结

生成日期表,还有 Power Query 的方法,但我们仍然推荐这种方法。原因有一些,列举一条的话就是,你无法在 PQ 中知道最大的日期是哪天(如果你说你可以用List.Max( Orders[Date] ),那你再想一想是不是合适)。

总之,作为分析师,直接使用上述模板即可。步骤:

  • 第一步,新建表,复制粘贴,形成日期表模板。
  • 第二步,新建表,= 上一步,形成日期表。
  • 第三步,永远使用该表。

这将确保您不进入任何与日期智能计算有关的坑。(那些坑真的很多,而要彻底弄明白那些坑,会陷入与分析无关的细节)

0 人点赞