这年头假货泛滥,详细级别计算(即LOD Expressions)也不例外。


Tableau中的伪详细级别LOD计算_第1张图片


我们知道,Fixed的详细级别计算是不受维度筛选器控制的,而表计算则受它控制。

 

Tableau中的伪详细级别LOD计算_第2张图片

 

 

当我们用一个表范围的LOD计算来建一个百分比时,即使筛选器只选择维度的一个值(Accessories),它也能保持原来的百分比,而表计算的百分比则自动变为百分之百。


% by Table scopped LOD Calcs

SUM([Sales])/SUM({SUM([Sales])})

Tableau中的伪详细级别LOD计算_第3张图片

 

然而,有时候你会发现FixedLOD计算居然也受维度筛选器的控制,这样的Fixed LOD计算可称为伪LOD计算。比如下图,我们用一个Fixed的计算求出随着时间的变化,三个CategorySales的平均值:


bTableau中的伪详细级别LOD计算_第4张图片


当维度筛选器中只选择Category的两个值时,用Fixed LOD计算出的平均值居然会变!为什么会这样?说好的Fixed LOD计算不受维度筛选器控制呢?


Avg by Fixed:

AVG({ FIXED [Category],YEAR([Order Date]):SUM([Sales])})


Tableau中的伪详细级别LOD计算_第5张图片 


 

仔细探究一下,我们发现这儿的Fixed LOD计算只是为了求出各Category随时间变化Sales的平均值而已,不用Fixed LOD 计算,我们一样可以算出平均值:


Avg by Normal Calcs:

SUM([Sales])/COUNTD([Category])


Tableau中的伪详细级别LOD计算_第6张图片


所以,这儿维度筛选器对平均值起作用就不难理解了。那么,如果我们需要无论怎样选择Category,其平均值都维持不变,该如何创建计算字段呢?很显然,我们需要一个“真正的” Year(Order Date)FixedLOD计算:


Avg by Nested LOD:

{ FIXED YEAR([Order Date]):AVG({ FIXED [Category],YEAR([Order Date]):SUM([Sales])})}

 

这时,当选择两个Category或三个Category时,平均值保持不变。



Tableau中的伪详细级别LOD计算_第7张图片


Tableau中的伪详细级别LOD计算_第8张图片 


 根据嵌入式LOD计算的黄金法则(Golden Rule),当内层是Include计算时,外层Fixed的维度可以传承到内层,所以上面的计算字段也可改成以下计算式,更为简洁。


{ FIXED YEAR([Order Date]):AVG({INCLUDE  [Category]:SUM([Sales])})}

 

Tableau中的伪详细级别LOD计算_第9张图片

 

再看另外一个例子。我们建一个以州为单位的地图,再建一个FixedLOD计算:


Category Sales:

{ FIXED [Category]:SUM([Sales])}

 

由于大多数的州都销售了所有三个Category的产品,所以基本上Category Sales都等于销售总值2,297,201,将Category Sales的大小用颜色标记出来。


Tableau中的伪详细级别LOD计算_第10张图片

 

然而当我们选择在Control Filter中去掉Subcategory维度的Accessories时, 南达科他州的Category Sales会有变化:


Tableau中的伪详细级别LOD计算_第11张图片


为什么?因为南达科他州很特殊,它的Technology Category下只有Accessories一个Subcategory,当我们不选Accessories时,就少了整个Technology这个 Category,所以其Category Sales值当然会有变化。


Tableau中的伪详细级别LOD计算_第12张图片


那么为什么维度筛选器会影响Fixed LOD计算的Category Sales的值呢?因为此处Category Sales也是一个伪 LOD计算!不用Fixed,而用IncludeExclude LOD计算我们一样可以得到相同的Category Sales的值:


Alternative Category Sales

IF COUNTD([Category])=1 OR COUNTD([Category])=2

THEN SUM({ INCLUDE [Category]:SUM({ EXCLUDE [State]:SUM([Sales])})})

ELSE SUM({ EXCLUDE [State]:SUM([Sales])})

END



Tableau中的伪详细级别LOD计算_第13张图片


同样,如果我们希望Subcategory的选择不影响Category Sales的值,就必须Fix State这个维度,这种嵌入式Fixed LOD计算才真正不受维度筛选器的控制。


Category Sales Fixed State

{ FIXED [State]:SUM({ FIXED [Category]:SUM([Sales])})}

 


Tableau中的伪详细级别LOD计算_第14张图片


Tableau中的伪详细级别LOD计算_第15张图片

 

LOD详细级别计算是Tableau所有版本进化过程中最激动人心的演变。自从有了LODTableau才真正从众多竞争对手中脱颖而出。 LOD让从前不可能做到的或只有在数据源级别才能解决的复杂计算变得十分简单。掌握好LOD计算,Tableau水平将有实质性的飞越!


LOD计算是Tableau的重点和难点,需要用离散式思维才能真正理解并掌握。大多数Tableau初学者都会遇到下列问题:

                1)很多商业问题不知如何用创建计算字段解决问题。

                2)不知何时该用LOD计算,用何种LOD可达到目标。

                3)看见别人做的LOD计算,无法理解。

                4)觉得自己的Tableau水平遇到了瓶颈,无法突破。


六小时视频教程《Tableau 高手进阶 深入了解LOD详细级别计算》避开枯燥无味的定义、概念和公式,力求用通俗易懂的语言透彻讲解LOD计算的本质,并用大量实际案例加以巩固,让你建立起系统的LOD思维,在实际工作中不自觉地用LOD计算解决各类商业问题。欢迎到51CTO网站观看此课程并提出宝贵意见!


课程链接:

https://edu.51cto.com/course/20183.html?source=so