Tableau 日&月环比&同比

  1. 最新日期的日环比

我们知道环比公式是:今天销售额/昨天销售额-1

一般数据源刷新方式是T+1刷新,所以数据源中的最近日期是相对日期的昨天,创建一个计算字段【日环比】:

sum(if [日期]=dateadd('day',-1,today()) then [销售额] end )/

sum(if [日期]=dateadd('day',-2,today()) then [销售额] end )-1

将创建好的计算字段【日环比】拖拽至文本上,会显示对应的环比,如图所示:

2.最近的月环比

同样的方法,创建计算字段【月环比】:

sum(if [日期]= datetrunc('month',dateadd('month',-1,today())) then [销售额] end )/

sum(if [日期]=datetrunc('month',dateadd('month',-2,today())) then [销售额] end )-1

3.月同比

创建一个计算字段【月同比】:

sum(if [日期]=datetrunc('month',dateadd('month',-1,today())) then [销售额] end)/

sum(if [日期]=datetrunc('month',dateadd('month',-1,dateadd('year',-1,today()))) then [销售额] end )-1

4.上月对比上上月的环比

创建一个计算字段【月汇总环比】

COUNT(if YEAR([浏览日期])=YEAR(dateadd('month',-1,today())) and MONTH([浏览日期])=MONTH(dateadd('month',-1,today()))  then [浏览主键] end )/
COUNT(if YEAR([浏览日期])=YEAR(dateadd('month',-2,today())) and MONTH([浏览日期])=MONTH(dateadd('month',-2,today()))  then [浏览主键] end )-1

解释:

YEAR([浏览日期])=YEAR(dateadd('month',-1,today())) :统计数据的年=今日的上个月的年份 ,

MONTH([浏览日期])=MONTH(dateadd('month',-1,today())):统计数据的月=今日的上个月的月份

(另一种相同写法:COUNTD(if YEAR([日期])=YEAR(datetrunc('month',dateadd('month',-1,today()))) and MONTH([日期])=MONTH(datetrunc('month',dateadd('month',-1,today())))  then [知识点ID] end )/
COUNTD(if YEAR([日期])=YEAR(datetrunc('month',dateadd('month',-2,today()))) and MONTH([日期])=MONTH(datetrunc('month',dateadd('month',-2,today())))  then [知识点ID] end )-1)

5.上周对比上上周的环比

创建一个计算字段【周汇总环比】

sum(if YEAR([日期])=YEAR(dateadd('week',-1,today())) and DATEPART('week',[日期w])=DATEPART('week',dateadd('week',-1,today()))   then [更新量] end )/
sum(if YEAR([日期])=YEAR(dateadd('week',-2,today())) and DATEPART('week',[日期w])=DATEPART('week',dateadd('week',-2,today()))  then [更新量] end )-1

6.计算同比和环比任意天数据

网上看了很多帖子,要实现同比和环比都是用lookup函数,但是如果数据并没有顺序或者一个月有很多行数据操作起来就比较麻烦了。

现在用一个比较简单的fixed函数来实现这个功能。看看fixed函数的用法:

这是个超级强大的函数,可以跨层级固定住指定的维度,甚至做得比较SQL还简便,例如超市里面想看顾客买牛奶的同时又购买了什么,对于结构化数据如果写SQL需要先订单出订单号再查看订单明细一共需要扫描两次,这只是看一个产品而已,如果看N个产品呢?计算量是非常大的,但是用fixed函数一次就可以同时查看N个产品的情况。

,再例如想看到明细的同时又看到汇总信息 ,会员的RFM求出每个会员最后消费日期等等,更多fixed函数的应用推荐这个链接,里面有各种LOD表达式的用法。

下面举例,要看某城市昨天相比上周同一天的销售增长。

首先,计算昨天的销售额,我把门店固定住,找昨天的销售额,创建计算函数

{FIXED [StoreID] : SUM(if [SalesDate]=TODAY()-1 then [netsales] end)}

这里利用tableau实现了sumif效果

然后把门店固定住,计算上周同一天的销售额

最后计算环比上周,搞定

我们可以把负增长的数据表示出来

效果如下:

Tableau同比或环比计算方法

方法1:官方提供的快速表计算:年度同比增长
计算字段:
(ZN(SUM([Sales])) - LOOKUP(ZN(SUM([Sales])), -1)) / ABS(LOOKUP(ZN(SUM([Sales])), -1))

简易版:
zn(SUM([Sales]))/LOOKUP(zn(SUM([Sales])),-1)-1

方法2:筛选年份同比上一年

步骤一:创建参数,选择int格式的。

步骤二:创建一个筛选字段,并拖到筛选器,选择真,此处的select year是步骤一的参数字段。

int(DATEPART(‘year’,[Order Date]))= int([select year])

步骤三:重新创建一个订单日期字段,用途是应用步骤一的参数,使其生效。

if int(DATEPART(‘year’,[Order Date])) = int([select year]) then [Order Date] END

步骤四:计算本年sales。

{ FIXED DATEPART(‘month’, [Order Date]):sum(
IF int(datepart(‘year’,[Order Date])) = int([select year]) then [Sales] END)}

步骤五:计算去年sales。

{ FIXED DATEPART(‘month’, [Order Date]):sum(
IF int(datepart(‘year’,[Order Date])) = int([select year])-1 then [Sales] END)}

步骤六:计算同比

即: 步骤四的sales/步骤五的sales-1

步骤七:计算一个颜色字段,此处的year over year sales=步骤六的同比

IF SUM([year over year sales])>0 then ‘green’

步骤八:将相关字段拖到行列位置:

将步骤三的日期拖到列,选择月份;
将步骤六的同比拖到行,显示标签
将步骤七的颜色字段拖到颜色。


方法3:通过设定日期月度范围来比较销售额

步骤一:这里重点是筛选器日期设置,创建一个计算字段,将此字段先拖到行或者列,由离散字段转换为连续字段,再拖到筛选器,选择你需要的日期范围

LOOKUP(MIN([Order Date]),0)

步骤二:将order date 字段拖到列,选择离散字段的year,然后再下钻到月份。

步骤三:将sales拖到行,然后选择快速表计算的同比【year over year growth】,添加标签。

方法4:与去年、2年前、3年前对比

步骤一:创建一个计算字段表当前年份,【current year 】
{ max(YEAR([Order Date]))}

步骤二:创建一个参数int类型,【select comparison time】
-1,显示为去年
-2,显示为2年前
-3,显示为3年前

步骤三:创建一个字段计算为对比年【comparison year】,current year 为步骤一的计算字段,select
comparison time是步骤二的参数

[current year ]+[select comparison time ]

步骤四:创建当前年份的sales【current year sales 】,current year是步骤一的当前年份

if YEAR([Order Date])=[current year ] then [Sales] END

步骤五:对比年的销售额【comparison year sales】

if YEAR([Order Date])=[comparison year ] then [Sales] END

步骤六:计算同比【current vs Comparison】

sum([current year sales ])/sum([comparison year sales])-1

步骤七:创建正数对比和负数对比

正数对比:IF [current vs Comparison]>=0 then [current vs Comparison] END
负数对比:IF [current vs Comparison]<0 then [current vs Comparison] END

步骤八:将步骤四、步骤二、步骤七的内容都放到标记的【标签】内,调整顺序

tableau 日周月筛选器_Tableau技巧——快速计算同比和环比(及其衍生)

同比和环比是统计分析中常见的功能,在Tableau中,通过表计算,我们不用写一行代码,就可以快速实现同比和环比。

环比

根据百度得到,环比增长率=(本期数-上期数)/上期数×100%。

以2016年10月销售额为例,环比增长率=(2016年10月销售额-2016年9月销售额)/2016年9月销售额*100。那么在Tableau中,怎么才能不写代码就得到环比增长率呢?不写代码?我书读的少,不要忽悠我哦!

以10.2版本为例,数据源使用自带的《示例 - 超市》,读取数据源后,将订单日期拖到行功能区,右键选择下面的“月”格式,并设置为离散,效果如下:

然后复制度量窗格的“销售额”,将“度量名称”拖到列功能区,按住ctrl键将“度量名称”从列功能区拖到筛选器区,并选择“销售额”、“销售额(复制)”两个度量字段:

将“度量”窗格的“度量值”拖到“标记”——“文本”:

这样我们就得到了一个按年月升序排列的销售额数据,接下来右键“标记”区的“总计(销售额(复制))”字段,选择“快速表计算”——“百分比差异”,就得到了我们想要的环比数据啦:

设置下字体格式,编辑下字段别名:

你没有看错,就是辣么简单!就是不写一行代码!就是辣么任性!环比就搞定了!!!

先不要高兴的太早,老话说,知其然,还要知其所以然。为什么Tableau计算环比这么简单,我们来看看原因在哪里。

在前面的操作中,我们使用了Tableau一个强大的功能,表计算。这里的表,并不是数据源对应的那个表,而是一个虚拟表,是在工作表开发界面由选择的维度和度量构成的一张虚拟表。在环比这个例子中,虚拟表是由“订单日期”按照年月格式显示的一个维度字段,和“销售额”、“销售额(复制)”两个度量字段,按照“订单日期”升序排列而创建。升序排列让Tableau知道该如何选择“本期”和“上期”,两个度量字段用于实际计算环比,但是最关键一步,还是在于选择的表计算类型“百分比差异“。让我们右键“总计(销售额(复制))”字段,选择“编辑表计算”,一探“百分比差异”的神奇之处:

这里有几个关键之处,首先我们看到“计算依据”选择了“表(向下)”,由于虚拟表是按照订单日期升序排列,因此“表(向下)”告诉了Tableau你计算“百分比差异”的顺序是往下,另外下面可以看到“相对于”——“上一”,这就是告诉Tableau,“上期”的位置是“当期”的上面一个数值。翻译成人话就是,从2013年1月开始计算,往下一直到2016年12月。第一个当期是2013年1月销售额,上期就是上一行,也就是2012年12月销售额,但是虚拟表中没有2012年12月销售额,因此2013年1月的环比为空。然后往下到第二行,2013年2月销售额为当期,那么上期就是上一行,也就是2013年1月销售额,这时候按照内置的计算逻辑:(2013年2月销售额-2013年1月销售额)/2013年1月销售额*100,就得到了2013年2月环比增长率,后面以此类推,直接2016年12月销售额计算完毕,整个表计算也就结束。

有同学会问,如果不是升序排列,而是降序呢?那么只要在“相对于”这里,选择“下一”就可以了:

再提高一点,除了通过可视化了解环比,还可以通过Tableau自动生成的代码来学习环比计算,我们可以双击“标记”区的“总计(销售额(复制))”字段,将里面的代码拷贝出来,贴到一个文本文件:

是不是看了有点晕,没关系,我们先解释下几个函数:

ZN函数是指如果括号里的表达式结果不为NULL,则返回它,否则返回0。用这个函数主要是处理NULL值。

ABS函数是取括号里表达式的绝对值。

重点来了,赶紧记赶紧记,LOOKUP函数是这段代码的灵魂,括号内分两部分,逗号前面是当前值,后面的-1表示上一个值,翻译成人话就是根据当前值,找它的上一个值。

三个函数明白了以后,这段代码的含义就可以理解为:

(当前值 - 根据当前值找到它的上一个值)/根据当前值找到它的上一个值的绝对值。虽然有点绕口,但这就是“表计算——百分比差异”在Tableau中的语法。

掌握了这个公式,其实我们就可以直接用代码来快速实现同比了。

同比

根据百度得到,同比增长率=(本期数-同期数)/同期数×100%。

以2016年10月销售额为例,环比增长率=(2016年10月销售额-2015年10月销售额)/2015年10月销售额*100。下面我们看下如何快速实现同比。我们复制刚才的“环比”工作表,重命名为“同比”:

然后我们双击“标记”——“总计(销售额(复制))”,将公式修改如下:

(ZN(SUM([销售额 (复制)])) - LOOKUP(ZN(SUM([销售额 (复制)])),-12)) / ABS(LOOKUP(ZN(SUM([销售额 (复制)])),-12))

想一下,为什么这里不是-1,而是-12了?

因为同比,只要日期中间没有中断,那么上一个值就应该是去年同月,自然等于当前年月-12了。

我们来看下结果:

2013年的12个月份,由于没有对应的2012年数据,因此同比也没有数据,第一个应该是从2014年1月开始。有兴趣同学可以逐一核对。

如果日期按降序排列,那么代码中只需要将-12替换成12就可以了,是不是非常的简单方便!

掌握了这个计算公式后,不论同比、环比,还是当前值与之前、之后的任一值进行比较,我们都可以快速通过修改代码,迅速得到正确结果,就是辣么爽!

注意事项:

1.日期序列中间不能有缺失,比如2016年12个月,如果没有5月份,那就变成6月-4月,这是不对的。因此需要对数据源做出处理,人为添加5月份,值为0即可。

2.由于这个方法与日期字段的排序有紧密关系,因此当用户修改了排序顺序后,原来的计算公式就失效了,聪明的你,是否有更好的解决方案呢?
 

你可能感兴趣的:(tableau,其他)