【问题标题】:Why is my Custom SQL query (which works fine outside of Tableau) failing in Tableau?为什么我的自定义 SQL 查询(在 Tableau 之外运行良好)在 Tableau 中失败?
【发布时间】:2017-09-14 22:50:33
【问题描述】:

下面的查询在 mysql 客户端 (Heidi) 中运行良好,但在 Tableau 中出错。我查看了此处和 Tableau 社区站点,我看到的唯一建议是去掉分号。我试过没有用。我通过 Tableau 很好地连接到我的数据库 - 我可以看到表和其他查询运行没有问题。关于这里可能存在什么问题的任何想法?我正在运行 Tableau 8.2。谢谢!

SET @sql=NULL;

SELECT
Group_Concat(Distinct CONCAT(
'MAX(IF(wsd.cid = ''', wc.cid, ''', wsd.data, NULL)) AS    ''',wc.name,'',''''))
INTO @sql
FROM webform_component wc
WHERE wc.nid = 107;

SET @sql = Concat('SELECT wsd.sid,',@sql,'
FROM webform_submitted_data wsd
LEFT Join webform_component AS wc ON wsd.cid=wc.cid
WHERE wsd.nid = 107 AND wsd.sid >= 14967
GROUP BY wsd.sid');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt; 

【问题讨论】:

  • 您收到的错误是什么?
  • 为什么你的SQL服务器上没有上面的内部存储过程,然后从tableau调用存储过程?我将这种方法用于更复杂的查询,但我主要使用 MS SQL Server。

标签: mysql tableau-api


【解决方案1】:

事实证明,Tableau SQL 在连接到 mySQL 数据库时不支持这种类型的查询。我收到的建议是尝试将其重新格式化为嵌套子查询。

当我询问是否可以使用上述查询时,这是我从 Tableau 的项目经理那里得到的回答:

“您不能。它应该是返回结果集的单个查询。Tableau 会将自定义 SQL 查询包装为子查询。如果您的 SQL 不能以这种方式处理,则会出现错误。

我们在支持“初始 SQL”的数据源上支持这种结构。例如 Teradata、Aster...

它允许您预先运行任何 SQL、创建临时表等,因此称为初始 SQL。

然后您可以编写一个查询作为连接的一部分,该查询将在“初始 SQL”之后进行评估,并利用在初始 SQL 步骤中创建的对象。”

【讨论】:

  • 如果您想鼓励 Tableau 为 MySQL 添加 Initial SQL 功能,就像他们为其他数据库所做的那样,请在他们的网站上支持以下想法community.tableau.com/ideas/4491
【解决方案2】:

自定义查询也有这个问题。我可以连接到数据库并使用 gui 来引入数据,但我无法编写自定义查询。

下载 mysql drivers 足以为我修复它。

我也有 read 建议您下载 3.51 和 5.X 版本并使用各自的 32 位版本,即使您运行的是 64 位 Tableau

【讨论】:

    【解决方案3】:

    我在自定义 SQL 查询中遇到了类似的情况。 我有一个仪表板,使用自定义 SQL 查询开发,使用程序 ID 过滤器连接到数据库 - “SQL Query where program id = 222”。我需要为另一个程序“SQL Query where program id = 333”复制相同的仪表板。该查询最初在刷新数据源时不起作用。

    解决方案 - 如果您正在使用数据提取,请将连接更改回“实时”,创建一个新数据提取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 2021-03-06
      • 2014-09-06
      • 1970-01-01
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多