DAX/PowerBI系列 - 关于时间系列 - 时间相关数值比较 - 用非自带函数
DAX/PowerBI系列 - 关于时间系列 - 时间相关数值比较 - 用非自带函数
文末有彩蛋,解决蛋疼问题
难度: ★★☆☆☆(2星)
适用范围: ★★★☆☆(3星)
概况:
基于时间的汇总可能是最基础、最普遍用到的计算之一:计算年度销售总额,计算月度消费金额,某个店某个时期的销售情况等等。
这里的时间模式介绍用DAX实现时间相关的计算,它不依赖于DAX自带的时间函数(譬如YTD,MTD等等)。
如果你有特殊的日历,特定特定时间段的计算(例如:按周计算、按trimester计算),用这个这个模式都能够解决。
此文涉及前文DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比的扩展部分,给出具体实例和解决方法。
日期维度表参见:如何生成日期维度表
应用场景:
以下是几个应用场景:
• 计算年底销售总额
• 计算月度流量总额
• 进一步计算同比,环比
最终PowerBI效果显示如下:(耐心等待PowerBI 出来,噔噔噔噔~~~)

欢迎转载,请保留原文链接和作者信息。O(∩_∩)O谢谢。
DAX/PowerBI系列 - 参数表(Parameter Table) 度量值模板(Period Table)
作者:马丁叔叔
链接:http://www.cnblogs.com/lizardbi/p/DAX-PATTERN-POWERBI-Parameter-Table-Period-Table-Extension.html
数据模型:
Date(日期表)
Product(产品表)
Sales (销售表)
Inventory(库存表)

要点:
首先定义一个度量值(measure),它基于销售额列(SalesAmount),(注:销售额(SalesAmount)此列是数据表中的列,不是度量值)
有些盆友觉得定义这个度量值是多余的,但是细看下面你就会发现这样定义是十分有用的:
1. 易懂
2. 简化引用这个度量值的其他度量值
3. 易于维护
度量值 Amount
[Amount] := SUM(Sales[SalesAmount])
月初至今 MTD
[Amount MTD] :=
CALCULATE (
[Amount],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Month] = MAX ( 'Date'[Month] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
月初至今(上月) LMTD
[Amount LMTD] :=
VAR maxSalesDate =
MAX ( 'Sales 0'[skDate] )
VAR dateRng =
FILTER ( ALL ( 'Date' ), 'Date'[Date] <= maxSalesDate )
RETURN
CALCULATE ( [Amount MTD], DATEADD ( 'Date'[Date], -1, MONTH ), dateRng )
dateRng: 见文末详解。
月初至今(去年) LYMTD
[Amount LYMTD] :=
VAR maxSalesDate =
MAX ( 'Sales 0'[skDate] )
VAR dateRng =
FILTER ( ALL ( 'Date' ), 'Date'[Date] <= maxSalesDate )
RETURN
CALCULATE ( [Amount MTD], DATEADD ( 'Date'[Date], -1, YEAR ), dateRng )
月度环比 MoM
[MoM] :=
IF (
[Amount MTD] <> BLANK (),
DIVIDE ( [Amount MTD] - [Amount LMTD], [Amount LMTD] )
)
月度同比 LMoM
[LMoM] :=
IF (
[Amount MTD] <> BLANK (),
DIVIDE ( [Amount MTD] - [Amount LYMTD], [Amount LYMTD] )
)
年初至今 YTD
[Sales YTD] :=
CALCULATE (
[Amount],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
年初至今(去年) LYTD
[Amount LYTD] :=
VAR maxSalesDate =
MAX ( 'Sales 0'[skDate] )
VAR dateRng =
FILTER ( ALL ( 'Date' ), 'Date'[Date] <= maxSalesDate )
RETURN
CALCULATE ( [Amount YTD], DATEADD ( 'Date'[Date], -1, YEAR ), dateRng )
年同比 YoY
[YoY] :=
IF (
[Amount YTD] <> BLANK (),
DIVIDE ( [Amount YTD] - [Amount LYTD], [Amount LYTD] )
)
^如何在图表中显示LYTD,LMTD的数据
一般来说日期表(Date)中含有的未来的月份,譬如未来5年的日期,或者事实表(Fact)中没有的日期,为了防止图表中显示出来LMTD,LYTD之类的,用这个筛选日期达到目的。
例子:在事实表(Fact)中,最大的交易日期是2013-06-13。
如图:
左边因为2014年计算LYTD的时候不为空,所以X轴显示到了2014年到6月份,但是用最大的交易日期筛选后,就可以正常显示了。
| 没有用dateRng筛选 | 用dateRng筛选 |
[x Amount YTD] := |
[Amount YTD] :=
|
|
|
|
最终效果
参照 上文的PowerBI显示。
Time-Pattern,日期度量值对比,度量值汇总, 同比,环比,YoY, MoM,库存对比,年度环比,月度环比
DAX/PowerBI系列 - 关于时间系列 - 时间相关数值比较 - 用非自带函数的更多相关文章
- DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate Date Dimension)
跟大家的交流是我的动力. :) DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate Date Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★ ...
- DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension)
DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★★(5星) 这个时间系列想 ...
- (玩起来)DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比
盆友们,边看文章边玩,请耐心等待PowerBI load出来~~~~ (7.8秒钟) DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比 难度: ★☆☆☆☆ ...
- DAX/PowerBI系列 - 父子层级(Parent-Child Hierarchy)
DAX/PowerBI系列 - 父子层级(Parent-Child Hierarchy)参考文章见最后 难度: ◆◆◇◇◇(2星) 应用场景: 其实很多时候对数据汇总都会有层级关系的问题,不过说的不是 ...
- DAX/PowerBI系列 - 累计总计(Cumulative Total)
DAX/PowerBI系列 - 累计总计(Cumulative Total) 2017/07/23 更新:B列公式(见最后) 难度: ★★☆☆☆(2星) 适用: ★★☆☆☆(2星) 概况: 这个模式普 ...
- DAX/PowerBI系列 - 参数表(Parameter Table) 度量值模板
DAX/PowerBI系列 - 参数表(Parameter Table) 度量值模板 难度: ★★☆☆☆(2星) 适用范围: ★★★☆☆(3星) 概况: 当你有多个度量值都需要计算YTD,MoM,而又 ...
- DAX/PowerBI系列 - 库存总价值(Inventory Value)
DAX/PowerBI系列 - 库存总价值(Inventory Value) 欢迎交流与骚扰 难度: ★★☆☆☆(2星) 适用: ★★☆☆☆(2星) 概况: 有多少货(库存)当然重要(对于运营人员), ...
- DAX/PowerBI系列 - 累计总计(Cumulative Total, Running Total)
DAX/PowerBI系列 - 累计总计(Cumulative Total) 2017/07/23 更新:B列公式(见最后) 2019/08/08 更新:在可视化数据的时候,一定要选择日期维度的日期列 ...
- DAX/PowerBI系列 - 参数表(Parameter Table)
DAX/PowerBI系列 - 参数表(Parameter Table) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★☆(4星) 概况: 这个模式比较简单灵活,而且很实用.所用的DAX语句也比较简 ...
随机推荐
- Unable to find header files
在本模块导出头文件时,可以使用如下方式: LOCAL_EXPORT_C_INCLUDE_DIRS := $(MY_DIRECTORY_PATH) LOCAL_EXPORT_C_INCLUDES := ...
- word 内容控件属性编辑
场景: 别人发给自己一份word模板,基于统一性,里面包含了很多“内容控件”,一般情况下,只需要根据内容控件进行编辑即可,但如果想对内容控件本身做编辑操作,例如删除等. 操作: 单击 文件>选项 ...
- 关于saltstack
配置Saltstack master 服务器 master服务器:saltstack.master 172.18.1.103 minion客户端:minion01 172. ...
- Android 10开发者预览版功能介绍
Android P的开发者预览版最亮眼的功能莫过于支持“刘海屏”等屏幕显示.同样在适配可折叠设备方面,Android Q的第一个开发者预览版也很“接地气”,谷歌早在去年11月就发布了对可折叠设备的支持 ...
- Mysql的性能优化
1.参考书籍:MYSQL 5.5从零开始学 Mysql性能优化就算通过合理安排资源,调整系统参数使MYSQL运行更快,更节省资源.MYSQL性能优化包括查询速度优化,更新速度优化,mysql服务器优化 ...
- bootstrap selectpicker控件select下拉框动态数据无法回显的问题
有关于selectpicker下拉框数据回显的问题,当查看一个对象的属性的时候, 发现有关于selectpicker的下拉框并没有将返回的数据进行回显,显示的都是请选择, 经查证,当查看属性的时候,他 ...
- lintcode 447 Search in a Big Sorted Array(倍增+二分)
题意:给一个按照升序排序的正整数数组.这个数组很大以至于只能通过固定的接口ArrayReader->get(k)来访问第k个数.并且也没有办法得知这个数组有多大.找到给出的整数target第一次 ...
- 网络编程-Python高级语法-GIL全局解释器锁
知识点:GIL全局解释器锁其实和Python没有任何关系,是由于当初编写Python解释器时留下的,它只对多线程有影响,GIL保证同一时刻只有一个线程在运行,即使是多核配置电脑,同一时刻也只会让一个线 ...
- macOS上实现Qt应用程序做文件关联打开
一.背景介绍 用Qt开发的应用程序要实现文件关联,双击时用默认关联的程序打开文件,在Windows上这个功能非常容易实现.Windows应用程序在安装的时候可以在注册表中写入相关的键值对.打开文件的时 ...
- base和this的用法
[意义] this:指当前类,this调用当前类的属性,方法,包括构造函数的方法,继承本类的构造函数 base:指当前类的父类,可调用父类的非私有属性,方法,继承父类的构造函数括号里的参数 [用处] ...
