玩PowerBI必备的日期表制作方式汇总

上篇文章中介绍了一个DAX函数生成日期表的例子,有朋友问使用M函数怎么生成日期表,这里顺便就把日期表的生成方法做一下汇总,分别使用Excel公式、Power Query的M函数以及DAX生成日期表,总有一种你能用的到,毕竟我们使用PowerBI的时候,使用最频繁的可能就是日期表了。

下面各种环境下的公式或代码,均生成以下这个标准的日期表,

时间跨度从2017年1月1日到2018年12月31日,如果想要其他日期范围的日期表,可以手动调整代码的起止日期。

Excel公式制作日期表

在A1:H1中输入日期表的表头,然后在A2:H2中分别输入以下公式:

A2=2017-01-01

B2=YEAR(A2)

C2="Q"&LEN(2^MONTH(A2))

D2=RIGHT("0"&MONTH(A2),2)

E2=DAY(A2)

F2=B2&C2

G2=B2*100+D2

H2=WEEKDAY(A2,2)

然后选中A2:H2,向下公式填充到731行,就可得到从2017到2018年的日期表。

Power Query制作日期表

进入PQ编辑器中,新建空查询,打开高级编辑器,把里面的代码全部删除,然后把以下代码粘贴到高级编辑器中,

(optional 请输入开始年份 as number,

optional 请输入结束年份 as number)=>
let
x = 请输入开始年份,
y = if 请输入结束年份 = null

then 请输入开始年份 else 请输入结束年份,
begin_date = if x = null

then #date(Date.Year(DateTime.LocalNow()),1,1)
else #date(x,1,1),
end_date = if y = null then #date(Date.Year(DateTime.LocalNow()),12,31)

else #date(y,12,31),
list = {1..Number.From(end_date)-Number.From(begin_date)+1},
dates = List.Transform( list , (item)=> Date.AddDays(begin_date,item-1) ),
table = Table.TransformColumnTypes(Table.RenameColumns(Table.FromList(dates,
Splitter.SplitByNothing(), null, null, ExtraValues.Error),{{"Column1", "日期"}}),{{"日期", type date}}),
year_id = Table.AddColumn(table,"年度", each Date.Year([日期]), type number),
quarter_name = Table.AddColumn(year_id, "季度", each "Q"&Text.From(Date.QuarterOfYear([日期]))),
month_id = Table.AddColumn(quarter_name, "月份", each Text.PadStart(Text.From(Date.Month([日期])),2,"0")),
data_id=Table.AddColumn(month_id,"日", each Date.Day([日期]), type number),
year_quarter_id = Table.AddColumn(data_id, "年度季度", each Text.From([年度])&[季度]),
year_month_id = Table.AddColumn(year_quarter_id, "年度月份", each Date.Year([日期])*100+ Date.Month([日期]), type number),
day_in_week = Table.AddColumn(year_month_id, "星期几", each Number.Mod(Date.DayOfWeek([日期])+6,7)+1, type number)
in
day_in_week

点击确定后将出现如下窗口,

输入开始的年份和结束的年份,点击“调用”,就会生成一个标准的日期表。

DAX生成日期表

在PowerBI Desktop中新建表,输入下面的DAX代码就可以了,具体操作方式也可以参考上篇文章:PowerBI Desktop中新建表的使用场景

利用DAX生成日期表,使用不同的函数都可以做到,常用的有以下几种组合:

1,ADDCOLUMNS与CALENDAR函数:

日期表1 =

ADDCOLUMNS (
CALENDAR (DATE(2017,1,1), DATE(2018,12,31)),
"年度", YEAR ( [Date] ),
"季度", "Q" & FORMAT ( [Date], "Q" ),
"月份", FORMAT ( [Date], "MM" ),
"日",FORMAT ( [Date], "DD" ),
"年度季度", FORMAT ( [Date], "YYYY" ) & "Q" & FORMAT ( [Date], "Q" ),
"年度月份", FORMAT ( [Date], "YYYY/MM" ),
"星期几", WEEKDAY ( [Date],2 )
)

这个就是上一篇文章用到的代码。

2,GENERATE和CALENDAR函数

日期表2 =
  GENERATE (
    CALENDAR ( DATE ( 2017, 1, 1 ), DATE ( 2018, 12, 31 ) ),
    VAR currentDay = [Date]
    VAR year =  YEAR ( currentDay )
    VAR quarter =   "Q" & FORMAT ( currentDay, "Q" )
    VAR month =  FORMAT ( currentDay, "MM" )
    VAR day = DAY( currentDay ) 
    VAR weekid =  WEEKDAY ( currentDay,2)
  RETURN   ROW (
   "年度", year ,
   "季度",quarter,
   "月份", month,
   "日", day,
   "年度季度", year&quarter, 
   "年度月份", year&month,
   "星期几", weekid
    )
  )

这里运用了VAR函数,据说这个代码可以节省内存、提升运行速度,不过日期表的量级太小,VAR的优势并没有感觉到。

3, GENERATE与CALENDARAUTO函数

日期表3=
  GENERATE (
    CALENDARAUTO(),
    VAR currentDay = [Date]
    VAR year =  YEAR ( currentDay )
    VAR quarter =   "Q" & FORMAT ( currentDay, "Q" )
    VAR month =  FORMAT ( currentDay, "MM" )
    VAR day = DAY( currentDay ) 
    VAR weekid =  WEEKDAY ( currentDay,2)
  RETURN   ROW (
   "年度", year ,
   "季度",quarter,
   "月份", month,
   "日", day,
   "年度季度", year&quarter, 
   "年度月份", year&month,
   "星期几", weekid
    )
  )

同样使用了VAR函数,你也许注意到了,这段代码中并没有指定起止日期,这就是CALENDARAUTO函数的厉害之处,它可以自动检测模型中其他表中所有日期,然后生成涵盖这些日期的整年日期表。

比如采购表是从2016年10月1日开始有采购数据的,而销售订单表最新日期是2018年4月23日,那么这段代码自动生成从2016年1月1日到2018年12月31日的日期表。

如果模型中其他表的日期范围发生变动,这个日期表也会自动更新到新的日期范围,利用CALENDARAUTO可以很轻松的制作一个动态的日期表。

使用上面三种DAX函数生成日期表还有一个小小的bug,就是CALENDAR函数生成的日期列字段名都是英文的[Date],与其他列的中文字段放在一起好像不太协调,生成日期表以后,可以手动对这个字段重命名为中文的[日期]。

以上就是制作日期表的各种方式,有些函数现在看不懂也没有关系,需要时可以直接复制粘贴,随着PowerBI学习的深入,这些代码将逐渐变得通俗易懂。

(0)

相关推荐

  • 如何让Excel考勤表,自动判断当月有几天?

    专栏 30天excel从入门到精通 作者:Excel从零到一 ¥29.9 3,025人已购 查看 一.构建单元格 首先我们需要在表格中构建出输入年份和月份的单元格,如下图黄色单元格所示 随后我们需要在 ...

  • Excel中14个常用的日期与时间函数,动画演示,中文解读

    [温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力! 前天的教程中汇总了16个文本函数的用法,小伙伴们在工作中应用得如何?今天阿钟老师又整理了14个日期和时间函数的用法.在Ex ...

  • 这6个日期入门函数,你必须学会,轻松搞定80%的日期问题

    [温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力! 日期,在Excel表格中出现的频率很高,如人事部门统计员工的入职日期.财务部门账务结算日期.统计的生产日期等等. 在职场中 ...

  • Power BI 辅助表制作方式汇总

    PowerBI业务分析:按排名分组统计 其中第一步就是建立一个分组表,有不少星友问过,怎么在PowerBI中快速方便的建立一个辅助表,这篇文章就介绍几种常用的辅助表制作方式. 就以排名辅助表为例,下面 ...

  • 制作一个小元件快速定位电脑故障原因,新手玩电脑必备小知识。

    制作一个小元件快速定位电脑故障原因,新手玩电脑必备小知识。

  • 玩钱必备知识这8种古钱币你一定要认得,一枚最少值百万

    在中国古代,每个朝代基本上都有着自己专属货币.由于历史原因,或者是存世量比较少,很多古钱币有着很大的收藏价值!今天我们来盘点一下几枚高价值的古钱币.遇到价格如果合适赶快收了吧. 一:孙中山开国纪念币 ...

  • 南昌真的不值得一玩吗?可能是你打开方式不对

    要不是心血来潮计划去嗦粉,可能我很难想到要去南昌玩一趟.毕竟南昌留给大家的记忆点始终停留在几十年前的那场起义活动上. 当踏进去多了解那么一点点后,我发现南昌其实是一座越品越有味道的城市.爱吃辣的南昌人 ...

  • 图解 | 无刷电机工作及控制原理 (玩飞控必备)

    分享一篇关于无刷电机的工作原理一些知识,确保只要有高一物理知识的朋友就能够看得懂,希望有兴趣的朋友耐心往下看,相互学习! 首先给大家复习几个基础定则:左手定则.右手定则.右手螺旋定则.别懵逼,我下面会 ...

  • 历史悠久、古老的咖啡制作方式——土耳其咖啡

    去过土耳其,就一定少不了这样一张照片,画面中除了远处的美景之外,就是花纹精致的杯盏和香气诱人的土耳其咖啡. 在土耳其还有这样一句谚语:"Bir fincan kahvenin kırk yı ...

  • PP里的日期表改不了范围?因为那不是真的!

    小勤:我的日历表里为什么出不来5月份的数据?在哪里设置? 大海:你的日期表是怎么做的?看一下是否包括2020年5月的数据? 小勤:没有,该在哪里设置呢? 大海:你的日期表是从外面的表导进来的,还是在p ...

  • 符合国际规范的财务利润分析表制作

    关于 IBCS,大家可以阅读此前的经典文章. 通过和业界顶级财务专家的合作,我们已经构建了顶级的自动化利润分析模型,用户无需 PQ,无需 DAX 知识就可以使用,作为前序的一些引文,先从一些简单的场景 ...

  • 玩转WPS表格 - 动态图表制作

    动态图表帮你更快捷清楚的查看你想要的数据内容.快来学习呀!借助VLOOKUP函数可以更加便捷地制作动态图表,具体步骤如下. 步骤一 插入下拉列表.选中目标单元格,如H 2 单元格,然后依次单击[数据] ...