专栏首页公众号PowerBI大师如何巧妙的使用Power BI计算同比增长

如何巧妙的使用Power BI计算同比增长

背景介绍

小SUN目前就职于一家葡萄酒分销公司,其主要职责就是为业务部门提供数据分析报告,其中一份报告是追踪销售团队的KPI并与去年同期进行对比。

我们都清楚在做数据分析时,独立的展示一个数字是没有任何意义和价值的,这个数字必须放在其对应的语境中。比如下面的一篇关于某白酒公司的报告

“2019年上半年,洋河股份实现营业收入159.99亿元,同比增长10.01%;归属于上市公司股东的净利润为55.52亿元,同比增长11.52%;扣非净利润为52.09亿,同比增长为17%。”

在上面的例子,我们可以看出,一般性的数据分析报告先是陈述一个数字,然后展示出这个数字与去年的同比增长或者减少的比例,这也是公司营收报告的普遍陈述方式。

小SUN在制作该KPI报表的时候,与业务部门进行了充分的沟通,了解到业务部门更加希望可以追踪到自己每天的业务表现,所以在制作该报表时如何做到与去年同期按天相比而非是和去年的整月相比就是一个急需解决的难点,比如本月的销售是从11月1号到11月10号,在与去年相比也就是和2018年11月1号到11月10号的销量进行对比,而非和去年的整个11月相比。

下面我就结合Power BI功能,如何利用DAX更加智能便捷的解决这个难题;

知识点

数据模型:日期维度表和事实表

DAX基础公式:

CALENDARAUTO

SUM

CALCUALTE

SAMPERIODLASTYEAR

如何做?

我们先把销售数据源导入到Power BI的桌面版里面。

(表1-1)

在Power BI里面如果要和日期打交道的话,其中一个先决条件就是要有一份单独的日期维度表。PowerBI会根据我们导入的销售历史数据上面的日期,在上面表格中就是Order Date订单日期,来自动为我们创建一个Data Hierachy。

(表1-2)

但是我们不建议使用这个系统自动生成的日期维度,具体缘由,我们会单独分享文章来阐述需要自建一个日期维度表的重要性以及如何创建日期维度表。所谓条条大路通罗马,实现一个目标,有多种实现方式,这在Power BI的学习中,更是特别适用。

我们今天就优先学习一种,如何通过销售表格里的日期,自动生成一份日期维度表

我们需要用到DAX的CALENDARAUTO来创建一个Calculated table。 这个功能会根据你目前有的数据模型当中最大日期和最小日期自动来创建一个日期维度表。

这个日期表,将会是我们是否能够最大限度的使用Power BI自带的Time Intelligence的一个先决条件。然后我利用DAX新加了Year和Month的Column。

(表1-3)

紧接着就是通过建立relationship,创建一个简单的数据模型Data Model

(表1-4)

我们的目标是把今年的数字与去年的数字做一个正确的年增长率计算。在这个计算之前,我们要通过DAX写出几个基础的数值,这里要用到几个DAX的基本概念

SUM, CALCULATE, SAMEPERIODLASTYEAR

Total sales = SUM(Sales_Data[Revenue])

Total Sales LY = CALCULATE([Total sales], SAMEPERIODLASTYEAR('Date'[Date]))

(表1-5)

通过上述的简单计算,我们算出了去年的同期数字,这样就大功告成了吗?

还没有!DAX计算引擎依照2019年的整个日期为基础,算出了2018整年的数字。但是这并非是我们想要的结果,我们想要的是依照今年的当期日期为基础,算出去年的同期数值,这样才是apple to apple对比,对吧?

如果这里我解释的不是很清楚的话,那么请允许我把月份的这个时间维度加入到这里来。可以看到,2019年的数据是刚从7月份开始的,但是依照上面的DAX计算出了去年整年的数字。

(表1-6)

首先,我们需要知道我们销售订单里面的最后日期,可以通过下面的公式得出

LastSalesDate = LASTDATE( DATEADD( Sales_Data[OrderDate], -12,MONTH))

这里我们用了LASTDATE,依照销售订单里的日期决定了目前最后的日期是2019年的最近日期是2019年7月1日,然后倒推12个月到2018年7月1日。我们不能用日期维度表里面来计算,否则我们就会得到的日期是2019年12月31日。

下一步我们要得出我们要计算销量的第一个日期,可以通过下面的公式计算出

First Date = FIRSTDATE( DATEADD('Date'[Date], -12,MONTH))

得出的第一个日期是2019年1月1日,然后也倒推12个月的日期是2018年1月1日。

现在我们需要计算出这两个日期区间有多少天,可以用DATESBETWEEN功能。

Total Sales LY Correct =

CALCULATE([Total sales],

DATESBETWEEN( 'Date'[Date], [First Date], [Last Sales Date]))

通过这个计算公式,可以帮我们算出两个日期区间的销售额。我把错误的数值和正确的数值分别都罗列了出来,可以见下图。

(表1-7)

但是我们还有一个问题没有解决,我们把总营业额22.3M作为了2018年的整年销售额。为什么呢?原来是两个日期First Date和Last Date把空白值也算了出来。

DATESBETWEEN功能,如果两个日期区间的日期是空白的,它会把这个日期区间得出的数值呈现出来。我们需要确保如果两个日期区间的日期是空白的,就得出BLANK, 否则的话,就得出正确的Last Year 销售额,我们需要对上面的公式,稍作修改;

Total Sales LY Correct =

IF(ISBLANK([First Date]) || ISBLANK([Last Sales Date]), BLANK(),

CALCULATE([Total sales],

DATESBETWEEN( 'Date'[Date], [First Date], [Last Sales Date])

))

(表1-8)

这样就得出了一个完美的结果了。

当然最后一步就是计算出年增长比率了。

YoY Growth % = DIVIDE( [Total sales] - [Total Sales LY Correct], [Total Sales LY Correct],0)

(表1-9)

按照文章开头报道白酒的方式,我们就可以这样写:

"2019年上半年,公司实现营业收入2千万元,同比跌幅10%左右"

总结

如果你能看到这里,有些人可能会觉得,有点复杂,同样的事情可能在Excel里面,几分钟就搞定了,为什么在Power BI里面要把自己搞的这么晕头转向的。

如果只是分析这一个维度的话,的确是Excel要便捷很多,但是在现实分析的世界里面,绝非只是分析一个时间维度的增长就可以了,你要分析公司的产品,客户,分析各个地区的销量情况。

如果用Excel,你要来来回回做几张表格才行。但是在Power BI的世界里面,你只需要写出这一个公式后,其他的分析维度,只需要通过简单的鼠标“拖”“拉”“拽”就可以快速的实现你的业务分析需求。

我们会在接下来的文章里与您分享更多Power BI的魅力。

本文分享自微信公众号 - PowerBI大师(PowerBIMaster)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 技巧—新建日期表

    不同行业的分析,维度表有类别之分,数据表有指标计算之别。但当谈到日期时,基本是一致的。而且日期表也是我们使用时间智能的前提。

    公众号PowerBI大师
  • 东哥陪你学DAX — Datediff/Yearfrac

    yearfrac也是计算两个日期的间隔,不过这个间隔不用具体的年月天数来表示,而是通过相隔天数占一年的比例来表示

    公众号PowerBI大师
  • 用PowerBI分析上市公司财务数据(二)

    笔者认为要具备以下条件:一是理解业务数据,知道主要分析的指标及潜在的报表分析需求;二是对DAX表达计算逻辑、特性有一定的了解。

    公众号PowerBI大师
  • Hacking with iOS: SwiftUI Edition - BetterRest 项目——使用日期

    让用户输入日期就像将类型为Date的@State属性绑定到SwiftUI控件DatePicker一样容易,但是之后事情会变得更加复杂。

    韦弦zhy
  • PowerBI 保持数据刷新后仍显示最后一天

    PowerBI 提供了自动化的报表,每天都会更新。问题是如何保持报告每天都被默认选择为当天?

    BI佐罗
  • Linux中的磁盘管理

    计算机由CPU、内存(RAM)和I/O设备组成,其中I/O设备主要指磁盘和网卡,磁盘用作持久的数据存储。 磁盘的接口类型有并口和串口。并口指一根线缆上可以用于...

    魏晓蕾
  • Spring之AOP适配器模式

      Spring架构中涉及了很多设计模式,本文来介绍下Spring中在AOP实现时Adapter模式的使用。AOP本质上是Java动态代理模式的实现和适配器模式...

    用户4919348
  • Chrome 35个开发者工具的小技巧【动态图演示】

    谷歌浏览器如今是Web开发者们所使用的最流行的网页浏览器。伴随每六个星期一次的发布周期和不断扩大的强大的开发功能,Chrome变成了一个必须的工具。大多数可能熟...

    前朝楚水
  • 5-5 webapck-dev-server 解决单页应用路由问题

    对于单页应用 spa,大家应该都不陌生了。本节主要介绍 webpack-dev-server 如何解决 spa 遇到的路由问题。

    love丁酥酥
  • KVM学习及应用的七个阶段

    KVM虚拟化的学习,也可以分为七个阶段,经过七个阶段的学习,就在生产环境中完成虚拟化任务。

    力哥聊运维与云计算

扫码关注云+社区

领取腾讯云代金券