优阅达 | Tableau 微课堂(86):聚合计算
聚合(AGG )计算
你见过在胶囊的开头有一个 “聚合(AGG)” 吗?AGG 代表 “聚合”,它用以表示已经聚合已经在计算中执行了,无需再次执行。
创建一个利润率来看看效果。双击列功能区的空白区域,然后输入SUM(profit)/SUM(Sales),点击回车。
注意,胶囊现在以聚合(AGG)开头,而不是SUM(总和)。
ATTR 聚合
我们知道聚合(AGG)的意思,那么 ATTR 呢?这是聚合计算中常见的另一种情况。
假设分别对不同的维度值进行聚合。例如,我们想要根据公司这一维度值来取销售额平均值,其他维度值取销售额中值。
右键单击“数据”窗格中空白区域,在弹出的菜单中选择“创建计算字段”。将这个计算命名为“Segment Sales”。
IF [Segment] = " Corporate "
Then AVG([Sales])
ELSE MEDIAN([Sales])
END
这就是说,如果“Segment(细分市场)”的维度值为“公司”时,就取销售的平均值。否则,就返回销售额中值。
但是 Tableau 告诉我们计算中有一个错误:不能在“IF”表达式中混合聚合和非聚合比较或结果。
所以我们需要聚合细分市场,该怎么做呢?通过使用 ATTR 聚合Segment(细分市场),别忘了要加上括号。
IF ATTR ([Segment]) = " Corporate "
Then AVG([Sales])
ELSE MEDIAN([Sales])
END
现在计算是有效的,点击确定。
将 “Segment Sales” 计算字段添加到视图中,现在可以看到,公司的平均销售额要比其他细分市场的中值大得多。
现在我们知道,胶囊上写的聚合(AGG)是因为聚合是在计算中定义的。
ATTR 检查结果集中所有行的给定字段是否只有一个值。如果所选数据只有一个值,ATTR 返回该值。如果该数据子集有多个值,则返回*号。
ATTR 函数的另一种思维方式是等价于逻辑测试“如果Min = Max,则返回该值”。
如果一个字段只有一个值,那么这个字段的最大值和最小值都是这个值,所以 Min = Max,但是如果这个字段有多个值的话,那么最小值不一定等于最大值。
但是所有这些聚合对于聚合维度都是有用的,可以避免像我们看到的那样的错误。
聚合与记录级别的计算
让我们看看每笔订单的平均销售额。将 “Sales” 字段拖放到列功能区,选择 AVG(Sales) 并点击确认。
这是数据库每行的平均销售额,它以产品级别的交易记录显示,而不是订单级别。
我们希望将多个销售订单组合为一个给定订单的单个销售,并取其平均值,而不是记录级别的平均值。为此,创建一个计算字段。
右键单击”数据”窗格空白区域,在弹出的菜单中选择“创建计算字段”,并将其命名为 “Average Order Sales”。
SUM([Sales]) / COUNTD([Order ID])
平均值是通过对一组数值求和,然后除以数值的个数来计算的,所以我们将用销售额除以订单号的不同计数。
现在我们将把 “Average Order Sales” 这一计算字段拖放到列上。
可以看到这些值大于 AVG(Sales) 值,这是有意义的,因为我们取的是订单级别的平均值,而不是记录数级别的平均值。
本节 Tableau 微课堂到此结束,感谢你的耐心阅读。
下节课,我将带你学习了解 日期计算 。