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] :=
CALCULATE (
[Amount],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
  

[Amount YTD] :=
VAR maxSalesDate =
MAX ( 'Sales 0'[skDate] )
VAR dateRng =
FILTER ( ALL ( 'Date' ), 'Date'[Date] <= maxSalesDate )
RETURN
CALCULATE (
[Amount],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
),
dateRng
)

  

 

 

最终效果

参照 上文的PowerBI显示。

Time-Pattern,日期度量值对比,度量值汇总, 同比,环比,YoY, MoM,库存对比,年度环比,月度环比

DAX/PowerBI系列 - 关于时间系列 - 时间相关数值比较 - 用非自带函数的更多相关文章

  1. DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate Date Dimension)

    跟大家的交流是我的动力. :) DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate Date Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★ ...

  2. DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension)

    DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★★(5星) 这个时间系列想 ...

  3. (玩起来)DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比

    盆友们,边看文章边玩,请耐心等待PowerBI load出来~~~~ (7.8秒钟) DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比 难度: ★☆☆☆☆ ...

  4. DAX/PowerBI系列 - 父子层级(Parent-Child Hierarchy)

    DAX/PowerBI系列 - 父子层级(Parent-Child Hierarchy)参考文章见最后 难度: ◆◆◇◇◇(2星) 应用场景: 其实很多时候对数据汇总都会有层级关系的问题,不过说的不是 ...

  5. DAX/PowerBI系列 - 累计总计(Cumulative Total)

    DAX/PowerBI系列 - 累计总计(Cumulative Total) 2017/07/23 更新:B列公式(见最后) 难度: ★★☆☆☆(2星) 适用: ★★☆☆☆(2星) 概况: 这个模式普 ...

  6. DAX/PowerBI系列 - 参数表(Parameter Table) 度量值模板

    DAX/PowerBI系列 - 参数表(Parameter Table) 度量值模板 难度: ★★☆☆☆(2星) 适用范围: ★★★☆☆(3星) 概况: 当你有多个度量值都需要计算YTD,MoM,而又 ...

  7. DAX/PowerBI系列 - 库存总价值(Inventory Value)

    DAX/PowerBI系列 - 库存总价值(Inventory Value) 欢迎交流与骚扰 难度: ★★☆☆☆(2星) 适用: ★★☆☆☆(2星) 概况: 有多少货(库存)当然重要(对于运营人员), ...

  8. DAX/PowerBI系列 - 累计总计(Cumulative Total, Running Total)

    DAX/PowerBI系列 - 累计总计(Cumulative Total) 2017/07/23 更新:B列公式(见最后) 2019/08/08 更新:在可视化数据的时候,一定要选择日期维度的日期列 ...

  9. DAX/PowerBI系列 - 参数表(Parameter Table)

    DAX/PowerBI系列 - 参数表(Parameter Table) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★☆(4星) 概况: 这个模式比较简单灵活,而且很实用.所用的DAX语句也比较简 ...

随机推荐

  1. 20165314 [第二届构建之法论坛] 预培训心得(Java版)

    安装IDEA配置JDKsourcepath啥的之前已经弄好了 克隆项目 emmm这次的代码托管部分好像比之前做的要简单,之前还要git config啥的,还有就是git clone不会提示要输入账号密 ...

  2. 天梯赛 L1-043 阅览室

    L1-043 阅览室 (20 分) 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为 ...

  3. CSS之三个模型 盒子模型 轮廓模型 内外边距

    盒子模型 最终元素的总宽度计算公式是这样的: 总元素的宽度=宽度+左填充+右填充+左边框+右边框+左边距+右边距 元素的总高度最终计算公式是这样的: 总元素的高度=高度+顶部填充+底部填充+上边框+下 ...

  4. 安装酷痞到IIS7.x共用80端口Windows(64位)系统下运行多个酷痞

    需求: 1.酷痞直接运行的模式是自宿主运行.由于win系统一般都由iis提供多个网站服务,并首先占用了80端口,如果想酷痞可以直接通过主机头和iis共用80端口会出现这种运行模式的需求. 以下是实现方 ...

  5. Windows Server 2008 R2 修改远程桌面服务RDP默认端口及相应的防火墙配置

    修改以下两个注册表项当中的默认端口3389为自定义端口: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wd ...

  6. POJ 1985 Cow Marathon (模板题)(树的直径)

    <题目链接> 题目大意: 给定一颗树,求出树的直径. 解题分析:树的直径模板题,以下程序分别用树形DP和两次BFS来求解. 树形DP: #include <cstdio> #i ...

  7. Android高级工程师面试实战,您会挂么?

    xxx公司面试总结 面试形势 群聊(2个面试官+HR+自己) 面试流程 自我介绍 面试官根据你的介绍开始问 你对我们公司有什么想了解的么(复活卡,要时回到没有了也就没有了,可以让面试官给自己提一下建议 ...

  8. BZOJ.3566.[SHOI2014]概率充电器(概率DP 树形DP)

    BZOJ 洛谷 这里写的不错,虽然基本还是自己看转移... 每个点的贡献都是\(1\),所以直接求每个点通电的概率\(F_i\),答案就是\(\sum F_i\). 把\(F_x\)分成:父节点通电给 ...

  9. angular.isDate()

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. Qt中在UI文件中新建控件并命名,但在代码中无法识别UI中的控件?

    代码中添加FilePathLineEdit控件,显示标准文件选择对话框显示选择的文件路径,但在槽函数中ui->FilePathLineEdit->setText("FilePat ...