如何对一个度量执行两种不同的聚合并进一步聚合结果以在 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    |
+----+-------+--------+------+
  • 旋转两列(usedavail)。下面包含一个 gif

  • 创建计算字段 CF as
zn(sum(if [Group]= 'Group1' then [Val] end))
+
zn(avg(if [Group] = 'Group2' then [Val] end))
  • AGG(CF1)拖到行架和文本中,type拖到标记卡中的颜色;您将在 usedavail.
  • 两种类型中获得具有 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 中要保留什么。将数据重塑为正确整洁的格式可以解决很多问题。

请记住,如果变量(列)名称中有任何值,您必须转换数据。这里 usedavail 是变量值,因此它们不能在 column_names 中(即变量名)我想我很清楚。

祝你好运。