【问题标题】:Tableau calculation to disregard filters忽略过滤器的 Tableau 计算
【发布时间】:2020-06-01 19:25:21
【问题描述】:

我的数据如下所示:

endtimestamp|account|volume|pk|var1

jan-1, conosco, 123, 13231, a
jan-1, conosco, 123, 13231, b 
jan-1, conosco, 123, 13231, c 
jan-1, acme, 1323, 2123123, a
jan-1, acme, 1323, 2123123, b
jan-1, acme, 1323, 2123123, c
jan-2, conosco, 128, 131231, a
jan-2, conosco, 128, 131231, b
jan-2, conosco, 128, 131231, c
jan-2, acme, 1329, 31323, a
jan-2, acme, 1329, 31323, b
jan-2, acme, 1329, 31323, c
...

我有一个基于过滤器得到总和的计算

称之为fixed_sum_volume

sum({FIXED [pk], [account]: max([volume])})

我有两个过滤器

endtimestamp

account

当日期范围Jan 1被选中,账户ACME被选中时

fixed_sum_of_volume 会给我日期范围的总和 - 1323

我需要将其除以所有时间的平均值,我不知道如何做到这一点,或者是否可以使用 tableau。

似乎这很容易,但我一直在努力解决这个问题。

总之,我正在寻找:

avg(过滤音量)/avg(非过滤音量)

【问题讨论】:

  • 是的,可以使用 Tableau。您需要在应用过滤器之前进行一次计算,并在应用过滤器之后进行第二次计算。有几种方法可以控制计算和过滤器的时间。阅读表格在线帮助中的“操作顺序”。

标签: postgresql tableau-api


【解决方案1】:

好吧,我不确定 sum(x)/avg(y) 能给你什么,但下面的内容可以完成。顺便说一句,您上面给出的值“fixed_sum_of_volume”不正确。您有 3 行用于日期 'Jan-1' 的 'acme' 帐户,每行 1323,因此总和为 3969。

with mytbl (endtimestamp,account,volume,pk,var1)  as
   ( values   (to_date('jan-1','mon-dd'), 'conosco', 123, 13231, 'a')
            , (to_date('jan-1','mon-dd'), 'conosco', 123, 13231, 'b')
            , (to_date('jan-1','mon-dd'), 'conosco', 123, 13231, 'c')
            , (to_date('jan-1','mon-dd'), 'acme', 1323, 2123123, 'a')
            , (to_date('jan-1','mon-dd'), 'acme', 1323, 2123123, 'b')
            , (to_date('jan-1','mon-dd'), 'acme', 1323, 2123123, 'c')
            , (to_date('jan-2','mon-dd'), 'conosco', 128, 131231, 'a')
            , (to_date('jan-2','mon-dd'), 'conosco', 128, 131231, 'b')
            , (to_date('jan-2','mon-dd'), 'conosco', 128, 131231, 'c')
            , (to_date('jan-2','mon-dd'), 'acme', 1329, 31323, 'a')
            , (to_date('jan-2','mon-dd'), 'acme', 1329, 31323, 'b')
            , (to_date('jan-2','mon-dd'), 'acme', 1329, 31323, 'c')
     )
select account, fixed_sum_of_volume, average_of_all_time, fixed_sum_of_volume/average_of_all_time "sum(filtered volume)/avg(non filtered volume)?"
  from 
       ( select m.account
              , sum(m.volume) filter (where to_date('jan-1','mon-dd') = m.endtimestamp) over() fixed_sum_of_volume
              , (select avg(m2.volume) from mytbl m2 where m2.account = 'acme' group by m2.account) average_of_all_time
           from mytbl m
          where m.account = 'acme' 
       ) a; 

【讨论】:

  • 感谢您的回复。我实际上是指平均值而不是总和。感谢您指出了这一点。 tableau 中的 fixed_sum_of_value 计算字段只会对唯一的 pk 值求和,因此在这 3 个值中,它只会考虑唯一的主键。
  • 您的数据没有唯一的单列键值。唯一的唯一值是 (pk,var1)。对于唯一的行,您不需要总和。 Sum(volume) = 任何唯一行的体积。请发布预期的输出。
猜你喜欢
  • 2014-06-24
  • 2021-11-22
  • 2016-10-10
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
相关资源
最近更新 更多