【问题标题】:Aggregate by most recent not-null value按最近的非空值聚合
【发布时间】:2015-08-31 11:28:46
【问题描述】:

我有一个数据集,其中包含以下列 [ product_id、country_id、date、number_of_installs、cumulative_installs_last_30_days ]

在这三个维度(product_id、country_id、date(按月或周聚合))内应用标准度量来查找总安装数、最大或平均 number_of_installs 没有问题。但是,我无法通过累积安装数最后 30 天进行聚合,因为该变量已经是累积的,我需要返回“最新值”,而 Tableau 没有内置聚合函数的选项。

如何创建一个计算字段,以启用聚合数据集中的附加列,该列在 product_id、country_id 和 date(按月或周聚合)维度内具有最新的非空值 nucleusInstalls_last_30_days?

【问题讨论】:

  • [number_of_installs] 和 [cumulative_installs_last_30_days] 在数据中是否匹配?例如,如果您将 1 月 1 日到 1 月 30 日的 [number_of_installs] 相加,您会得到 1 月 30 日的 [cumulative_installs_last_30_days] 中的数字吗?如果是这样,创建一个计算字段来为您执行聚合可能会更容易。
  • @alaprise,他们确实匹配。 “30_days”是一个例子,因为数字可能会改变。此外,我可能需要按月汇总,“cumulative_installs_...”可能长于或短于 30 天。此外,变量需要与“今天”相关。我在 Tableau 论坛中寻找解决方案,但尚未找到解决方案。

标签: tableau-api


【解决方案1】:

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

在 cmets 中,您指出您希望 30 天是动态的,因此要实现这一点,请创建一个参数,将其设为整数,选择 Range,并允许任何大于零的整数。我就叫它[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)

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

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

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2023-04-09
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多