漫谈令人敬畏的Tableau LOD表达式

一生中可以喜欢很多(INCLUDE)人,但心疼的只有(FIXED)一个。因为我们终究会因为一棵树,而放弃(EXCLUDE)整个森林。

希望能够通过本文简短的分享,

打破大家对LOD表达式固有的印象,

重新对其有一个新的认识。

什么场合下使用LOD表达式?

数据结构不合理性(非Tab理想分析数据)

复杂的项目需求或算法

无法通过表计算获得稳定的数据完成高级分析

提升数据分析带来的体验

LOD表达式的类型

LOD表达式的定义

{//起始符

[FIXED | INCLUDE | EXCLUDE]//语法关键字

//指定用于分组的一个或多个维度

://用于分割维度声明与聚合表达式

//聚合表达式所执行的计算

}//结束符

SQL篇

LOD表达式的工作原理

Tableau中的计算大致分三类:基本计算(行计算、聚合计算)、表计算(视图计算)、LOD表达式(超越聚合的计算),其中基本计算与LOD表达式都是依赖数据源。为了深入理解LOD表达式的工作原理,我们采用抓取前端向源发送的SQL语句。以此来揭开LOD表达式神秘的面纱。

下面以连接超市示例数据(实时连接示例excel数据,无其他筛选器)为例,用聚合、FIXED、INCLUDE和EXCLUDE分别创建计算字段。

聚合计算:

操作:地区字段拖到行功能区,记录数(原始数据的每一行记录标记为1)拖至标记卡文本标签,一般可用于数据清洗加载后可以简单的做数据统计或计数。

SELECTSUM(1)AS

"sum:Number of Records:ok",

"订单$"."地区"AS"地区"

FROM"TableauTemp"."订单$" "订单$"

GROUPBY2

FIXED:

操作:创建计算字段

fixed=

从数据解释FIXED直接返回数据源总记录数,由于未声明维度且视图中的维度不参与分组计算,所以直接横穿整个数据源做聚合计算。对此未声明维度的计算可以使用表计算(WINDOW_*)替代,减少计算字段访问源数据所带来的资源损耗以此来提高报表性能。

SELECT"t1"."__measure__0"AS

"sum:Calculation_6150439353293189120:ok",

"t0"."地区"AS"地区"

FROM(SELECT"订单$"."地区"AS"地区"

FROM"TableauTemp"."订单$" "订单$"

GROUPBY1

)"t0"

CROSSJOIN(

SELECTSUM(1)AS"__measure__0"

FROM"TableauTemp"."订单$" "订单$"

HAVING(COUNT(1)> 0))"t1"

INCLUDE:

操作:创建计算字段

include=

非常惊讶的发现INCLUDE计算结果与聚合计算的结果一模一样。看似我们做了一件多此一举的操作。别忘了SQL留下的操作记录,从分析来看先根据视图维度以及计算声明的维度做聚合计算生成结果集,再次根据视图粒度做聚合,且两次聚合都是合计运算所以导致的结果与聚合计算类似,但是解读的数据粒度改变了,聚合计算在视图中统计了10000行记录,include在访问数据源中因为提前做了子查询,其真实在视图中统计了31行记录。我们可以改变计算字段的聚合函数,得到声明粒度的聚合值。

SELECTSUM("t0"."__measure__1")AS

"sum:Calculation_6150439353293189120:ok",

"t0"."地区"AS"地区"

FROM(SELECT"订单$"."地区"AS"地区",

"订单$"."省/自治区"AS"省/自治区",

SUM(1)AS"__measure__1"

FROM"TableauTemp"."订单$" "订单$"

GROUPBY1,2

)"t0"

GROUPBY2

EXCLUDE:

操作:创建计算字段

exclude=

fixed=

双击地区与计算字段,视图粒度的子查询与计算粒度的子查询做内关联,返回计算值。

//以上两种写法所生成SQL语句一样

SELECT"t1"."__measure__0"AS

"sum:Calculation_6150439353293189120:ok",

"t0"."地区"AS"地区",

"t0"."省/自治区"AS"省/自治区"

FROM(SELECT"订单$"."地区"AS"地区",

"订单$"."省/自治区"AS"省/自治区"

FROM"TableauTemp"."订单$" "订单$"

GROUPBY1,2

)"t0"

INNERJOIN(SELECT"订单$"."地区"AS"地区",

SUM(1)AS"__measure__0"

FROM"TableauTemp"."订单$" "订单$"

GROUPBY1

)"t1"ON("t0"."地区"ISNOTDISTINCTFROM"t1"."地区")

Excel篇

F4 vsLOD

在excel使用过程中,关于单元格的绝对引用、混合引用和相对引用是非常基本也是非常重要的概念。在使用函数公式过程中,如果不注意使用正确的引用方式可能导致返回预期之外的错误值。

看完陈述是不是一语惊醒梦中人

数据一

我们模拟一份XXX销售数据(Tableau最理想的分析数据),求每名销售代表月度目标达成率:

数据二

往往我们得到的是一份数据二的XXX销售数据,需求还是求每名销售代表月度目标达成率:

表计算

做任何事、学任何东西一定得好玩,否则就没意思了。

文章预告:

《你知道的Tableau,你不知道的Filters》

有关表计算,回复"表计算"获取详细视频教程:

大白(Myth)

一个误入数据分析行业

网络架构、系统运维、DBA、大数据,无一精通

喜欢和自己较劲,易沉迷于新技术,常在现实与虚无之间晃荡

梦想着成为一位会编程的旅行美食家

版权所有 | 原创精品 |禁止用于商业用途

合作事宜 | 请联系工作人员

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181218G1F3PJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券