文档章节

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

o
 osc_a22drz29
发布于 2019/03/28 10:50
字数 964
阅读 7
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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

 文末有彩蛋,解决蛋疼问题

难度: ★☆☆☆(2星)

适用范围: ★(3星)

 

概况:

基于时间的汇总可能是最基础、最普遍用到的计算之一:计算年度销售总额,计算月度消费金额,某个店某个时期的销售情况等等。
这里的时间模式介绍用DAX实现时间相关的计算,它不依赖于DAX自带的时间函数(譬如YTD,MTD等等)。
如果你有特殊的日历,特定特定时间段的计算(例如:按周计算、按trimester计算),用这个这个模式都能够解决。

此文涉及前文DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比的扩展部分,给出具体实例和解决方法。
日期维度表参见:如何生成日期维度表

应用场景:

以下是几个应用场景:

• 计算年底销售总额
• 计算月度流量总额
• 进一步计算同比,环比

 

最终PowerBI效果显示如下(耐心等待PowerBI 出来,噔噔噔噔~~~)

 

 https://app.powerbi.com/view?r=eyJrIjoiYzZlYzgxYzItZTA1ZC00ODVmLTlkNjUtZGRlYjdlMDFjOWNlIiwidCI6ImQxYWY4NDdiLTJjZTEtNDRjYi1iYjUwLWQ1ODAyYmI0M2M4YiIsImMiOjEwfQ%3D%3D

 

欢迎转载,请保留原文链接和作者信息。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

1 [Amount LYMTD] :=
2 VAR maxSalesDate =
3     MAX ( 'Sales 0'[skDate] )
4 VAR dateRng =
5     FILTER ( ALL ( 'Date' ), 'Date'[Date] <= maxSalesDate )
6 RETURN
7     CALCULATE ( [Amount MTD], DATEADD ( 'Date'[Date], -1, YEAR ), dateRng )

 

月度环比 MoM

1 [MoM] :=
2 IF (
3     [Amount MTD] <> BLANK (),
4     DIVIDE ( [Amount MTD] - [Amount LMTD], [Amount LMTD] )
5 )

月度同比 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,库存对比,年度环比,月度环比

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
PowerPivot+PowerQuery+PowerBI国内文章导航

导航更新于:2017年11月8日,最新更新,欢迎大家访问Powerbi.cc,关注知乎专栏【Power BI】 在介绍之前先看一篇干货吧!我觉得这也是学习这套插件的最主要的目的,我们一起看一下高飞老师给我...

雷公子
2017/04/04
0
0
【必】PowerBI 大型原创精华-5000小时50万字-饕餮盛宴 - 知乎

V 0.1.00 - 190827 - 初始发布。 前言的前言 根据与出版社编辑的交流,本文等同于一部400页的图书。本文有核心的目标,有体系化的划分,有视频教程体系的辅助,有思想的总结。 总之,这不仅仅...

PowerBI战友联盟
2019/10/21
0
0
函数周期表丨筛选丨表丨ALLSELECTED - 知乎

ALLSELECTED函数 ALLSELECTED函数,被微软划分为“筛选”类函数,隶属于“表函数”。其用途,常常是用来计算或者显示明面上的筛选影响,而忽略其行上下文的影响。 如果说,CALCULATE函数是D...

简快EXCEL 之 Power BI 建模分析
前天
0
0
函数周期表丨时间智能丨值丨TOTAL函数系列(修订) - 知乎

TOTAL函数系列 TOTAL函数系列共包含三个函数:TOTALMTD函数,TOTALQTD函数,TOTALYTD函数。 隶属于“值函数”,用途相对于DATESMTD系列函数更为直接。 用途:用来计算月初/季度初/年初迄今的...

简快EXCEL 之 Power BI 建模分析
06/10
0
0
函数周期表丨时间智能丨值丨OPENINGBALANCE系列 - 知乎

OPENINGBALANCEMONTH函数 OPENINGBALANCEQUARTER函数 OPENINGBALANCEYEAR函数 OPENINGBALANCE系列函数一共包含三个函数:OPENINGBALANCEMONTH函数,OPENINGBALANCEQUARTER函数,OPENINGBALA......

简快EXCEL 之 Power BI 建模分析
05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

百度技术沙龙第67期 百度开源专场

本文作者:HelloDeveloper 具体的产品案例,分享百度开源技术最新实践经验。目前这些项目都已经在 github/baidu 上开源。 什么是 PaddlePaddle 深度学习平台? 首先做个简单的介绍,PaddleP...

百度开发者中心
2019/07/23
11
0
Hacker News 简讯 2020-07-10

更新时间: 2020-07-10 01:15 US Supreme Court deems half of Oklahoma a Native American Reservation - (reuters.com) 美国最高法院认为俄克拉荷马州的一半是印第安人保留地 得分:131 | 评...

FalconChen
今天
26
0
OSChina 周五乱弹 —— 求求你吃了我吧,不要再玩弄食物的感情了

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @巴拉迪维 :张喆的单曲《陷阱 》 这首歌已经在网易找不到原唱了,不知道被哪家买了版权。#今日歌曲推荐# 《陷阱 》- 张喆 手机党少年们想听歌...

小小编辑
今天
32
1
清华陈文光教授:AI 超算基准测试的最新探索和实践。

道翰天琼认知智能平台为您揭秘新一代人工智能。 无规矩不成方圆。放在超级计算机的研发领域,没有一个大家普遍接受的算力评测指标,便难以推动超算迅猛发展。 而现在伴随着人工智能的发展,大...

jackli2020
今天
7
0
@RequestMapping, consumes 提交简单有意思的测试

getParm @GetMapping("getParm")public Result getParm(String id){ System.out.println(); return ResultFactory.success(id);} 等同于 == bodyParm @PostMapping("bodyParm......

莫库什勒
今天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部