放假愉快啊~~今天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。