首页 > 解决方案 > 如何修复在订单中检查日期的计算字段?

问题描述

数据结构类似于以下状态,访问状态遵循以下顺序:夏威夷 -> 加利福尼亚 -> 德克萨斯 -> 纽约。

| Name       | State       | Date         |
|:-----------|------------:|:------------:|
| Alice      |       Hawaii|   1/1/2019   |
| Alice      |   California|   1/3/2019   |
| Alice      |        Texas|   1/5/2019   |
| Alice      |     New York|   1/7/2019   |
| Bobby      |       Hawaii|   3/20/2019  |
| Bobby      |   California|   3/23/2019  |
| Bobby      |        Texas|              |
| Bobby      |     New York|              |
| Carl       |       Hawaii|   2/10/2019  |
| Carl       |   California|   2/12/2019  |
| Carl       |        Texas|   2/12/2019  |
| Carl       |     New York|              |

我只想为那些还没有去过纽约但参观过 Tableau 中所有其他地方的人显示日期。

在这种情况下,这将是 Carl,因为他访问了夏威夷、加利福尼亚和德克萨斯,但还没有访问纽约。

爱丽丝不会出现,因为她已经访问过纽约,鲍比不应该出现,因为他还没有去过德克萨斯

我尝试制作一个计算字段并将其拖动以进行过滤。

IF (ISNULL([Date]) AND [State] = "New York") AND

(NOT ISNULL([Date]) AND 
([State] = "Hawaii" OR
[State] = "California" OR
[State] = "Texas"))

THEN
[Date]

END

我希望输出计算字段返回以下 DATE 列:

| Name       | State       | Date         |
|:-----------|------------:|:------------:|
| Alice      |       Hawaii|              |
| Alice      |   California|              |
| Alice      |        Texas|              |
| Alice      |     New York|              |
| Bobby      |       Hawaii|              |
| Bobby      |   California|              |
| Bobby      |        Texas|              |
| Bobby      |     New York|              |
| Carl       |       Hawaii|   2/10/2019  |
| Carl       |   California|   2/12/2019  |
| Carl       |        Texas|   2/12/2019  |
| Carl       |     New York|              |

但我得到的一切都是空的,所以我的逻辑有些错误,但我不知道是什么。

标签: tableau-apicalculated-fieldmeasure

解决方案


将名称放在过滤器架子上。选择全部使用并切换到条件选项卡。为条件输入以下公式。

max([State] = "Hawaii") and max([State] = "California") and max([State] = "Texas") and not max([State] = "New York")

或者,您可以基于 Name 字段创建一个集合,其中包含访问过您想要的州的人员 - 使用上述条件中的前 3 行。另一组也基于 Name 字段,其中包含访问过您不想要的州的人。然后制作一个组合,其中第一组的人减去第二组的人。

然后,您可以根据需要在过滤器、计算字段和货架上使用集合。

顺便说一句,如果任何数据记录都满足,则 max([condition]) 为真,因为 True 被视为大于 False。如果所有数据记录都满足 [条件],则 min([条件]) 为真


推荐阅读