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. MagicApp说明

    title: MagicApp说明 date: 2017-12-06 05:41:00 tags: IT 技术 MagicApp是日常处理的程序,协助进行日常工作处理 批量重命名模块 说明 该模块是根 ...

  2. [20170623]利用传输表空间恢复部分数据.txt

    [20170623]利用传输表空间恢复部分数据.txt --//昨天我测试使用传输表空间+dblink,上午补充测试发现表空间设置只读才能执行impdp导入原数据,这个也很好理解.--//这样的操作模 ...

  3. centos 6.5下安装nmap工具及简单用法

    Nmap是一款针对大型网络的端口扫描工具,被广泛应用于黑客领域做漏洞探测以及安全扫描,其主要功能有主机发现(Host Discovery). 端口扫描(Port Scanning). 版本侦测(Ver ...

  4. openSUSE搭建OpenVPN

    目录 openSUSE搭建OpenVPN 环境 安装openVPN服务端 安装easy-rsa工具 配置vars文件 创建服务端证书及key 创建客户端证书 疏理证书文件 服务端配置 启动openvp ...

  5. 【PAT】B1074 宇宙无敌加法器(20 分)

    打一开始做就听人说这个难,吓得我把它放到了最后做,不过如此嘛. 这里说说样例的坑点 1.最后结果可能高位有0:例如样例结果07201 2.结果会进位, 3.有可能结果是0,(此处取决于你的输出方式) ...

  6. 遇到电脑IP地址冲突了怎么解决

    由于路由器是自动分配IP地址的,如果多个设备设置的是IP地址自动获取,就会出现IP地址冲突的情况当局域网内有相同IP,并且该机器启动了防火墙,那就没办法自动更新到下一个IP的地址了,所以此时发生了冲突 ...

  7. LNMP环境搭建详细教程

    之前有一篇博客写的是LAMP的环境搭建,今天来详细介绍一下另外一个模式——LNMP=Linux+Nginx+MySQL+PHP. 一.在Linux系统下nginx的安装过程,先到http://ngin ...

  8. Linux 小知识翻译 - 「端口和端口号」

    这次说说「端口」和「端口号」. 平时经常会听人说「打开了80号端口」,为了安全「不要打开多余的端口」等等.那么,这里的端口或者端口号是什么呢? 首先,「端口」是TCP或者UDP上使用的概念,经常被比喻 ...

  9. Android Activity学习笔记——Activity的启动和创建

    http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html 最近学习Android相关知识,感觉仅仅了解Activity几个生命周期函 ...

  10. [NOIP2018]保卫王国

    嘟嘟嘟 由于一些知道的人所知道的,不知道的人所不知道的原因,我来发NOIP2018day2T3的题解了. (好像我只是个搬运工--) 这题真可以叫做NOIplus了,跟其他几道比较水的题果然不一样,无 ...