Tableau:表计算中的特定维度

这里还是会用SQL的窗口函数来说明。

以Tableau自带的【订单-超市】数据为例,下面来验证【特定维度】的作用。创建两个计算字段【fun】和【fun2】,其定义如下:
在这里插入图片描述在这里插入图片描述
这两个计算字段中涉及到的聚合函数已经在其他博客中已经介绍过,这里不再赘述。

测试1
测试1.1

将【订单日期】和【类别】拖拽到【行】中,将【订单日期】字段聚合到“年"上,将计算字段【fun】和【fun2】拖拽到【列】中,同时将图形显示改为【文本表】,得到的结果如下图。

此时【fun】和【fun2】的默认计算依据如下(两个计算字段的计算依据相同所以只展示【fun】的计算依据,下同)。
在这里插入图片描述
为了方便说明【特定维度】的作用,这里会用MySQL中的窗口函数进行说明(可以参考:MySQL中的窗口函数)。假设存在如下一张表a,其表结构及表中内容如下:
在这里插入图片描述
那么,上述计算结果对应的SQL伪代码如下(【fun】用row_number()函数代替,【fun2】用sum()函数代替)。

select 订单日期年,类别,row_number()over(order by 订单日期年,类别) as fun,
	sum(销售额)over(order by 订单日期年,类别) as fun2
from a

**Tips:**在表计算中使用了【特定维度】后,Tableau提供了两种字段排序方式。具体如下图:
在这里插入图片描述

  • 先说“自定义排序”。这种排序方式非常清晰明了,可以自己设置排序字段、排序方法和排序方向。
  • 再来说“特定维度”排序。使用这种排序方式时,纳入到【特定维度】中的字段即为排序字段,而每个字段的排序方向可以自己调整。但这里重点要说的不是如何调整字段的排序方向,而是每个字段的默认排序方式。在上述例子中,”订单日期年”和“类别”都是以其默认排序方式进行排序的。如何查看字段的默认排序方式?具体如下图:
    在这里插入图片描述

可以发现,“类别”的默认排序方式为 按数据源顺序 升序排序。

测试1.2

将【fun】和【fun2】的计算依据改为【特定维度】下的【类别】,具体如下图。
在这里插入图片描述
此时,【fun】和【fun2】的计算结果如下:
在这里插入图片描述
此时其对应的SQL伪代码如下:

select 订单日期年,类别,row_number()over(partition by 订单日期年 order by 类别) as fun,
	sum(销售额)over(partition by 订单日期年 order by 类别)as fun2
from a
测试1.3

将【fun】和【fun2】的计算依据改为【特定维度】下的【订单日期年】,具体如下:
在这里插入图片描述
此时【fun】和【fun2】的计算结果如下:
在这里插入图片描述
此时对应的SQL源码如下:

select 订单日期年,类别,row_number()over(partition by 类别 order by 订单日期年) as fun,
	sum(销售额)over(partition by 类别 order by 订单日期年) as fun2
from a
测试2

这部分主要是测试【所在级别】及【重新启动间隔】的作用。将测试1.1中的【订单日期 年】复制到【筛选器】中,筛选出2015和2016年的数据(如果不进行筛选,数据量太多截图比较麻烦),如下图所示。
在这里插入图片描述
再将【细分】拖拽到【行】中,此时【fun】和【fun2】的计算结果如下图。
在这里插入图片描述
此时,【fun】和【fun2】的计算依据如下:
在这里插入图片描述
假设存在一个表b,其表结构及表内容如下图。
在这里插入图片描述
此时对应的SQL伪代码如下:

select 订单日期年,细分,类别,row_number()over(order by 订单日期年,细分,类别) as fun,
	sum(销售额)over(order by 订单日期年,细分,类别) as fun2
from b
测试2.1

将上述【fun】和【fun1】的计算依据中【特定维度】中的【所在级别】改为“订单日期 年”,具体如下图。
在这里插入图片描述
此时【fun】和【fun1】的计算结果如下图:
在这里插入图片描述
此时对应的SQL伪代码如下:

select 订单日期年,类别,细分,row_number()over(partition by 细分,类别 order by 订单日期年) as fun,
	sum(销售额)over(partition by 类别,细分 order by 订单日期年) as fun2
from b

当将【fun】和【fun1】的计算依据中的【所在级别】改为【细分】时,其计算结果如下:
在这里插入图片描述
此时对应的SQL伪代码如下:

select 订单日期年,细分,类别,row_number()over(partition by 类别 order by 订单日期年,细分) as fun,
	sum(销售额)over(partition by 类别 order by 订单日期年,细分) as fun1
from b

Tips:当【所在级别】设置为“细分”时,实际上是将“细分”及【特定维度】中出现在“细分”之前的所有字段都纳入到排序字段中。所以这里的order by子句中的排序字段为“订单日期年”和“细分”。
当将【fun】和【fun1】的计算依据中的【所在级别】改为【类别】时,其计算结果与【所在级别】设置为【最深】时的结果一样。

测试2.2

将【fun】和【fun2】的计算依据中的【所在级别】固定设置为“最深”。此时会发现【重新启动间隔】中可选的字段除了“无”之外,只有“订单日期年”和“细分”两个字段。
在这里插入图片描述
当将【所在级别】设置为“细分”时,此时【重新启动间隔】中可选的字段除了“无”之外,只有“订单日期年”。如下图:
在这里插入图片描述
这与【特定维度】中字段出现的次序的有关。【重新启动间隔】中可选的字段要在【所在级别】指定的字段之前。
将【重新启动间隔】改为【订单日期年】, 此时两个计算字段的结果如下图:
在这里插入图片描述
此时对应的SQL代码如下:

select 订单日期年,细分,类别,row_number()over(partition by 订单日期年 order by 细分,类别) as fun,
	sum(销售额)over(partition by 订单日期年 order by 细分,类别) as fun2
from b

当将两个计算字段的【重新启动间隔】改为【细分】时,其对应的计算结果如下图:
在这里插入图片描述
此时对应的SQL代码如下:

select 订单日期年,细分,类别,row_number()over(partition by 订单日期年,细分 order by 类别) as fun,
	sum(销售额)over(partition by 订单日期年,细分 order by 类别) as fun2
from b

Tips:这里【重新启动间隔】将“细分”以及在【特定维度】中出现在“细分”之前的所有字段都用来分区了(partition by子句)。

总结
  1. 【所在级别】和【重新启动间隔】并没有提供什么新的功能,从目前的测试结果来看,这两个的作用完全可以通过控制添加到【特定维度】中的字段来代替。(下面提到【特定维度】的时候【所在级别】和【重新启动间隔】取默认值)。
  2. 【特定维度】指定了数据的排序字段(order by子句),之后会按照字段元素的展示顺序进行排序。而未出现在【特定维度】中的字段则会作为聚合函数的分组依据(partition by子句)。
  3. 添加到【特定维度】中的字段是有层级关系的。比如测试1.1中先按“订单日期年”进行排序。若"订单日期年“相同,再按“类别”排序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值