Tableau LOD与表计算

LOD

参考链接

https://www.tableau.com/zh-cn/about/blog/LOD-expressions

理论

前边这两种方法的共性是,如果拖拽一个其它维度的字段或者Detail shelf,那么整个视图的形态就会立即变化,根据当前最新的Detail层级变化

而,LOD的特色是,你可以在定义Detail层级的同时,独立于视图中使用的维度

一切设置都体现在计算字段的表达式中

INCLUDE: 以较低的Detail进行计算

如果不用LOD,那么就会以给定的视图维度计算。如果用INCLUDE,那么就先根据

举例: superstore数据,每个orderID会有多行购买商品记录。如何计算平均订货量?(即每个订单ID对应的Sales SUM,再按地区求平均)

{ FIXED [Order ID] : SUM([Sales]) }

即先对每个Order ID,求 Sales总和。再参与地区求平均

image-20210316142734000.png

在计算中使用 INCLUDE 关键字,OrderID字段就会明确包含在计算中,但置于可 视化内容中的其他所有维度(此例中为国家/地区和年份)也会如此。

INCLUDE 关键字可创建聚合度低于(即粒度较高)可视化详细级别的表达式。 执行计算前,指定维度会先添加到可视化详细级别中。

请注意,INCLUDE 表达式在视图中用作聚合度量。 实际上,所有 INCLUDE 表达 式在置于视图上时都会用作度量或聚合度量。

EXCLUDE:以较高的Detail机型计算

此类表达式很适合计算“总额百分比”或“与整体平均值之间的差值”。

视图以月为单位,查看各地区的Sales总额,但还想看到总Sales。

看tooltip:显示了Total Sales

img

地区虽然在视图中,但EXCLUDE将地区排除在外,创建了一个“高于”可视化Detail的LOD

image-20210316144654977.png

15大LOD

1. 客户订单频率

Measuring Customer Loyalty

图1:每个客户ID的订单ID种类数

图2:每个订单ID种类类(1 2 3 。。。)对应的客户计数


image-20210315113247852.png

image-20210315113301126.png

y: Number of customers LOD 未进一步聚合

x: CNTD(Customer ID) 聚合计数

这个表:

列1:每个CutomerID

列2:对应的 OrderID种类数。

列2做y轴,对列1 countd。

2. 阵列分析

Cohort Analysis

表1:每年的sales总量

表2:每年的sales总量,颜色按客户初次订单日期分组

{FIXED [Customer ID]: MIN([Order Date])}

image-20210315152535203.png

图1:x轴Date,y轴sum sales。color,lod。

图2:sum sales改为table calculation:percent of total。选择 table down。

计算百分比,每组内部只是Customer Acquisiton Date不同。

image-20210315153151013.png

3. 每日利润KPI

Daily Profit KPI

表1:每天的profit ;列Sum profit,行 Order Date

表2:字段Profit per day。LOD 计算每日Profit

Profit per Day :{ FIXED [Order Date] : SUM([Profit]) }

Daily Profit KPI:根据上面字段,进行分组。高收益,收益,不收益

表3:行 年 ,月;列 Dayily Profit KPI,CNTD(order date)

每月每组profit有几天。

4. 总额百分比

Percent of Total

{SUM(Sales)} 表示把整个Data Source的SUM(Sales) 成为一个大组,在筛选器之前作用。详细级别仍和当前一致(类似于在当前表加到最后一列)。因此要提取值的时候,需要SUM或MIN,得到一个值。

image-20210315163009978.png

比如这里只筛选了欧洲地区,但LOD显示的是全球总和。

image-20210315163057485.png

5. 新客户争取率

New Customer Acquisition

IIF([First Order Date] = [Order Date], "New", "Existing")

First Order Date: {FIXED [Customer ID]: MIN([Order Date])}

逻辑:每一个客户第一次买单日期作为新客户新增日期。然后按日期,计数所有客户。

思路:First Order Date为客户级别LOD,然后根据这个仅保留每个客户的首次订单记录。最后使用running total,得到客户逐步增长记录。

image-20210315165205804.png

6. 对比销售额分析

Comparative Sales

{ EXCLUDE [Category] : SUM([Selected Sales]) }

Selected Sales基于参数,指定一个category返回对应sales。

不跟据视图的Category,全部显示一样的Sales。

image-20210316150153656.png

7.各个销售的平均最大交易

Average of Maximum

WINDOW_AVG

8.实际对比目标

每个State 平均Sales-Target值

每个State中,Sales超过Target值的产品比例 (INCLUDE product) 以产品为基数计算总

image-20210324150701599.png

9.周期最后一天的价值

image-20210329162724120.png

已有该月份close price的平均值。

还需要该月份最后1天的close price。

{INCLUDE : max([Date])} INCLUDE后不跟维度,即跟视觉中的detail一致,即月份。

if {INCLUDE : max([Date])} = [Date] then [Adj Close] else 0 end 返回每月最后一天的close price

10.重复购买 阵列

image-20210329170322570.png
  1. 统计各顾客的第一个购买时间

    {FIXED [Customer ID] : MIN([Order Date])}

    或者 {EXCLUDE [Order Date]: MIN([Order Date])}

  2. 统计各顾客的第二次购买时间

    计算字段:初次购买为空,其他购买显示购买日期
    再次求初次购买日期

  3. 重复购买间隔 1和2的差值 datediff(“quarterr”,startdate,enddate)

11.平均值的百分比差异

image-20210330135203223.png

第二行:求给定时间区间的adj close均值。注意视觉维度是每个日期,每个ticker。(Date是exact date)已经是最细颗粒度了。

{FIXED [Ticker]: AVG([Close value in reference period])} 每个ticker求平均值。

第三行:1和2求差值的百分值。

12.相对周期筛选

考虑

计算top N所占百分比

{SUM([Profit])} 为最细颗粒度计算的SUM值,只是单个的值,没有聚合。

因此这里如果单格显示,应为ATTR。

如果要和SUM(profit)进一步计算,需要自己也变成聚合形式,就在外面再包一层SUM。

image-20210409163950762.png
image-20210409163940850.png

计算每个类别与 average per类别的差值

{exclude [Product Sub-Category]:AVG({FIXED [Product Sub-Category]: SUM([Sales])})}

里面的LOD 计算每个类别的sum sales,级别为category。

外面的LOD计算所有类别的avg,级别高于category。

如果不加外面的,average就只会基于category计算,那么仍然等于每个类别的SUM sales。

image-20210409165204908.png

在2011年有order的客户中,多少百分比的客户也在2012年有order?

LOD意义:每个客户,是否在2012年有order。把其所有order date进行判断,只有有一个1,那么max就可以得到1。并进行true false判定。

{FIXED [Customer ID]:
max( if year( [Order Date]) =2012 then 1 else 0 end)

}=1

filters中拖入order date,筛选2011年

image-20210413153116719.png

购买8次或9次的顾客数目:

LOD:每位客户的购买次数

{FIXED [Customer ID]:countd([Order ID])}

将柱状图在show me里面改为histogram,然后在marks中将size改为1

计算每个区域和south区的差值

image-20210413160239082.png

{SUM(IF [Region]="South" then [Sales] else null end)}

如果不打大括号,则detail为region级别。比如central里只计算central中的sales那么就是空。

作为LOD后,detail为所有region级别。

image-20210413160319769.png

LOD和filter的优先级

FIXED>视图筛选器>INCLUDE>上下文筛选器

表计算

Intro

表计算是对聚合后数据的 二次运算

当我们对汇总好的数据还是有分析的诉求。例如对汇总数据做个排名,算一下汇总数据各自的占比,根据时间的变化趋势等等。所以也就有了如下的二次计算的各种类型:

  • 差异计算
  • 移动计算
  • 百分比计算
  • 排名计算
  • 汇总计算
  • 分区字段定义范围:它们将视图分为多个分区或子视图。然后将表计算应用到每个分区内的标记。

  • 寻址字段定义方向:它们定义了计算的移动“方向”(例如,在计算汇总或计算值之间的差时)。(理解,即计算时候的颗粒度)

    打勾的是寻址字段。

    没打勾的是分区字段

简明介绍

Percence of Total:

使用编辑表计算,指定维度。

image-20210317135329566.png

有三个维度

如果都选中:则每年每区每个邮寄方式,放在一起算百分比

选中邮寄方式和区:则同一年的每区每个邮寄方式,放在一起算百分比。

选中维度,则是计算百分比的时候使用的detail

整个的表计算依据的确定被分成了三个部分:

  • 没有打钩的维度,也就是红色框内的维度,参与了数据的划分,可以理解为现根据这些维度进行数据的第一次分组。
  • 然后就是使用打钩的维度,也就是黄色框内维度,进行第二次数据划分。
  • 最后,对第二次分组的数据,用已经选择好的计算类型进行计算,可以有排序,占比,差异计算等各种运算。第一次分组只是隔离,第二次分组的数据,才会参与二次运算。

第一组就是分区字段;第二组是寻址字段

image-20210317135715348.png

各函数介绍

LOOKUP

LOOKUP(SUM([销售额]) ,2) 计算表达式后,向下偏移。即第2行。

LOOKUP([Daily Close],-1) 向上偏移1个的Daily Close值

RUNNING_AVG

从分区第一行到当前行的所有数据,计算AVG

FIRST():当前行索引+FIRST 则为第一行索引

当前行到分区的第一行的偏移(要回到第一行,往上移动,索引需要-n)。

当前行索引为3时,FIRST()为-2

image-20210318154115148.png

LAST():当前行索引+LAST 则为最后一行索引

当前行到分区中最后一行的行数。当前行索引为3(共7行),LAST()为-4

image-20210318154449107.png

WINDOW

start,end:

  1. 如果留空,相当于FIRST和LAST,即整个分区。跟当前行无关。、
  2. 与当前行的偏移。0表示当前行,2表示当前行往下两行。

WINDOW_AVG(SUM([Profit]), FIRST()+1, 0) 计算从第二行到当前行的 SUM(Profit) 平均值。

WINDOW_SUM(SUM([Adj Close]),0,2) 当前行到下面两行共三行的SUM值

多度量的文本表

方法一:将Dimension字段放在Row中,第一个度量放在Text中,双击第二个变量。Tableau会自动将 Maasure Name和Measure values都添加。之后可以自行添加和删除。下面可以双击键入新的度量值(函数)

image-20210317142505165.png

方法二:Measure Names拖到行,Measure Values拖到 文本。Measure Values Card(上面这个),拖入拖出度量值。

10大表计算

6.加权平均

TC-Weighted-Average

权重计算:Order Quantity在各类别的SUM / 总SUM

表计算方法:

sum([Order Quantity]) / window_sum(sum([Order Quantity]),First(),Last())

window_sum计算的是整个分区的SUM值。(当前表颗粒度)

LOD方法:

SUM([Order Quantity]) / MIN({SUM([Order Quantity])})

{}计算的是整个范围的SUM,但detail仍然是最细颗粒度。因此为了和前面的聚合一致,还要用MIN或者SUM做一次聚合。

image-20210322114837194.png

7.按计算分组

TC-Grouping-by-Calc

IF ( SUM([Shipping Cost]) -                              
     WINDOW_AVG(SUM([Shipping Cost]), First(), Last()) < 0 ) 
THEN  '<  avg' 
ELSE  '>= avg' 
END

根据与SUM之后再求均值来比较大小,来分组。

对应的LOD如下:在Product category级别做SUM计算,再高一级做计算。

{ EXCLUDE [Product Category]: AVG({FIXED [Product Category]: SUM([Shipping Cost])})}

表计算可以在视图汇总的基础上做进一步计算。

LOD需要时刻关注视频的详细级别。

image-20210322135558765.png

8.移动范围的事件数

incidence over a range

用Rows分组并dual axis,可看。

9.可变时段的移动平均

TC-Moving-Average

WINDOW_AVG(SUM([Sales]), -[Periods to Average:]+1, 0)

10.各时段与平均值的差异

当年平均值差异:仅选中季度维度

总体平均值差异:维度全部选中

其他问题

filter 顺序

表计算字段,可以放入筛选器中,但它不会影响计算结果。

img

比如,我需要根据sales来排序Category,并只显示top N。RANK(SUM(Sales))可以放入filters中,但它会筛选显示topN,但不会影响total的计算。

image-20210408112108543.png

方法二,建一个参数topN,然后在category的edit filter中,

image-20210408112205798

横总和,纵平均值问题

  1. grand total 是基于上面表格的维度,再进一步聚合。比如求sum,min,max等。

  2. 分区A、B有几种方法。

  3. 区分之后,B区 AVG({INCLUDE [Ship Mode]: SUM([Sales])})

    B区在聚合计算之前,先做上述计算:增加ship mode维度,先求sum再求avg(只有一个值了)。之后再根据表格维度聚合求sum。

image-20210408141558291.png

(i) IF FIRST()!=LAST() THEN SUM([Sales]) ELSE AVG({ INCLUDE:SUM([Sales])}) END

(ii) IF MIN([Ship Mode])=MAX([Ship Mode]) THEN SUM([Sales]) ELSE AVG({ INCLUDE:SUM([Sales])}) END

(iii) IF COUNTD([Ship Mode])=1 THEN SUM([Sales]) ELSE AVG({ INCLUDE:SUM([Sales])}) END

IF COUNTD([Ship Mode]) =1 then sum([Sales]) elseif countd([Region]) =1 then AVG({include [Ship Mode]:sum([Sales])}) else sum([Sales]) end

image-20210408142106158.png

百分比之后筛选

image-20210408152021833.png

lookup(min([Sub-Category]),0)

此处MIN功能的目的是将Subcategory变成一个聚合计算,这是lookup所要求的,当然也可以用MAX和ATTR等。

表计算得到的 sub-category list。

放到filter里,就是最低优先级的表计算筛选器。表计算之后才会筛选。

方法二:

image-20210408152235961.png

分母所包含的表范围LOD计算算出总体销售额,它属于Fixed详细级别计算,不受维度筛选器的影响,因此选中的所有维度都将保持原先的百分比值。

筛选后仍显示被筛选掉的value值0

方法一:不在filters中筛选,而是写在计算字段中。IF 条件1 and 条件2 then 0 else 0 end

用计算字段计数

其他

数据 discrete和continuous,会导致数据的显示和计算方式完全不同。

order date 由周1,周2变为1234,discrete变为continous

image-20210330155451583.png

参考

  1. quiz
  2. https://learningtableau.com/practice-quizzes/

https://learningtableau.com/qualified-associate-quiz-1/

https://interworks.com/blog/rcurtis/2016/03/21/tableau-deep-dive-lod-introduction-detail

地理字段(国家,城市,片区)为手动填写,导致填写错误或不规范,建议做成选择框,提供规范化的地理信息进行选择

增加机型表字段,提供标准化的机型列表供选择。目前的[产品名称]字段过于冗长,无法很好的归类。

https://www.vizwiz.com/search?q=tip+tips

https://www.storytellingwithdata.com/blog/2018/3/9/bring-on-the-bar-charts

https://interworks.com/blog/rcurtis/2017/12/05/tableau-deep-dive-table-calculations-custom-sorts-part-one

{ INCLUDE [SN+故障代码] : count([工单链接])-1}

{ FIXED [SN+故障代码] : count([工单链接])-1}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容