Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

大鹏Power

关于Power BI日期表

数据由空间和时间两大维度组成。而与时间分析相关的内容,至少将占到我们60%以上的分析场景,可以说掌握住了与时间相关的分析,也就掌握住了大部分分析。而与时间相关的日期表,是我们在时间维度分析的重要支撑。

 

一个模型,可以忽略掉一些不必要的表,而日期表却是必不可少的,甚至于你在创建一个Power BI数据模型时,应该首先创建一张日期表,然后再加入其他数据。

 

在数据模型当中的事实表,大多都会有与日期相关的列,可能有一列,也可能有多列,按照我们以往的习惯,可能会使用这些列来完成与日期相关的分析,在Excel中使用数据透视表,通常我们也是这样做的。然而,在Power BI当中,并不推荐这样使用,甚至反对这样使用。

 

从事实表当中使用日期列进行分析和计算,无法正确的使用时间智能函数,时间智能函数的应用,在Power BI的分析中,有着举足轻重的作用,尤其是涉及到多张事实表之间的复杂计算,如果没有一张共同的日期维度表,则很难完成相关的分析。

 

回到我们使用的Power BI数据模型当中,你会发现Power BI自动给日期列创建了一个日期层次结构,包含了年、季度、月份、日。

 

070620.png

这似乎看起来是可以被使用的日期表,然而我劝你千万不要这样做,Power BI为了方便新用户更方便的进行日期分析,增加了这样一个日期层次结构,其极具迷惑性。该日期来源于事实表,日期可能并不连续,且几乎不可能唯一,如果使用订单表中的下单日期作为时间智能函数的参数,将无法正确显示。

 

 

销售总额 = 
SUMX(
    'F_订单表',
    'F_订单表'[数量] * 'F_订单表'[折扣] * RELATED( 'D_产品表'[销售单价] )
)
销售总额_去年_使用下单日期 = 
CALCULATE(
    [销售总额],
    DATEADD( 'F_订单表'[下单日期], -1, YEAR )
)

 

 

虽然DAX并不会在语法上报错,然而当你把该度量值和年份放到画布中,视觉对象将无法正常显示结果或者直接弹窗提示。

 

当我使用[年]作为维度,那么该视觉对象将不报错,但是却没有任何正确的结果返回在表中。

Power_4-1725603146859.png

 

如果我们使用产品表的[一级分类]列作为维度,该视觉对象将报错。可以在附件中查看。

Power_2-1725602861099.png

 

点击:请参阅详细信息,将得到如下提示。错误的原因是因为日期列的日期不唯一。

Snipaste_2024-09-05_20-29-23.png

在实际的使用中,事实表当中的日期列,几乎不可能唯一,如果需要正确返回结果,我们需要使用单独创建的日期列唯一的日期表来进行DAX的编写。

 

如果想要得到正确的结果,我们只需要将时间智能函数的参数改为日期表的日期列即可。

 

 

CALCULATE(
    [销售总额],
    DATEADD( 'D_日期表'[日期], -1, YEAR )
)

 

 

070640.png

 

使用日期表并且保持日期列唯一且连续,并以此作为所有与日期相关的分析,是Power BI数据模型构建中最为规范的做法。在极特殊情况下,可能会使用多张日期表,在你真正熟悉这些操作之前,不太建议进行尝试。

 

如果你希望在日期表的管理上更加规范,则可以关闭“自动日期/时间”选项,依次点击“文件”-“选项和设置”-“选项”-“数据加载”,取消勾选“自动日期/时间”并点击“确定”按钮,即可关闭“自动日期/时间”。

 

070650.png

当某个事实表当中,需要有两个甚至多个日期列与日期表做关联,可以针对分析使用频次最高的事实表日期列和日期表做实线关系,然后再创建一条或者多条虚线关系,同时配合函数“USERELATIONSHIP”进行实现。

 

计算公式如下:

 

	销售总额 = SUMX( 'F_订单表', 'F_订单表'[数量] * 'F_订单表'[折扣] * RELATED( 'D_产品表'[销售单价] ) )
	销售总额_按发货日期 = CALCULATE( [销售总额], USERELATIONSHIP( 'D_日期表'[日期], 'F_订单表'[发货日期] ) )

 

 

 

070660.png070670.png

 

如果我们要分析与日期时间相关的内容,也可以使用时间表与事实表建立关系,对时间进行分析,可以从“0:00:00”开始到“23:59:59”结束,共计86400行。请不要在事实表当中保留“日期时间”格式的列,需要将日期列和时间列拆分为两列,并分别与日期表和时间表创建关联关系。

 

关于日期表,我们真正需要知道的是,日期表对于数据模型的重要性,这之后在Power BI数据模型当中使用日期表,并基于日期表去编写度量值进行分析,这就够了。在使用日期表的过程中,肯定还会遇到各种问题,只要使用日期表这个大方向不偏,遇到问题解决问题就可以让你对日期表有更深的认识和理解。

Comments