前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何巧妙的使用Power BI计算同比增长

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

作者头像
公众号PowerBI大师
发布2019-11-12 11:22:52
8.1K0
发布2019-11-12 11:22:52
举报
文章被收录于专栏:公众号PowerBI大师
背景介绍

小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的魅力。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI大师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 知识点
  • 如何做?
  • 总结
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档