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

我有一个看起来与下面数据非常相似的数据集

  • 我想使用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    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)})}