DAX表达式中包含时间智能(Time Intelligence)相关的函数,用于对日期维度进行累加、同比和环比等分析。PowerBI能够创建关系,通过过滤器来对影响计算的上下文。

DAX表达式有两种方式计算累加和,TOTALxTD()是DATESxTD()的语法糖,使得PowerBI对累加和的计算更加简单。

所有的时间关系函数都包含一个特殊的dates参数,该参数有三种形式:

  • 对date/time列的引用,格式是DateTable[Date_Column]
  • 表格表达式,返回日期/时间类型的单列表
  • 布尔表达式,用于定义日期/时间值的单列表。

为了应用时间关系,按照时间对数据分析,最好单独创建一个日期维度表,并和事实表创建 1 : N  的关联,确保关系是活跃的。日期维度的粒度设置为Day,确保日期维度表包括所有的日期数据。

一,直接计算累加和

DAX中有三个函数直接用于计算累加和,TOTALMTD是按当前月计算累加和、TOTALQTD是按当前季度计算累加和、TOTALYTD是按当前年份计算累加和:

TOTALMTD(<expression>,<dates>[,<filter>])
TOTALQTD(<expression>,<dates>[,<filter>])
TOTALYTD(<expression>,<dates>[,<filter>][,<year_end_date>])

参数 expression是聚合标量值的表达式,dates是包含日期的字段,filter是过滤器,返回的是布尔值。

例如,计算当前的销售额:

= TOTALMTD(SUM(InternetSales[SalesAmount]),DateTime[DateKey])  

二,返回xTD得所有日期

返回到当前的所有日期,参数dates是只包含一个日期列的表格,函数从dates中取第一个日期作为基准:

DATESMTD(<dates>)
DATESQTD(<dates>)
DATESYTD(<dates> [,<year_end_date>])

DATESMTD()函数适用于日期维度,该日期维度必须具有连续的非重复日期,从指定数据的第一年的1月1日到去年12月31日,该函数返回一个单列表,该表由上下文中当前日期的月份的第一个月与上下文中的当前日期之间的日期组成。

=CALCULATE(SUM(InternetSales[SalesAmount]), DATESMTD(DateTime[DateKey]))  

三,计算同比(前一个年份的同期)

函数PARALLELPERIOD用于计算平行时期,平行日期是指在参数dates上向前或向后移动多个时间间隔(intervals),该函数返回一个包含平行日期的表,使用该函数可以用于计算同比:

PARALLELPERIOD(<dates>,<number_of_intervals>,<interval>)

参数注释:

  • dates 指定当前的日期
  • interval 指定时间间隔,有效值是 year、quarter和month
  • number_of_intervals 指定向前或向后移动的时间间隔

此函数获取由dates指定的列中的当前日期集,将第一个日期和最后一个日期移动指定的间隔数,然后返回两个移位日期之间的所有连续日期。 如果间隔是月,季度或年的部分范围,则结果中的任何部分月份也将填写以完成整个间隔。

例如,向前回滚12个月,把DateTime[DateKey]中的最小日期和最大日期移动指定的间隔数,然后返回两个移位日期之间的所有连续日期,计算这些日期对应的销量(Sales_Amount)。

CALCULATE([Sales_Amount]*1.1,PARALLELPERIOD(DateTime[DateKey],-,MONTH))

在该示例中,CALCULATE的第二个参数是一个表格。

另一个函数是SAMEPERIODLASTYEAR(),它是PARALLELPERIOD(DateTime[DateKey],-12,MONTH) 的包装器:

SAMEPERIODLASTYEAR(<dates>)

四,计算环比(前一天/月/季/年)

函数 PREVIOUS+(DAY/MONTH/QUARTER/YEAR),是把指定的日期向前移动的函数,参数是一个包含日期的数据表,返回的是一个包含日期的数据表。

PREVIOUSDAY(<dates>)
PREVIOUSMONTH(<dates>)
PREVIOUSQUARTER(<dates>)
PREVIOUSYEAR(<dates>[,<year_end_date>])

对于PREVIOUSMONTH()函数,该函数使用dates(输入参数)中的第一个日期作为基准,返回该日期上个月的所有日期。 例如,如果dates参数中的第一个日期指的是2009年6月10日,则此函数将返回2009年5月的所有日期。

=CALCULATE(SUM(InternetSales[SalesAmount]), PREVIOUSMONTH(Date[DateKey]))  

参考文档:

DAX Reference

DAX Time Intelligence Functions

PowerBI开发 第十五篇:DAX 表达式(时间+过滤+关系)的更多相关文章

  1. PowerBI开发 第十五篇:Power BI的行级安全

    Power BI支持行级安全(Row-Level Security,RLS)的权限控制,用于限制用户对Dashboard.报表和DataSet的访问.用户浏览的报表是相同的,但是看到的数据却是不同的. ...

  2. PowerBI开发 第十八篇:行级安全(RLS)

    PowerBI可以通过RLS(Row-level security)限制用户对数据的访问,过滤器在行级别限制数据的访问,用户可以在角色中定义过滤器,通过角色来限制数据的访问.在PowerBI Serv ...

  3. PowerBI开发 第十二篇:钻取

    钻取是指沿着层次结构(维度的层次)查看数据,钻取可以变换分析数据的粒度.钻取分为下钻(Drill-down)和上钻(Drill-up),上钻是沿着数据的维度结构向上聚合数据,在更大的粒度上查看数据的统 ...

  4. PowerBI开发 第十四篇:使用M公式添加列

    PowerBI的查询编辑器使用Power Query M公式语言来定义查询模型,它是一种富有表现力的数据糅合(Mashup)语言,一个M查询可以计算(Evalute)一个表达式,得到一个值. 对于开发 ...

  5. PowerBI开发 第十六篇:PowerBI Service基本概念

    从总体上来看,PowerBI Service 有4个主要的构建模块,分别是dashboards.reports.workbooks 和 datasets,这四个模块都是目录,位于workspaces目 ...

  6. PowerBI开发 第十九篇:基于Page创建Tooltip

    在PowerBI 报表中,常规的Tooltip是一段文本,当光标悬停在Visual上,Visual上方会自动显示Tooltip的文本.PowerBI 支持用户自定义内容丰富的Tooltip,用户通过创 ...

  7. Android UI开发第三十五篇——AppCompat实现Action Bar

    每一位Android开发者对Action Bar这种设计都不陌生了,毕竟它已经发布了至少两年了.Android团队发布Action Bar设计规范时同时放出了ActionBar的Api来支持这种设计. ...

  8. Python之路【第十五篇】:Web框架

    Python之路[第十五篇]:Web框架   Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 ...

  9. 第十五篇 Integration Services:SSIS参数

    本篇文章是Integration Services系列的第十五篇,详细内容请参考原文. 简介在前一篇,我们使用SSDT-BI将第一个SSIS项目My_First_SSIS_Project升级/转换到S ...

随机推荐

  1. 利用python中的gensim模块训练和测试word2vec

    word2vec的基础知识介绍参考上一篇博客和列举的参考资料. 首先利用安装gensim模块,相关依赖如下,注意版本要一致: Python >= 2.7 (tested with version ...

  2. C#中禁止跨线程直接访问控件

    C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它.此时它将会在内部调用ne ...

  3. 慕学在线网0.4_xadmin后台管理

    admin是基于Django开发的后台管理框架,方便,快捷,而且简单: 而xadmin就相当于admin的升级版,更加强大. 1.安装xadmin(源码安装方式) 教程 PS: - 卸载pip安装的x ...

  4. VirtualBox下安装CentOS7系统

    本文假定你已经知道如何安装VirtualBox虚拟机软件,并且已经安装好了. 首先我们需要准备好centos的iso镜像文件,可以从centos的官网下载. 以下操作使用的VirtualBox版本号是 ...

  5. mysql的varchar字段可以存储多少个中文字符

    创建数据库,并创建一张表mytb进行测试 ******************************************************************************* ...

  6. plsql备份表---只是表---不包含表数据

    写这个的同时还在备份,表的数据进度很慢,数据太大了. 用的工具是plsql 导出表:点击    tool工具  ---> export user object 导出用户目标  ----> ...

  7. shell脚本之颜色效果显示以及PS1颜色实战

    在bash shell脚本中我们可以使用ASCII颜色来显示文本信息. 格式:\033\[31m hello \033[0m ##m: 左侧#:这个#可以是3或者4,作用不一样. 3:前景色 4:背景 ...

  8. shell脚本之数组

    变量:存储单个元素的内存空间. 数组:存储多个元素的连续的内存空间. 数组名:整个数组只有一个名字: 数组索引:编号从0开始: 数组名[索引]: 引用数组中的某个元素:${ ARRAY_NAME [ ...

  9. Linux系统将http转为https

    想把网站由http访问转变为https访问并没有想象中那么难,网上查了一些资料,想要转为https需要SSL安全证书,这里推荐一款景安网络的证书,可以免费试用一年时间,自己拿来实践还是很不错的选择. ...

  10. jQ 移动端返回顶部代码整理

    //返回顶部 $('#btn-scroll').on('touchend',function(){ var T = $(window).scrollTop(); var t = setInterval ...