DAX基础6:DAX来创建一个简单的Date Table

浏览: 1518

放假愉快啊~~今天5月3号了,7号才回去上班啊...

    今天开始介绍函数了。er,如果你要问,为啥都没有说数据类型,没有说语法结构?这样直接到函数,合适吗?er,我也不知道行不行。语法结构和数据类型,会穿插在函数里讲解的。我尽量说的细一点。再者,默认来说,你看到DAX基础6,那之前你多多少少也看了DAX基础的其他内容,那多多少少也见过DAX的内容了。都是类似的。讲函数的时候,想起来我就提几句,想不起来就算了。任性是因为很简单。见多了就自然有印象了。这些基础的都反复写,你会觉得内容又多又麻烦~~好吧,是我自己觉得内容又多又麻烦。如果有道理说服我,我就改。

Date和Time的函数也不是很多。相辅相成混搭使用。因为我想尽快说Time intelligence的函数,所以就先说Date和Time的函数先把Date Table建起来吧。我们先一步一步来,多建几个Calculate Column,下一节我们学习一些DAX Table的内容,尝试把今天建的Calculate Column整合到一起,直接得到一张表。

首先说说CALENDAR和CALENDARAUTO。

两个都可以生成一定范围内的连续的DateTime值。先点中Modeling标签页里面的New Table。


CALENDAR需要加入开始时间和结束时间作为参数。就是你需要告诉CALENDAR,生成的时间表是从什么时候开始,什么时候结束。并且开始时间不能晚于结束时间。这样CALENDAR才能生成在一定范围(你给的开始结束时间)内,连续的DateTime值。还是很方便的。举个例子如下

Calendar Table = CALENDAR("2007-01-01","2010-12-31")

在Data标签页,点中Calendar Table可以看到如下数据值。

你也许注意到了,为什么我的开始时间和结束时间用“”来表示的。“”不是字符串吗?开始和结束时间,不是应该是Date类型的吗?(字符串在DAX里面就是一段用“”双引号圈住的内容。是一个属性标签,不能计算)嗯,我个人总结下来,应该是符合Date Time表达式的字符串,DAX都可以把他们认成Date Time值。有哪些可以转换成Date Time的字符串格式呢?参考如下:(点中刚刚建立的Date字段)

如果你的字符串表达式符合这个Format的,基本都可以被认成Date。可以随便试试,欢迎互相交流。这个只是我的第六感总结的,哈哈哈~~

CALENDARAUTO可以加入参数值,也可以不加。参数值的意思是财年结束的那个月。默认是12,不加就是12月,加就是你财年结束的那个月。这个函数挺好玩的。CALENDARAUTO会根据你的模型里的最小时间来生成开始时间,根据模型里的最大时间生成结束的年份,然后根据参数值来决定结束时间。所以根据模型的不同,CALENDARAUTO生成的时间表的范围是不一定一样的。很智能吧,很聪明。

举个例子:同一个表达式,我的模型里面有一个customer的表里面有一个birthday时间,所以得到结果从1910年开始。

在下面这个模型里,我只有订单表里面有一个订单时间,从2008年开始,所以得到的结果如下:

那如果模型里面没有数据表有Date相关信息呢?er,那你还建什么Date Table啊?你是来搞笑的吗?满足你,当然是报错了。没有找到相关的Date信息。哈哈哈~~

表建好了,就可以直接设置成date table啦。(标签页Modeling里面)

到此我们已经有了Date table了。下一步就是得到我们想要的Year, Month等信息。新建若干Calculate Column,定义如下:

Year = YEAR('Calendar Auto Table'[Date])

Month = FORMAT('Calendar Auto Table'[Date],"mmm")

Month Number = MONTH('Calendar Auto Table'[Date])

Week Num = WEEKNUM('Calendar Auto Table'[Date])

结果如下:

这个信息基本上就已经满足我们的需要了。

随便拉一张图表看看吧。

结果不对啊。哈哈哈,DAX基础2的时候,说过创建Power BI报表的流程,准备好数据之后,要建立关系先!不记得了从新看下DAX基础2.

建好关系之后,我们来看看数据。看上去正常多了。

er,要设置下,把Month按照Month Number来排序,否则会自动按照A到Z的字母顺序排序。(Data标签页,点中Month这个字段,在Modeling这个tab页里面排序)

嗯,基本的准备工作就是这样了。

(下面的内容算是拓展学习。大概有个印象就好了,随便想到了就写下了)

er,来一个简单的需求吧。准备的数据Sales表里面有三个date字段(Delivery Date,Due Date和Order Date),其中我想看一下在一个图表上看到一个时间范围内,Delivery Quantity和Order Quantity的对比。

已有的数据内容如下:

因为要在同一个时间轴上显示,所以我们就建两个关系。(在哪里建关系不会的请回顾DAX基础1,2)这里在建立Sales和Date表关系的时候一条是实线一条是虚线,因为在自然情况下不能两条关系同时成立。关系建立完成如下:

建立好关系之后,开始在Sales表里面创建Order Quantity和Delivery Quantity。要聚合的表达式,所以新建Measure。主要就是USERELATIONSHIP这个函数。具体表达式如下:

Delivery Quantity = CALCULATE(SUM(Sales[Quantity]),USERELATIONSHIP('Calendar Auto Table'[Date],Sales[Delivery Date]))


Order Quantity = CALCULATE(SUM(Sales[Quantity]),USERELATIONSHIP('Calendar Auto Table'[Date],Sales[Order Date]) )

结果如下:

嗯,其实也挺简单的。关系是虚线的,要用函数USERELATIONSHIP来激活这个虚线的关系为Active。就是这样了。so easy。

欢迎关注转发DAX Share。


推荐 0
本文由 懒胖子 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册