跳至正文

【Tableau】详细级别表达式LOD_详尽入门(1)

【2022年3月】

喜乐君在B站发布了V2.0版本的“15大详细级别表达式”解读,非常推荐学习LOD的用户观看。

https://www.bilibili.com/video/BV1ZR4y157ka/

强烈推荐直接去查看视频,而非本文。

【2021年4月】

近期,应Tableau大中华区市场部之邀,在公众号中梳理了LOD的关键理解,博客文章如下:

“高级业务分析的必由之路”——从Quick LODs说起

官方公众号文章:https://mp.weixin.qq.com/s/3XSRJ9HNlOGFyRssUR6B_Q

【2020年8月】

今年年初疫情在家,集中时间写完了《数据可视化分析:Tableau原理与实践》一书,已经由由电子工业出版社·全彩印·出版。书中的高级计算将LOD表计算、表计算和普通计算做了全新的体系介绍,与博客已经有本质的差异。京东地址:

图书链接:数据可视化分析:Tableau原理与实践(全彩)(博文视点出品)

【2019年中秋】很多人联系我说“LOD博客帮助很大”,“是最清晰的LOD博客”,但有感觉多有赘绕。毕竟是分多次所写,近半年一直没有重大更新。中秋三天,我终于把最难的LOD表达式的核心原理视频录制完成了,可以作为本博客的修订版本。

很多人希望我修改博客,但是我知道过去的思维已经很难打破,困难重重。录制视频的好处是,强迫自己闭关三天开发了一套全新的分析视角,录制过程“制作PPT——录制1080P视频”一气呵成,完全超过我自己的想象。在视频中,我把行级别、视图级别、表计算、LODs整合在一起,分为了三类六种的Lod表达式,然后由浅入深层层分析。会比此前的博客更加容易接受,特别适合于没有IT基础的业务用户。

了解此次课程的缘起和框架说明,可以阅读:【视频】Tableau广义LOD表达式相对论

注:持续修改,致力成为全面易懂、非官方、最好的中文LOD帮助手册。

【喜乐君按】时隔多年,喜乐君在2023年对本文做了修订。

【喜乐君按】在学习Tableau过程中,详细级别表达式是最大的拦路虎。这篇博客,最早写于2017年8月,多年时间做了N次重大修改,并增加了续篇。

LOD表达式是Tableau学习过程中特别重要的一关,迈过去,Tableau的可视化可以变化无穷。近期重新梳理自己的学习过程,把几个重点的节点做分析,希望帮到更多的Tableau学习者。

注:本文及续篇,非特别说明,“详细级别表达式”、“LOD表达式”均指Fixed、include和exclude三种LOD表达式。

  • LOD=“详细级别”(level of detail),“详细级别”的含义,及与“详细级别表达式”(Fixed/ Include/ Exclude LOD expression)的关系与区别;
  • Tableau中不同的详细级别,及其对应的表达式;
  • LOD表达式对视图详细级别的影响;
  • LOD表达式与表计算的区别与关系。

 

一、详细级别与详细级别表达式

理解详细级别表达式(LOD expression),首先要理解什么是详细级别(LOD=level of detail)。详细级别是数据聚合度/颗粒度的层次,英文简单易懂,Level of Detail;不同的Level,代表不同的数据聚合度、不同的颗粒度。

详细级别表达式,并不是独占LOD这个词汇!“详细级别表达式”,只是用来更清晰地处理有关详细级别问题的一种表达式。处理什么问题?处理在一个可视化视图中包含多个数据详细级别的问题(多个详细级别,意味着多个数据聚合度/颗粒度)。

LOD Expressions represent an elegant and powerful way to answer questions involving multiple levels of granularity in a single visualization.
LOD表达式是回答有关单一视图中包含多个数据颗粒度级别问题的,简洁而强大的方法。

1、Level of detail详细级别

在说LOD表达式之前,我们先看看Tableau有哪些重要的“详细级别”?以我目前有限的理解,Tableau有三种主要类型的数据详细级别,结合下面的图片,可以看到它们各自的位置。

从技术角度看,分析即聚合,分析是从数据明细表到问题结果表的聚合过程,聚合的起点和终点所对应的详细级别,分别称之为“数据表详细级别”和“视图详细级别”。

  • Table Calc Level of Detail(表计算详细级别)
  • Viz Level of Detail  (视图详细级别,viz=visualization视图)
  • Row Level of Detail(行级别详细级别)

详细级别和数据的聚合度、颗粒度对应;越往上,对应的聚合度越高、颗粒度越低。

任何一个问题,都是从数据明细到问题的聚合过程,这个聚合所对应的级别,就称之为“问题/视图详细级别”,对应SQL查询中的GROUP BY。而直接聚合的起点,也就是数据表所对应的主键,就是数据表的详细级别。

!!“LOD表达式”本身不是一种详细级别,而是一种关于LOD的语法表达式,(通常情况下)它不会脱离当前的视图详细级别而单独构建视图;通过它,在原有的“视图详细级别”基础上,增加新的详细级别数据。理解了这一点,是理解LOD Expression在可视化分析中位置的关键要点。

为了更好的理解,我们在上图的基础上增加了LOD的示例图,这里要特别注意两条红色的线条,它的意思可以理解为,把LOD表达式生成的结果返回到视图层面,从而完成LOD表达式的使命——在一个视图中体现多个详细级别的数据。

详细级别与LOD

接下来的一个问题是,LOD表达式,如何通过影响数据的颗粒度和聚合度,参与到当前视图中?

2、 详细级别、聚合度、颗粒度

不同的详细级别代表不同的数据聚合度和颗粒度。Tableau通过把维度字段、系统自定义的表达式加入到视图,从而决定视图数据的详细级别,之后通过预设的视图表达出来。

维度、系统预设的表达式(比如表计算)、用户自定义的表达式(比如自定义的集合字段、LOD表达式)本质上返回的都是一个数据集合,这些数据集合的详细级别,通过不同的视图表达出来。

如何理解上述的过程?为此,我们先要了解何为聚合度和颗粒度。不同于面向行数据的Excel,Tableau面向大数据的数据分析和展现,因此我们所看见的数据绝大多数都是聚合的,这就需要我们非常熟悉每个视图代表的数据的聚合程度。这个聚合程度在Tableau中用聚合度Aggregation 或者颗粒度Granularity 表示。

在Excel中,看数据明细;在Tableau中,看数据的聚合程度。
理解LOD,是从Excel到Tableau的本质性跨越。

Tableau的不同的LOD详细级别,对应的是不同数据的聚合度和颗粒度。

我们换一个形象的说法来表达什么是“详细级别”、聚合、颗粒度。

假定全公司的HR薪酬数据是一座冰山,上面是尖尖的数据之巅,下面是沉没在海平面之下的详细到每个人、每天、每项工作的薪酬计算的庞杂数据。通过下面的图,我们可以形象地设想,冰山之巅,就是聚合度最高、颗粒度最低的数据,也是详细级别最低的数据,比如总公司、全年度的薪酬发放金额——可能仅仅是一个绝对值数字而已(数值完全聚合,不能再进一步聚合,可以理解为一个散点图中的一个点)。而越往下,数据的聚合度越低,颗粒度最高,数据的详细级别也就最高,最高颗粒度的数据可能是员工的考勤数据和发放明细(数值完全解聚)。

数据可视化和分析的过程,伴随着数据不断的聚合和解聚,以及数据详细级别的变化。这就是可视化分析的魅力。

Screen Shot 2019-04-14 at 5.05.49 PM.png

Apr 14, 2019  更新图片

在Tableau中,每增加一个维度,就意味着数据的详细级别聚合度在向下移动,在视图中的标记就会增加,比如说,我们在部门、实发金额的基础上增加其他维度到视图中,视图中的标记就会越来越多,数据颗粒度越高、数据越详细。比如下面的图片:

维度

度量

说明

部门

实发金额

各部门实发金额的对比

部门、薪酬分类

实发金额

各部门、各个薪酬分类的实发金额聚合

部门、薪酬分类

实发金额、实付金额

各部门、各个薪酬分类中实发金额和实付金额的聚合

部门、员工、薪酬分类

实发金额、实付金额

各部门、各个员工,各个薪酬分类中实发、实付金额聚合

分月、部门、员工、薪酬分类

实发金额、实付金额

各个月份中,各部门、各个员工,各个薪酬分类中实发、实付金额聚合

3、冰山之喻与LOD expression

在理解了LOD和聚合度、颗粒度之后,我们看一下LOD expression的必要性。

针对某个公司的某年度的员工出勤明细和薪酬明细,当我们问一个问题时,我们大多是看某一个特定的数据层面的问题,比如“看一下各部门年度薪酬总额的对比”,这是一个level的数据,用条形图的每个长条可以代表一个部门及其薪酬总额,通过长度就可以直观对比差异。

如果问题难一点,比如说“看一下各部门中员工平均薪酬的差异”,继续使用条形图,条形依然代表部门,长度代表什么呢?代表员工平均薪酬。可是平均薪酬需要依赖于每个员工的薪酬总额取平均,这个问题的详细级别和之前的部门薪酬不在一个级别上。因此,这个可视化包含了两个不同颗粒度的数据:每个员工的薪酬总额(比如1000人)、各部门的总薪酬(比如10个部门)。这就意味着,我们不能通过一次操作来完成,而需要使用额外的方法增加另一个数据级别。一个视图默认是一个详细级别(level of detail),当我们需要展现两个level of detail时,就需要用到LOD expression。LOD表达式帮助我们解决一个视图中包含多个详细级别的问题。(具体在应用上如何思考这个问题,建议看后面的一篇LOD- 【Tableau】详细级别表达式LOD_终极实践指南与资源大全(3),官方提供了一个思考的框架。)比如下面的问题:

  • 公司不同销售频次的客户数量分布(即消费1次,2次,N次的会员分别多少)
  • 每个区域中 的 客户购买力(指各个销售员的最大一笔订单的平均值)
  • 每年的销售中,各年度新增会员的消费占比分别是多少?

LOD表达式的作用是什么?借用冰山之喻,数据是整座冰山,冰山中有我们能看到的各种要素(比如部门、员工、日期等),可视化的部分是在海平面之上的部分。最简单的可视化方式就是把冰山下的要素直接“拖拽”到上面,不管加入多少要素,最终Tableau会确定性地返回对应的一个详细级别。而遇到上面的复杂问题,我们需要在Tableau返回的确定性的详细级别之外,引用冰山之下的另一个详细级别的数据,同时不想让这个详细级别的要素(维度)出现在可视化的层面,应该如何?——引用聚合值,但维度却不出现。

Screen Shot 2019-04-14 at 5.05.49 PM.png

这时Tableau LOD提供了一个上升或者下降的通道,实现了“引用但不可见”(比如include),甚至可以不受视图和维度筛选影响,直接使用fixed指定引用。“引用但不可见”,就是使用LOD表达式,可以(在目前的维度基础上)引用冰山一下的字段,让它间接出现在可视化中,同时不影响可视化原有的框架表达。同样,也就出现一个下降的通道,可以把部分不需要的字段,通过exclude排除掉,同时又不影响冰上可见的部分。

屏幕快照 2019-08-07 下午12.46.59

【Sep 30, 2019】特别补充:在录制视频发现,此前的几个表述有不严谨的地方。虽然绝大多数情况下,LOD是实现“引用但不出现”,但是也会有很多引用和显示本身不是一个字段的情况,特别是使用fixed 返回客户状态信息时——我们需要引用的是客户层面的标签,而非客户字段本身。

4、LOD详细级别表达式的总结

如果用一句话,通俗的讲解LOD表达式,大概是这句——

“如果分析过程中需要添加一个维度,其明细程度高于或者低于已有视图的可视化明细程度,但又不希望改变现有图形展示内容,可采用详细级别表达式功能。”

官方如此介绍:

详细级别表达式(LOD Expression)提供了对视图详细级别(Viz)之外的数据计算聚合的简单方法,实现在可视化中以任意的方式组合这些数据。
Level of Detail Expressions provide a way to easily compute aggregations that are not at the level of detail of the visualization. You can then integrate those values within visualizations in arbitrary ways.

  • 不同的详细级别,对应不同的数据聚合度和颗粒度;
  • LOD expression不是一种详细级别,它只是Tableau提供给用户的一种表达式运算。
  • LOD expression实现了在视图层面增加另一个详细级别的数据聚合(即多个详细级别)。

二、行级别详细级别与视图详细级别——基础

上面我们说了多种LOD的级别,颗粒度最高的是行级别,对应行级别的表达式计算;其次是视图级别。LOD表达式都是在这两种级别上起作用,因此,我们首先要两者这两种的区别。

  • [saesl] / {avg[sales] }   视图行级别销售除以所有商品平均销售
  • sum( [saesl] ) / sum( {avg[sales] } ) 视图聚合销售 除以 所有商品的总和

借助Tableau我们发现,在数据和现实之间,隔着一个窗户即“可视化的图形”(数据、现实和可视化的关系,可参加 [读书]读《数据之美》,学可视化设计)。形象地说,作为连接现实和数据的“中间层”,可视化的图形可以是一台显微镜,看到比视图级别颗粒度更高的数据,也可以是一台望远镜,看到比视图级别聚合度更高的数据。LOD相当于在显微镜、望远镜中增加了新的镜片,它可以帮我们一次看到不同的详细级别。

1、行级别表达式

重要的是记住一点,行级别表达式都是非聚合的;它就像Excel中的公式,是基于每一行的数据计算的。

初学者常常犯下的典型错误,就是在明细行中计算“利润率”,它的语法是这样的:

[Profit Ratio]=[Sales] / [Profit]

这个计算虽然有数据值,但是在明细行没有业务意义——它代表交易级别、明细级别的比值,而每一笔交易的利润率是缺乏业务指导意义的。只有样本足够大的聚合比值,才有价值。这样一个错误的计算,在视图中会被聚合——不管是默认的SUM,还是改为AVG平均值,都是“海市蜃楼”中的阁楼,是虚无缥缈没有意义的。

LOD 行级别

也就是说,“利润率”在明细级别没有意义,只有在问题中才有意义。当计算品类利润率时,通行计算方式是品类的总利润除以品类的总销售,即sum[profit]/sum[sales]。

当然,在某些简单计算时候,行级别表达式和聚合表达式具有相同的结果,比如计算成本,行级别[cost]=[sales]-[profit] 结果在品类的层面上聚合,和在商品层面直接执行聚合计算是等价的。这是因为减价计算中括号位置可以随意调整;而乘除运算则不行。

(A1-B1)+(A2-B2)+(A3-B3)=(A1+A2+A3)-(B1+B2+B3)
(A1/B1)+(A2/B2)+(A3/B3)!=(A1+A2+A3)/(B1+B2+B3)

但要记住一点,虽然等价,表达的意义截然不同。不能因为结果一样,而选择错误的表达方式。

Screen Shot 2018-09-29 at 09.43.13.png

「新增」理解行级别表达式有一个好处,就是理解了计算字段在数据源中的位置。简单计算是数据源层面的计算,然后返回一个数值;因此每一个计算字段都会在数据缓存的层面,增加一个虚拟新字段,也就延长了数据源的宽度,当我们查看详细数据时,计算字段就体现在数据源表格的后面。行级别层面的数据计算,是我们理解后面的基础。

2、视图级别表达式

视图级别表达式是聚合表达式。所谓视图级别的表达式,就是在可视化图形界面各个维度的计算关系。通过默认执行聚合计算,可以让Tableau自动判断在何时对哪个详细级别执行聚合运算。在视图中,聚合表达式有一个特别明显的标记,“聚合”(英文“AGG”).

 SUM(Profit) / SUM(Sales)

视图级别的表达式,几乎都是聚合,这与行级别表达式完全不同。在学习过程中,一定要清晰地区分二者的不同。我们可以对比一下Excel与Tableau的相似功能。

 ExcelTableau
1

 

行级别

工作表 公式,
eg.  E2=D2/C2
结果是增加了一列字段。
行级别表达式Row Level Expressions
eg. pos= [Profit] / [Sales]
结果是在数据源中增加了一列,与Excel类似。
2

 

都是在可视化级别

数据透视图 “计算字段”
eg. 利润率=E列 profit/ C列sales
(透视图中的利润执行的是聚合计算)
视图级别表达式——聚合计算
Viz Level of detail Expressions
eg. pos_2= SUM(Profit) / SUM(Sales)
(视图级别是对聚合的运算)
3数据透视图,通过字段的“汇总方式”和“数据显示方式”,可以做汇总及差异、差异百分比、占列的百分比等;表计算
Table Calc level of detail Expression
差异、百分比差异、总额百分比、百分位、移动平均、年同比增长率、复合增长率、YTD合计
4[无]
需要添加辅助字段
表范围 详细级别表达式1
{ sum[profit]},省略了维度的fixed-LOD
  [无]直接用计算公式,Excel视图无关详细级别“超越视图级别” 详细级别表达式
{fixed/include/exclude  []…:[…]}

在这里,推荐一个Tableau官方视频,对比了上述两种计算的差异,下面中的视频截图应该更清晰的表述了行级别运算和聚合运算的不同。《Tableau-聚合、粒度与比率计算》

在我刚刚推出的视频课程中,我用Excel严格对比了二者的逻辑。理解Excel是理解数据的好方法。

小结

  • 行级别表达式运算时不能超越行的级别,是数据源层面的计算,计算针对个体,不针对总体;
  • 视图级别表达式,体现了大数据的特点,是超越个体数据差异的聚合运算,不考虑个体,只计算总体;
  • Tableau是BI工具,以视图级别表达式为基础,聚合运算关注总体的差异。

行级别表达式是可视化之前就计算完成的,是在数据源层面的计算;而视图级别都需要依赖于视图,是基于可视化中维度的计算。

 

三、详细级别表达式Level of Detail Expression

  • 理解行级别表达式(Row Level Expressions)和视图级别表达式(View Level Expressions)是理解详细级别表达式(LOD=Level of Detail Expression)的基础;
  • 而理解详细级别表达式与维度、度量的关系,以及LOD与操作顺序,则是深入理解LOD语法的关键——我在续篇中有详细介绍(【数据分析】Tableau详细级别表达式_位置与语法)。

在详细介绍LOD表达式的多个语法时,我们以一个简化版的LOD表达式入门——表范围详细级别表达式。

  • {MIN[profits]}
  • {Fixed [year]MIN[profits]}
  • {Fixed [year] ,[area]MIN[profits]}
  • {Fixed [year] ,[area],[products]MIN[profits]}

1、 表范围详细级别表达式 Table-Scoped Level of Detail Expressions

“表范围详细级别表达式”只是省略了维度限定,其实就是没有维度声明的fixed详细级别表达式。因此,我们可以把“表范围详细级别表达式”视为最简单的详细级别表达式。

例如,为了对比视图级别表达式和详细级别表达式,我创建了两个计算字段:

///不建议大家使用这个数据测试,直接使用超市数据吧。

  • MIN(Profits)   非详细表达式,MIN()函数计算,参数是profits字段;
  • { MIN([Profits]) }字段={ MIN(Profits) } 详细级别表达式,对min()函数 扩大范围执行,相当于没有维度声明的fixed 详细级别表达式,计算结果={FIXED : MIN([profit])} .
Screen Shot 2018-10-21 at 17.01.39.png

这个数据只有10行,最后一行的数据,是sum([profits]),在行级别上,和min([profits])是相等的。

这里的fixed详细级别表达式超越了视图级别,相当于在维度筛选之前指定了全局profit数据,返回的是所有year,所有area,所有products下的最小值,涉及的数值有{1,3,5,7,9,11,17,13,15},所以返回最小值1. 这里就需要强调一下——筛选器与操作顺序:fixed在维度筛选之前,否则就会受视图影响。

下图的{ Min(Profit) } 增加了筛选器,你发现仅保留2017年数据时,{ Min(Profit) } 结果依然是存在于2016年的最小值1. 这一点我们在第二篇重点讲解。

屏幕快照 2018-09-20 下午2.01.44.png
LOD位置

关于筛选器和操作顺序,我们会在续篇展开(Tableau详细级别表达式_位置与语法)。

 

2、Fixed LOD表达式

上面的表范围详细级别表达式{ Min(Profit) } ,是省略了维度的Fixed表达式,默认是从数据源中的所有数据读取最小值。如果我们指定维度,就是完整的Fixed LOD了。

Fixed适合于LOD的初学者,和include/exclude相比,fixed LOD是绝对的,优先于维度筛选器,它的计算与视图字段也没有关系。详细级别表达式具有以下结构:

{[FIXED | INCLUDE | EXCLUDE] <维度声明> : <聚合表达式>}

{}大括号一般都代表数组,一个数组可以包含多个数值,在这里可以包括ABC区域的合计毛利。

为了更好的理解fixed的表达式,我们结合上面的表范围做了一个对比。

Screen Shot 2018-10-21 at 17.13.51.png

在最高的颗粒度明细下,我们对比了四个fixed表达式,区别在于维度数量不断增加。

  • { MIN([Profits]) } = {fixed: MIN([Profits]) } ,就是上面说的表范围,返回给视图一个数值;
  • {FIXED [Year]: MIN([Profits])} 返回每个年份下的的min(profits) 结果,返回给视图两个值min;
  • {FIXED [Year],[Area]:MIN([Profits])} 返回每个年份+每个区域下min(profits)结果,表达式返回给视图 六个min数值;

!! 注意,LOD表达式,是单独从数据源提取一遍数据,把计算的结果返回给视图,多个数值构成一个数组。表范围,即返回一个数值;指定year,那就每个year返回一个数值;指定year+area,那就在每year下的每个area返回一个数值,上面返回23=6个数值;同样的道理,如果是fixex year+area+product,理论上返回23*5个,但是很多数值不存在,返回了所有10个数值。

3、Include /exclude LOD表达式

和fixed特立独行的绝对不同,include和exclude是相对聚合,也就是说,它们如何影响视图详细级别,是受视图中的维度影响的。两者的具体语法,我们在后面再讲述。

INCLUDE LOD,使用指定的维度和视图维度进行计算聚合。由于是在视图维度中增加新维度,因此该表达式返回的结果颗粒度比视图级别更高(聚合级别更低)。

EXCLUDE LOD,在现有视图维度基础上,排除指定的维度进行聚合计算。由于晒视图维度排除指定维度,因此返回的结果颗粒度比视图级别更低。

总结

  • 在使用详细级别表达式时,一定要明确,我要在哪个维度上支持聚合?
  • 如果聚合维度不能受维度影响,那就用fixed;如果要指定一个视图中没有的维度,同时还要结合视图的维度,那就用include;如果要排除视图的可见维度,使用exclude;更详细语法见续篇。
  • 表范围详细级别表达式,可以在不使用任何定界关键字的情况下在表级别定义详细级别表达式。就是省略了维度的fixed。
  • 详细级别表达式在除视图级别外的其他维度上支持聚合。利用详细级别表达式,可以将一个或多个维度附加到任何聚合表达式。

完整的LOD学习,请按照以下顺序阅读:

  1. 【Tableau】详细级别表达式_从0到1的入门
  2. 【Tableau】详细级别表达式_语法与逻辑  新修改
  3. Tableau|LOD详细级别表达式——方法论与学习资源
  4. Tableau| LOD 核心要点回顾(4)
  5. 【Tableau】LOD15大详细级别表达式-深度解读 (5) NEW 

第一版  2017/8/11 夜
第二版 2017/8/12   更改了几处错误
修改  2017/8/23
修改 2017/10/18  ,修改附图,之前有一些错误
修改 1 Sep 2018  修改了一些表述
增补 12 Sep 2018  增加“详细级别与详细级别表达式”、冰山的说明
增补 20 Sep 2018 增加LOD说明,增加fixed说明
增补 25 Sep 2018 G175列车,大面积增加第一部分,并修改错误。
修改 数据 21 Oct 2018 更换数据素材
修改 Jan 15, 2019 调整部分细节文字,修改了图片。
Aug 7,2019 修改一张图片
Sep 16, 2019 更新视频

Mar 11, 2023 蓦然发现之前的自己,如同一个傻比、“无知之徒”


了解 喜乐君 的更多信息

订阅后即可通过电子邮件收到最新文章。

《【Tableau】详细级别表达式LOD_详尽入门(1)》有36个想法

  1. 两个数据源结合,两张不同的表A和B按日期关联,并用双轴按时间序列显示【价格】在视图上,A和B两表每天更新数据不同步,有时A先更新,有时B先更新,请问如何在一个视图中按时间序列一直可以显示两表的最新情况?如果只是简单的整合,时间序列只会显示到A和B中未更新的时间,只有当两表都完成更新后,才会显示两者的最新情况,这样就不能监测到最新的变化。
    希望博主可以帮忙!谢谢了

    1. 不知道两个表如何关联的,但显然不能用混合,混合是左连接。 两个表更新不同步导致时间轴间歇性不能显示所有日期刻度,可以考虑通过判断显示日期更大的那个坐标轴。 如果表a的最大日期大于等于表b中的最大值,则使用表a日期做坐标轴。 需要使用 {}计算、if逻辑函数。

      1. 感谢感谢!
        表A有两个字段:日期和玻璃期货价格,表B有两个字段:日期和玻璃库存量,通过日期将两表关联,双轴按时间序列显示在一起,可以看到玻璃期货价格与库存量之间的关系。但是具体实施后的情况就是,周五早上玻璃库存量数据更新了,B表的日期字段更新到周五,但是此时期货尚未收盘,A表的信息还是周四的数据,在获得A表更新数据之前,双轴显示的只是更新到周四的数据情况,虽然库存B表数据已经更新了,但是并不显示。而到下周的交易日时(周一到周四),B表每天更新,而库存A表要到周五才更新,这样在A表完成更新之前,B表尽管每天更新,但是视图中显示的仍然是A表的最后时间。这样交替使得无法及时看到A/B两表的最新情况,失去了监控的意义。
        按照您提示的办法,是不是可以创建一个计算字段【最新时间】,对【最新时间】采用如下计算:
        IF MAX([A].[日期]) >= MAX([B].[日期])
        THEN [A].[日期]
        ELSE [B].[日期]
        END

        这样?LOD运算在整合异源的两表时提示需要聚合才行,十分蒙圈中。
        :-

    2. 抱歉,上面的回复里把两表顺序搞混了,请看下面这个回复。

      感谢感谢!
      表A有两个字段:日期和玻璃期货价格,表B有两个字段:日期和玻璃库存量,通过日期将两表关联,双轴按时间序列显示在一起,可以看到玻璃期货价格与库存量之间的关系。但是具体实施后的情况就是,周五早上玻璃库存量数据更新了,B表的日期字段更新到周五,但是此时期货尚未收盘,A表的信息还是周四的数据,在获得A表更新数据之前,双轴显示的只是更新到上周五的数据情况,虽然库存B表数据已经更新了,但是并不显示。而到下周的交易日时(周一到周四),A表每天更新,而库存B表要到周五才更新,这样在B表完成更新之前,A表尽管每天更新,但是视图中显示的仍然是B表的最后时间。这样交替使得无法及时看到A/B两表的最新情况,失去了监控的意义。
      按照您提示的办法,是不是可以创建一个计算字段【最新时间】,对【最新时间】采用如下计算:
      IF MAX([A].[日期]) >= MAX([B].[日期])
      THEN [A].[日期]
      ELSE [B].[日期]
      END

      这样?LOD运算在整合异源的两表时提示需要聚合才行,十分蒙圈中。
      :-

      1. 哈哈,你也做?我现在还恍恍惚惚。
        我用数据库做join没问题,但是给朋友的时候是json文件给他的,貌似两个json文件之间做不了

    3. 楼主,有三条时间序列做线图,要求放在同一个轴上。三个时间序列ABC的纵向度量差距巨大,A的取值范围在0-100,B的取值范围>100K,C的取值范围>1000M。有什么办法让ABC三条线叠加显示在同一个轴上,并且纵向比例均匀,且度量值在工具提示和标签中可以显示正常数值呢?

      1. 1、双轴无需调整坐标轴即可合并,但是双轴只能合并两个,因此需要度量值和度量名称;
        2、多个度量要强制放在同一个刻度中,最近选项是把每个刻度都改为0~1的百分位中,三个百分位合并在一个度量值中,度量值坐标轴为0~1
        3、使用Tableau的合计百分位把每个度量改为百分比,或者选择其他方式,能实现就好;
        4、把原来的度量放在工具提示中
        5、确认你的表达式有意义的,人为改变坐标轴,通常会造成数据解读困难

    4. 非常感谢谢!!
      三者叠放在一起的目的是为了观察三者之间的关系,这对于考察多个不同来源的指标之间的关系非常实用。

      您的方法不错,我试一下。

    评论已关闭。

    了解 喜乐君 的更多信息

    立即订阅以继续阅读并访问完整档案。

    Continue reading