【问题标题】:Array calculation in Tableau, maxif routineTableau 中的数组计算,maxif 例程
【发布时间】:2014-07-23 05:59:29
【问题描述】:

我对 Tableau 还很陌生,我正在努力构建一些可以在 Excel 中轻松实现的例程(尽管对于大数据集来说这将需要很长时间)。

这就是交易,考虑一个包含以下字段的数据集:

int [id_order] -> 销售订单的id(最深层次,只有id_order的唯一条目) int [id_client] -> 因为我想知道是谁买的 日期 [purchase_date] -> 客户购买产品的时间

我想知道的是,对于每个订单,客户最后一次(如果有的话)买东西是什么时候。换句话说,该用户小于当前购买日期的最高购买日期是多少。

在 excel 中,方法很简单(但同样,效率不高) {=max(if(id_client=B1,if(purchase_order

有没有办法在 Tableau 中进行这种计算?

【问题讨论】:

    标签: lookup-tables tableau-api


    【解决方案1】:

    您可以在 Tableau 中使用表格计算来执行此操作。他们需要一点时间来了解如何使用好,但是非常强大和灵活。我在 SO question Find first time a condition is met的答案中发布了一个类似问题的示例 Tableau 工作簿@

    您的情况类似,但是您希望对每个客户端 ID 重复分析,因此您可能想尝试使用 Previous_Value() 函数而不是该示例中使用的方法的递归方法 - 虽然我不确定 previous_value() 是否适合您的情况。

    不过,下载我提到的示例工作簿可能会有所帮助,以了解表计算如何解决类似问题。

    【讨论】:

    • 感谢您的回答。但是我怎样才能实现递归方法呢?我是 Tableau 新手,我知道我可以创建计算字段。我还可以创建函数或循环(例如 for/while)吗?如果我不能创建函数,我就看不到如何实现递归(所以我可以在内部调用它,使用不同的参数)
    • 在 Tableau 中进行递归计算的技巧是使用我提到的 Previous_Value() 函数。在文档中查找。表格计算需要一段时间才能理解。首先尝试看一些简单的。您不编写 for 或 while 循环,而是使用更实用的方法编写。
    • 好吧,我想出了如何在不递归的情况下解决我的问题。我需要更深入地了解表计算(window_ 函数)的工作原理,以及如何让它们按我想要的方式工作。至于递归,我现在可以看到它是如何工作的,我认为它有点有限。但对于大多数 Tableau 应用程序来说,它们不应该是必需的,所以我可以接受(目前)
    • 我同意使用 previous_value() 的递归有点受限,但这就是现在可用的。它适用于诸如运行计算之类的事情。通常,使用 Tableau 可以通过更简单的方法获得相同的结果。
    • 像大多数工具一样 =D。当然,对于运行计算(使用现成的 RUNNING_ 计算无法进行),它非常好
    【解决方案2】:

    只是为了注册解决方案,以防有人有同样的疑问。

    所以,基本上我找到的解决方案使用表计算,直到在工作表上调用它才会计算(并且只在工作表的上下文中计算)。这有点限制,所以我要做的是创建一个包含我需要的所有字段的工作表(+ 表计算所必需的)然后导出数据(到 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。

    【讨论】:

      猜你喜欢
      • 2021-03-04
      • 2021-06-22
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      相关资源
      最近更新 更多