按最近的非空值聚合

Aggregate by most recent not-null value

我有一个包含以下列 [product_id、country_id、日期、number_of_installs、cumulative_installs_last_30_days ]

的数据集

我可以在这三个维度(product_id、country_id、日期(按月或周汇总)中应用标准度量来查找总和、最大值或平均值 number_of_installs )).但是,我无法按 cumulative_installs_last_30_days 进行聚合,因为该变量已经是一个累积变量,我需要 return “最新值”,而 Tableau 没有内置聚合选项职能。

如何创建一个计算字段,使聚合数据集中的附加列在维度 product_id、country_id 和 country_id 中具有最新的非空值 cumulativeInstalls_last_30_days日期(按月或周汇总)?

这是一个肮脏的解决方案。

在评论中,您指出您希望 30 天是动态的,因此要实现这一点,请创建一个参数,将其设为整数,select 范围,并允许任何大于零的整数。我将其命名为 [Number of Days]

然后创建计算字段:

TOTAL(SUM(IIF(DATEDIFF("day", [date], TODAY()) < [Number of Days], [Number of Installs], NULL)))

我知道那是 ridonk,所以我会把它从里到外分解。

DATEDIFF("day", [date], TODAY())

这只是计算今天和给定行中的日期之间的天数差异。

IIF(DATEDIFF("day", [date], TODAY()) < [Number of Days], [Number of Installs], NULL)

检查该差异是否小于您 selected 的天数。如果是,则此语句等于安装次数。如果不是,则为空。因此,如果我们将所有这些值相加,我们只会得到最近 [Number of Days] 天的安装数量。

考虑到这一点,我们对行进行 SUM()。 TOTAL() 只是对构成分区的每个数据库行执行求和。

请注意,如果您的数据库的日期在 TODAY() 之后,您将需要向该 IIF() 语句添加另一个条件以确保不包含这些条件。


您还提到您希望能够按月汇总安装数量。这要容易得多。只需将 MONTH([date]) 输入仪表板,然后输入 SUM([Number of Installs]),Tableau 就会为您计算出来。