如何对一个度量执行两种不同的聚合并进一步聚合结果以在 Tableau 中查看为一个聚合度量
How to perform two different aggregation on one measure and further aggregate the results to view as one aggegated measure in Tableau
我有一个数据集,我希望根据值名称将数据分为两组。然后我希望对一组的结果进行平均,然后对另一组的结果求和。最后,我想把这两个加起来创建一个条形图。
已更新
这是数据
Id Total Avail Date group used
A 10 5 9/1/2020 Group1 5
A 40 20 9/1/2020 Group1 20
B 20 10 9/1/2020 Group2 10
B 10 5 9/1/2020 Group2 5
B 10 5 9/1/2020 Group2 5
A 20 10 9/1/2020 Group1 10
A 20 10 9/1/2020 Group1 10
B 10 5 9/1/2020 Group2 5
B 10 5 9/1/2020 Group2 5
这就是我所做的
1。
首先创建计算器。名为字段:组 - 将数据分组
IF [Id] = 'A' THEN 'Group1'
ELSEIF [Id] = 'B' THEN 'Group2'
ELSE 'none'
END
然后创建计算。字段 - sum_avg Group1 (A) 列的总和并取 Group2 (B) 的平均值
CASE [group]
WHEN 'Group1' THEN { FIXED [Id]: SUM([Avail])}
WHEN 'Group1' THEN {FIXED [Id]: SUM([used])}
WHEN 'Group1' THEN {FIXED [Id]: SUM([Total])}
WHEN 'Group2' THEN { FIXED [Id]: AVG([Avail])}
WHEN 'Group2' THEN {FIXED [Id]: AVG([used])}
WHEN 'Group2' THEN {FIXED [Id]: AVG([Total])}
END
结果如下:
想要的结果:
我希望添加 Group1(sum) 和 Group2(avg)对于 Avail、Used 和 Total,以便
最终图表结合了两个蓝色值并结合了绿色值。
The SUM of Group1A Avail = 45 and the AVERAGE of G Avail Group2 = 6
So I wish the Avail section (blue) of the barchart to be: 51
and the Used (green) should be 51 as well
with the total as 102 (Ill add to tooltip)
欢迎任何建议-我仍在研究这个问题,欢迎任何建议
更新
我有一个数据集,我希望在其中反映自定义 SQL 查询的总计。这是一些示例数据:
Size Tb Val type Group Sum_AVG SKU Last_refreshed
270 90.5 Free_Space_TB Group2 90.5 Excel 9/1/2020
270 179.5 Used Group2 179.5 Excel 9/1/2020
这是自定义查询输出
这是我的看法
当我将鼠标悬停在上方时会出现效用和已使用,但我该如何包括总数?
这是我正在使用的计算(感谢 SO 成员的帮助):
{SUM({Fixed [type]: ZN(sum(if [Group]= 'Group1' then [Val] end))})
+
sum({Fixed [type]: zn(avg(if [Group] = 'Group2' then [Val] end))})}
SUM_AVG 是:
zn(sum(if [Group]= 'Group1' then [Val] end))
+
zn(avg(if [Group] = 'Group2' then [Val] end))
我做错了什么,因为它是所有列的总和,而我只想要每一列的总数。
(使用的是使用自定义查询创建的)
提出以下解决方案-
- 总计栏没有用。请放下它。这将不必要地增加数据的大小。 (对于工具提示,我会告诉您如何操作)。
使用的示例数据
+----+-------+--------+------+
| Id | Avail | group | used |
+----+-------+--------+------+
| A | 5 | Group1 | 5 |
+----+-------+--------+------+
| A | 20 | Group1 | 20 |
+----+-------+--------+------+
| B | 10 | Group2 | 10 |
+----+-------+--------+------+
| B | 5 | Group2 | 5 |
+----+-------+--------+------+
| B | 5 | Group2 | 5 |
+----+-------+--------+------+
| A | 10 | Group1 | 10 |
+----+-------+--------+------+
| A | 10 | Group1 | 10 |
+----+-------+--------+------+
| B | 5 | Group2 | 5 |
+----+-------+--------+------+
| B | 5 | Group2 | 5 |
+----+-------+--------+------+
- 旋转两列(
used
和 avail
)。下面包含一个 gif
- 创建计算字段
CF
as
zn(sum(if [Group]= 'Group1' then [Val] end))
+
zn(avg(if [Group] = 'Group2' then [Val] end))
- 将
AGG(CF1)
拖到行架和文本中,type
拖到标记卡中的颜色;您将在 used
和 avail
. 两种类型中获得具有 51 和 51 值的所需视图
- 对于
total
工具提示,即 102
创建一个计算字段 total
as
{SUM({Fixed [Type]: ZN(sum(if [Group]= 'Group1' then [Val] end))})
+
sum({Fixed [Type]: zn(avg(if [Group] = 'Group2' then [Val] end))})}
将此字段添加到标记卡的详细信息中(而不是像往常一样显示工具提示)。
单击工具提示并根据喜好在此处编辑计算。我把它编辑成
Out of total <total> TB SKU, <AGG(CF1)> was <Type>
您会得到这样的工具提示。
和
P.S./EDIT 这是关于画面中的旋转数据。您可以按照 here 中提到的说明修改 sql 查询,而不是通过 SQL 连接来连接完整数据。两个选项-
- Option-1 在 sql 中创建使用的列并在画面中旋转。导入 data/creating 连接时使用此查询-
select ID, date, avail, total - avail AS used, group from table_name
- Option-2 在 sql 本身中旋转数据。然后使用此查询-
select ID, date, avail as val, "avail" as type, group from table_name
UNION
select ID, date, total - avail AS val, "used" as type, group from table_name
此后您可以在画面中继续。
看到画面使用长数据格式,而您的数据是宽格式。您应该将您的 SKU 内存分配保持在行而不是列中,这样每当您需要划分时,向标记卡添加额外的字段类型就可以完成这项工作。相反,如果您将它放在列中,那么它们始终是两个单独的度量,而实际上它是一个度量。我建议你在网上阅读一些关于整洁数据格式的文章,其中你会清楚地了解行、列和 column_names 中要保留什么。将数据重塑为正确整洁的格式可以解决很多问题。
请记住,如果变量(列)名称中有任何值,您必须转换数据。这里 used
和 avail
是变量值,因此它们不能在 column_names 中(即变量名)我想我很清楚。
祝你好运。
我有一个数据集,我希望根据值名称将数据分为两组。然后我希望对一组的结果进行平均,然后对另一组的结果求和。最后,我想把这两个加起来创建一个条形图。
已更新 这是数据
Id Total Avail Date group used
A 10 5 9/1/2020 Group1 5
A 40 20 9/1/2020 Group1 20
B 20 10 9/1/2020 Group2 10
B 10 5 9/1/2020 Group2 5
B 10 5 9/1/2020 Group2 5
A 20 10 9/1/2020 Group1 10
A 20 10 9/1/2020 Group1 10
B 10 5 9/1/2020 Group2 5
B 10 5 9/1/2020 Group2 5
这就是我所做的
1。 首先创建计算器。名为字段:组 - 将数据分组
IF [Id] = 'A' THEN 'Group1'
ELSEIF [Id] = 'B' THEN 'Group2'
ELSE 'none'
END
然后创建计算。字段 - sum_avg Group1 (A) 列的总和并取 Group2 (B) 的平均值
CASE [group]
WHEN 'Group1' THEN { FIXED [Id]: SUM([Avail])}
WHEN 'Group1' THEN {FIXED [Id]: SUM([used])}
WHEN 'Group1' THEN {FIXED [Id]: SUM([Total])}
WHEN 'Group2' THEN { FIXED [Id]: AVG([Avail])}
WHEN 'Group2' THEN {FIXED [Id]: AVG([used])}
WHEN 'Group2' THEN {FIXED [Id]: AVG([Total])}
END
结果如下:
想要的结果:
我希望添加 Group1(sum) 和 Group2(avg)对于 Avail、Used 和 Total,以便 最终图表结合了两个蓝色值并结合了绿色值。
The SUM of Group1A Avail = 45 and the AVERAGE of G Avail Group2 = 6
So I wish the Avail section (blue) of the barchart to be: 51
and the Used (green) should be 51 as well
with the total as 102 (Ill add to tooltip)
欢迎任何建议-我仍在研究这个问题,欢迎任何建议
更新
我有一个数据集,我希望在其中反映自定义 SQL 查询的总计。这是一些示例数据:
Size Tb Val type Group Sum_AVG SKU Last_refreshed
270 90.5 Free_Space_TB Group2 90.5 Excel 9/1/2020
270 179.5 Used Group2 179.5 Excel 9/1/2020
这是自定义查询输出
这是我的看法
当我将鼠标悬停在上方时会出现效用和已使用,但我该如何包括总数?
这是我正在使用的计算(感谢 SO 成员的帮助):
{SUM({Fixed [type]: ZN(sum(if [Group]= 'Group1' then [Val] end))})
+
sum({Fixed [type]: zn(avg(if [Group] = 'Group2' then [Val] end))})}
SUM_AVG 是:
zn(sum(if [Group]= 'Group1' then [Val] end))
+
zn(avg(if [Group] = 'Group2' then [Val] end))
我做错了什么,因为它是所有列的总和,而我只想要每一列的总数。
(使用的是使用自定义查询创建的)
提出以下解决方案-
- 总计栏没有用。请放下它。这将不必要地增加数据的大小。 (对于工具提示,我会告诉您如何操作)。
使用的示例数据
+----+-------+--------+------+
| Id | Avail | group | used |
+----+-------+--------+------+
| A | 5 | Group1 | 5 |
+----+-------+--------+------+
| A | 20 | Group1 | 20 |
+----+-------+--------+------+
| B | 10 | Group2 | 10 |
+----+-------+--------+------+
| B | 5 | Group2 | 5 |
+----+-------+--------+------+
| B | 5 | Group2 | 5 |
+----+-------+--------+------+
| A | 10 | Group1 | 10 |
+----+-------+--------+------+
| A | 10 | Group1 | 10 |
+----+-------+--------+------+
| B | 5 | Group2 | 5 |
+----+-------+--------+------+
| B | 5 | Group2 | 5 |
+----+-------+--------+------+
- 旋转两列(
used
和avail
)。下面包含一个 gif
- 创建计算字段
CF
as
zn(sum(if [Group]= 'Group1' then [Val] end))
+
zn(avg(if [Group] = 'Group2' then [Val] end))
- 将
AGG(CF1)
拖到行架和文本中,type
拖到标记卡中的颜色;您将在used
和avail
. 两种类型中获得具有 51 和 51 值的所需视图
- 对于
total
工具提示,即102
创建一个计算字段total
as
{SUM({Fixed [Type]: ZN(sum(if [Group]= 'Group1' then [Val] end))})
+
sum({Fixed [Type]: zn(avg(if [Group] = 'Group2' then [Val] end))})}
将此字段添加到标记卡的详细信息中(而不是像往常一样显示工具提示)。
单击工具提示并根据喜好在此处编辑计算。我把它编辑成
Out of total <total> TB SKU, <AGG(CF1)> was <Type>
您会得到这样的工具提示。
和
P.S./EDIT 这是关于画面中的旋转数据。您可以按照 here 中提到的说明修改 sql 查询,而不是通过 SQL 连接来连接完整数据。两个选项-
- Option-1 在 sql 中创建使用的列并在画面中旋转。导入 data/creating 连接时使用此查询-
select ID, date, avail, total - avail AS used, group from table_name
- Option-2 在 sql 本身中旋转数据。然后使用此查询-
select ID, date, avail as val, "avail" as type, group from table_name
UNION
select ID, date, total - avail AS val, "used" as type, group from table_name
此后您可以在画面中继续。
看到画面使用长数据格式,而您的数据是宽格式。您应该将您的 SKU 内存分配保持在行而不是列中,这样每当您需要划分时,向标记卡添加额外的字段类型就可以完成这项工作。相反,如果您将它放在列中,那么它们始终是两个单独的度量,而实际上它是一个度量。我建议你在网上阅读一些关于整洁数据格式的文章,其中你会清楚地了解行、列和 column_names 中要保留什么。将数据重塑为正确整洁的格式可以解决很多问题。
请记住,如果变量(列)名称中有任何值,您必须转换数据。这里 used
和 avail
是变量值,因此它们不能在 column_names 中(即变量名)我想我很清楚。
祝你好运。