【问题标题】:How to perform two different aggregation on one measure and further aggregate the results to view as one aggegated measure in Tableau如何在一个度量上执行两个不同的聚合并进一步聚合结果以在 Tableau 中查看为一个聚合度量
【发布时间】:2021-03-05 19:52:18
【问题描述】:

我有一个数据集,我希望根据值名称将数据分成两组。然后我希望对一组的结果进行平均,并对另一组的结果求和。最后,我想把这两者相加来创建一个条形图。

更新 这是数据

    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。 首先创建计算。字段命名:group - 将数据分组

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))

我做错了什么,因为它在所有列中总计,而我只想要每列的总数。

(使用自定义查询创建)

【问题讨论】:

  • 我很抱歉@anilgoyal 我已经更新了这篇文章
  • 请查看编辑后的答案。
  • 当您提供的数据仅涉及一个日期并且您的视图包含多个日期时,谁能为您提供帮助。总是建议给出最小的可重复示例,以便可以理解所有的曲折。尽管如此,请尝试在固定声明中包含 [日期]。或者请提供一些相当数量的数据来处理。
  • 好的@AnilGoyal,我在想这个概念是一样的。一切正常,除了我在所有蓝色列中的总计计算总计,而不是每个蓝色列。我将不得不更新帖子。谢谢s
  • 嗨@AnilGoyal 在固定声明中添加日期,类似这样吗? {SUM({Fixed [type]: ZN(sum(if [Group]= 'Group1' then [Val] end))}) + {SUM({Fixed[date]: ZN(sum(if[Group]= ' Group1; then [Val] end))}) + sum({Fixed [type]: zn(avg(if [Group] = 'Group2' then [Val] end))})} ?谢谢

标签: if-statement tableau-api visualization aggregation measure


【解决方案1】:

提出以下解决方案-

  • 总列没有用。请放下它。这将不必要地增加数据的大小。 (对于工具提示,我会告诉你怎么做)。

使用的样本数据

+----+-------+--------+------+
| 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
{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 这是关于在 tableau 中透视数据。您可以按照here中提到的说明修改sql查询,而不是通过SQL连接连接到完整的数据。两种选择-

  • Option-1 在 sql 中创建使用的列并在 tableau 中进行透视。在导入数据/创建连接时使用此查询-
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(即变量名)中我想我很清楚。

祝你好运。

【讨论】:

  • 谢谢@anilgoyal,请让我试试这个
  • 好的,我明白了——我必须放弃总数吗?如果我需要这个怎么办?我会试试这个
  • 好的,我需要转轴吗?或者我可以只使用我创建的组 - (CASE 语句)
  • 啊,好的,非常感谢你的知识@anilgoyal - 我会试试这个。
  • 不能在计算字段上做数据透视吗? - 我想也许这就是为什么它不让我@anilgoyal
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 2017-07-26
  • 2014-01-25
  • 2017-08-22
  • 2018-09-05
相关资源
最近更新 更多