将具有内部联接的复杂查询转换为tableau

时间:2015-06-09 22:28:44

标签: tableau

我有这样的查询,我们用它来为我们的自定义仪表板生成数据(A Rails应用程序) -

SELECT AVG(wait_time) FROM (
     SELECT TIMESTAMPDIFF(MINUTE,a.finished_time,b.start_time) wait_time
           FROM (
                SELECT max(start_time + INTERVAL avg_time_spent SECOND) finished_time, branch
                  FROM mytable
                 WHERE name IN ('test_name')
                   AND status = 'SUCCESS'
                 GROUP by branch) a
          INNER JOIN
                (
                SELECT MIN(start_time) start_time, branch
                  FROM mytable
                 WHERE name IN ('test_name_specific')
                GROUP by branch) b
          ON a.branch = b.branch
         HAVING avg_time_spent between 0 and 1000)t
GROUP BY week

现在我正在尝试将其移植到画面,我无法找到在画面中表示此数据的方法。我坚持如何在计算字段中表示内部组。我也可以尝试使用自定义的sql数据源,但我已经在使用其他数据源了。

mytable中的

列 -

  1. start_time
  2. avg_time_spent
  3. 姓名
  4. 分支
  5. 状态
  6. 我认为这可以实现新的Level Of Details公式,但不幸的是我被困在版本8.3

1 个答案:

答案 0 :(得分:0)

在极少数情况下保存自定义SQL。这看起来并不罕见。让Tableau为您生成SQL。

如果您只是连接到您的表,那么您通常可以编写计算字段来获取所需信息。我不完全确定为什么在查询的一部分中有test_name但在另一部分中有test_name_specific,所以忽略它,这是类似查询的简化示例。

如果定义名为worst_case_test_time的计算字段 datediff(min(start_time),dateadd(' second',max(start_time),avg_time_spent)),这看起来接近原始查询所说的内容。

如果你解释了你想要计算什么,那会有所帮助。它似乎是平均测试时间的某种最坏情况。可能有一个更简单的公式,但很难知道没有一点上下文。

你可以过滤状态="成功"和avg_time_spent< 1000,并将分支和WEEK(start_time)放在行和列架上。

P.S。您的查询似乎有些偏差。在HAVING关键字之后,你不需要像MAX或AVG这样的聚合函数吗?