领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

PowerBI_Calendar函数生成日期表

nixiaole 2024-12-14 14:23:00 知识剖析 13 ℃

日期在数据分析中是个非常重要的维度,以前我们都是使用的自己用Excel建立的一张日期维度表,每次新建一个模型都需要导入、转换,然后才能使用,稍微有点麻烦。为了更方便快捷的使用日期维度表,我们可以通过CALENDAR函数直接创建一个日期表,然后还可以生成各种日期维度,后续有新建模型需求的时候,直接复制DAX语句就搞定了。

CALENDAR函数也属于日期和时间函数,作用是返回一个表,其中有一个包含一组连续日期的名为“Date”的列。日期范围从指定的开始日期到指定的结束日期,语法很简单,如下↓

CALENDAR(<start_date>, <end_date>)


我们先看看使用函数生成的表格结果,为了直观全面,我们就生成15天的数据,2021.8.11-2021.8.25号的数据,DAX语句和结果如下↓

15天日期表 = CALENDAR(DATE(2021,8,11),DATE(2021,8,25))


但如果只有日期这一列,这个日期维度表意义是不大的,所以我们还需要根据日期衍生出其他的维度,比如常用的年、月、日、季度、周,以及组合字段年月等等。有两种方式可以添加衍生列,一个是使用ADDCOLUMNS函数,另一种是使用VAR+RETURN语句实现,下面分别演示。


【使用ADDCOLUMNS函数】

ADDCOLUMNS函数的作用是将计算列添加到给定的表或表表达式,在这里就是根据日期列为基础,再添加其他列到日期维度表,我们先添加一个年列作为演示,DAX语句和结果如下↓

15天日期表 = 
ADDCOLUMNS(
    CALENDAR(DATE(2021,8,11),DATE(2021,8,25)),
    "年份",YEAR([Date])&"年"
)


还是很简单,也可以使用FORMAT函数进行格式化取值,下面就把常用的日期维度加进来。具体每个日期函数可以参考上一篇,每个函数都有详细的说明,DAX语句和结果如下,这一条语句可以保存下来,后续直接作为日期维度表使用了,只需要改一下开始结束日期即可↓

15天日期表 = 
ADDCOLUMNS(
    CALENDAR(DATE(2021,8,11),DATE(2021,8,25)),
    "年份",FORMAT([Date],"YYYY年"),
    "季度",QUARTER([Date])&"季度",
    "月份",FORMAT([Date],"MM月"),
    "周",WEEKNUM([Date],2)&"周",
    "天",FORMAT([Date],"D日"),
    "星期",FORMAT([Date],"aaaa"),
    "年季度",FORMAT([Date],"YYYY")&"-Q"&QUARTER([Date]),
    "年月",FORMAT([Date],"YYYY-MM"),
    "年周",FORMAT([Date],"YYYY")&"-W"&WEEKNUM([Date],2),
    "月日",FORMAT([Date],"MM-DD"),
    "年月日",FORMAT([Date],"YYYY-MM-DD")
)



【使用VAR+RETURN】

这种方式核心思想其实差不多,只是先定义我们需要的字段,然后把字段返回成每一列就可以了。

日期维度表15 = 
VAR tdate = CALENDAR(DATE(2021,8,11),DATE(2021,8,25))
RETURN
    GENERATE(
        tdate,
        VAR dtYear = FORMAT([Date],"YYYY年")
        VAR dtquarter = QUARTER([Date])&"季度"
        VAR dtmonth = FORMAT([Date],"MM月")
        VAR dtweek = WEEKNUM([Date],2)&"周"
        VAR dtday = FORMAT([Date],"D日")
        VAR dtweekday = FORMAT([Date],"aaaa")
        VAR dty_q = FORMAT([Date],"YYYY")&"-Q"&QUARTER([Date])
        VAR dty_m = FORMAT([Date],"YYYY-MM")
        VAR dty_w = FORMAT([Date],"YYYY")&"-W"&WEEKNUM([Date],2)
        VAR dtm_d = FORMAT([Date],"MM-DD")
        VAR dty_m_d = FORMAT([Date],"YYYY-MM-DD")


    RETURN
        ROW(
            "年份",dtYear,
            "季度",dtquarter,
            "月份",dtmonth,
            "周",dtweek,
            "天",dtday,
            "星期",dtweekday,
            "年季度",dty_q,
            "年月",dty_m,
            "年周",dty_w,
            "月日",dtm_d,
            "年月日",dty_m_d
        ))


End

Tags:

最近发表
标签列表