If statement 在Tableau中执行多个groupby转换和聚合函数
我有一个看起来与下面数据非常相似的数据集If statement 在Tableau中执行多个groupby转换和聚合函数,if-statement,tableau-api,visualization,If Statement,Tableau Api,Visualization,我有一个看起来与下面数据非常相似的数据集 我想使用group列中的值创建两个组 第1组-新& 第2组-旧 在group1-new中,我想先按id分组,然后取每个分组id的平均值,然后求和 数据: 第一步-创建组1和组2 id group type used free total Last refreshed a group2 old 1 4 5 11/1/2020 b group2 old 1
id group type used free total Last refreshed
a group2 old 1 4 5 11/1/2020
b group2 old 1 4 5 11/1/2020
c group2 old 1 4 5 11/1/2020
f group2 old 1 1 2 11/1/2020
g group2 old 1 1 2 11/1/2020
d group1 new 2 1 3 11/1/2020
e group1 new 2 1 3 11/1/2020
e group1 new 2 2 4 11/1/2020
d group1 new 2 2 4 11/1/2020
第二步groupby id
id group type used free total Last refreshed
d new group1 2 1 3 11/1/2020
d new group1 2 2 4 11/1/2020
e new group1 2 1 3 11/1/2020
e new group1 2 2 4 11/1/2020
a old group2 1 4 5 11/1/2020
b old group2 1 4 5 11/1/2020
c old group2 1 4 5 11/1/2020
f old group2 1 1 2 11/1/2020
g old group2 1 1 2 11/1/2020
第三步
我们按id分组,取d的平均值(每列)
我们按id分组并取e的平均值(每列)
然后我们对旧组中的值求和(每列)
然后我们把这些加起来
id used free total Last refreshed
d 2 1.5 3.5 11/1/2020
e 2 1.5 3.5 11/1/2020
old 5 14 19 11/1/2020
期望的结果
所有这些加在一起得到:
used free total Last refreshed
9 17 26 11/1/2020
图表:
这就是我正在做的:
2.将类型分组放置
2.创建计算字段
zn(avg(if [Group]= 'Group1' end))
+
zn(sum(if [Group] = 'Group2' end))
对于第一部分,即groupby转换和聚合,如有任何建议,请使用以下计算创建三个计算字段
所需免费服务
所需的已用
和所需的总计
。您将获得所需的聚合表(参见屏幕截图)
要创建条形图(堆叠),您必须通过将使用的和自由的棒状图旋转(转换)到一维。如果您愿意,我可以再次为您提供解决方案。在您的组2中,所有的
id
s都是不同的,没有两个是相同的。因此,如果将这些单行(在组2中)取平均值,结果将是相同的。此外,正如前面所建议的,您必须旋转列以显示度量值。我想说的是,(I)如果ID组是不同的,那么问题可以很容易地解决,(ii)使用上面显示的预期结果,您无法实现视觉效果(因为在您的结果中有三个度量,而在图表中只有一个)@AnilGoyal组2中的值只能求和。使用测量值avail和Total是否有办法创建两个组:组1和组2,然后根据其中一个组中的值进行分组,取平均值,另一个取总和?我还在工作this@Lynnette对于一个“旧”id,例如两个id为“a”的数据行,您的示例数据是否会有多行?如果是这样的话,你会像对待新id那样首先按id分组并平均值(在最后的求和步骤之前)吗?完全是Alex!这也是我想问林内特的。如果所有旧ID每个日期都有一行,那么问题就简单多了。看到这个不错的解决方案了吗?是的,barchartFYI提供了一种方法,大量使用LOD计算会带来复杂性和性能方面的成本。有用,有时是必要的工具,但我会先尝试记录和聚合级别计算,然后仅在需要时将LOD计算添加到混合中。
zn(avg(if [Group]= 'Group1' end))
+
zn(sum(if [Group] = 'Group2' end))
{SUM({Fixed [Last Refreshed]: SUM(IF [Type] = "new" THEN
{FIXED [Last Refreshed], [Type], [Id] : AVG([Free])}
ELSEIF [Type] = "old"
THEN {FIXED [Last Refreshed], [Type], [Id] : SUM([Free])}
END)})}