【问题标题】:How do I use sum inside of nested IF in Tableau?如何在 Tableau 的嵌套 IF 内使用 sum?
【发布时间】:2021-10-31 05:21:12
【问题描述】:

我想根据消费金额和会员日期计算客户将获得多少购物积分。有些客户不止一次订购,因此是 nth.order 列,但我想使用总支出,不管他们订购了多少次。

他们每消费 1​​.000.000 就可以获得 1 积分。在特殊季节(2021 年 6 月 1 日 - 2021 年 8 月 31 日),他们将获得三倍积分,但前提是他们的总消费至少为 3.000.000。

它也向下舍入了 1.000.000 的重要性。所以在正常季节消费4.500.000可以获得4分,如果他们的会员是在特殊季节,他们将获得12分。

这是我的示例数据:

cust.id start.date end.date nth.order spending
123 6/5/2021 6/7/2021 1 500.000
123 6/5/2021 6/7/2021 2 500.000
456 6/8/2021 6/9/2021 1 3.000.000
789 6/11/2021 6/13/2021 1 1.500.000
789 6/11/2021 6/13/2021 2 1.500.000
789 6/11/2021 6/13/2021 3 1.500.000
000 4/1/2021 5/5/2021 1 3.500.000
000 4/1/2021 5/5/2021 2 3.500.000

这就是我想要的结果:

cust.id start.date end.date spending poin
123 6/5/2021 6/7/2021 1.000.000 1
456 6/8/2021 6/9/2021 3.000.000 9
789 6/11/2021 6/13/2021 4.500.000 12
000 4/1/2021 5/5/2021 7.000.000 7

客户。 123 得 1 分,因为他们的总支出是 1.000.000,但不是最低 3.000.000,即使是在特殊季节。

客户。 456 得到 9,因为他们的总支出 >= 3.000.000 并且处于特殊季节

cust.789 得到 12,原因与 cust.456 相同

cust.000 只得到 7,因为即使总消费超过 3.000.000,但不是在特殊季节

我已经试过了:

IF start.date >= #6/1/2021#
AND end.date <= #8/31/2021#
AND sum[spending]>=300000
THEN FLOOR([spending]/1000000)*3

ELSEIF start.date>= #1/1/2021#
AND end.date <= #12/31/2021#
THEN FLOOR([spending]/1000000)

ELSE 0

END

但我得到的结果是:

cust.id start.date end.date spending poin
123 6/5/2021 6/7/2021 1.000.000 0
456 6/8/2021 6/9/2021 3.000.000 9
789 6/11/2021 6/13/2021 4.500.000 3
000 4/1/2021 5/5/2021 7.000.000 6

我尝试过这样做:

IF start.date >= #6/1/2021#
AND end.date <= #8/31/2021#
AND sum[spending]>=300000
THEN FLOOR(sum[spending]/1000000)*3

ELSEIF start.date>= #1/1/2021#
AND end.date <= #12/31/2021#
THEN FLOOR(sum[spending]/1000000)

ELSE 0

END

但它一直说“不能混合聚合和非聚合比较或导致'IF'表达式”。我尝试创建包含sum[spending] 的计算字段,将其命名为“总支出”,并做了类似...THEN FLOOR ([total spending]/1000000)... 的操作,但它给出了相同的错误消息。

请帮忙..

【问题讨论】:

    标签: tableau-desktop


    【解决方案1】:

    由于您的开始/结束日期始终与客户 ID 相关,因此可以完全汇总不同的订单行。

    话虽如此,您可能想要创建一个Total Spending

    { FIXED [Cust.Id] : SUM([Spending])}
    

    然后您需要汇总您的数据,以查看成员资格是否在Promotion 的特殊范围内:

    { FIXED [Cust.Id] : MAX( if [Start.Date] >= MAKEDATE(2021,6,1) and [End.Date] <= MAKEDATE(2021,8,31)
                             then 'Y'
                             else 'N'
                             end
                           )
    }
    

    然后您可以处理这些聚合数据(在客户级别),而无需担心Points

    floor([Total Spending]/1000000)
    *
    if [Promotion] = 'Y' and [Total Spending] >= 3000000 then 3 else 1 end
    

    结果将如下所示:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 2020-10-12
      • 2022-01-17
      • 2017-03-24
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多