只是为了注册解决方案,以防有人有同样的疑问。
所以,基本上我找到的解决方案使用表计算,直到在工作表上调用它才会计算(并且只在工作表的上下文中计算)。这有点限制,所以我要做的是创建一个包含我需要的所有字段的工作表(+ 表计算所必需的)然后导出数据(到 mdb)并连接到这个新文件。
因此,对于我的示例,正确的表计算是(我们将其命名为 last_order_date):
LOOKUP(MAX([purchase_date]),-1)
解释。 MAX() 是必需的,因为查找(和所有表计算)不能直接处理数据,只能处理聚合。您可以使用 sum、avg、max、attr,只要适合您。就我而言,只有 1 个对应关系,任何函数都可以正常工作并返回相同的值。
-1 表示我正在查找当前条目之前的元素(在您定义的表中)。如果它是 FIRST(),它将用于表的第一个条目,而 LAST() 将用于最后一个。
现在,我必须把它放在一张纸上。所以我会带上字段 id_client、id_order、purchase_date 和 last_order_date。
然后我必须定义我的表格计算last_order_date(编辑表格计算)的参数。我会去计算使用并选择高级。现在我将进行分区:id_client,并解决所有其他问题。那会做什么?这意味着 Tableau 将为每个 id_client 创建临时表,并且表计算将使用这些表作为参数。
此外,我将按字段 purchase_date、Max(再次聚合问题)和升序排序,以保证我的条目按时间顺序排列。
现在,它会做什么?对于每个条目,它将访问 id_client 的表,并检查紧接在当前条目(正在评估)之前的 purchase_date 是什么,这正是我需要的。
为了避免在可视化中花费 Tableau 处理,我经常将所有字段都放在详细信息中(屏幕上什么都不留),使用条形图(这很好,因为它可以让我看到数据)。然后我将它导出到 mdb,然后再次连接到它。不幸的是,Tableau 不直接导出到 tde。