使用Tableau中的'in'子句向自定义sql查询添加参数

问题描述

源数据库-Teradata
BI工具-Tableau

我已经在Tableau中创建了一个报表,在其中使用自定义sql查询获取某些数据时,该查询正在从Teradata数据库访问数据。以下面的sql查询为例:

    Select Tab1.Col1,Tab1.Col2,Tab2.Col3 from Tab1 
    inner join Tab2 on Tab1.col1 = Tab2.col1 
    where Tab1.Col1 in ('Alpha','Beta','Gamma')

Tableau报告工作正常,并且可以检索数据。

在Tableau中创建一个名称为P_RAYS的字符串参数。并将此参数传递给自定义sql查询,如下所示:

    Select Tab1.Col1,Tab2.Col3 from Tab1 
    inner join Tab2 on Tab1.col1 = Tab2.col1 
    where Tab1.Col1 in (<Parameters.P_RAYS>)

当仅将Alpha传递给参数时,tableau会检索数据并准确生成报告,但是当将Alpha,Beta和Gamma传递给参数时,tableau中不会返回任何数据。

看起来像在自定义sql查询中,参数被错误地处理为“ Alpha,Beta,Gamma”而不是“ Alpha”,“ Beta”,“ Gamma”

解决方法

解决此问题的最简单方法是创建多个参数,每个值一个,然后在 SQL In 语句中传递每个参数。如果您总是要传递少量参数(,, )。我们通常在工作簿中创建一个控制页面来为最终用户解释和设置这些参数和过滤器。如果参数的数量有时会发生变化,您可以将未使用的参数设置为与使用的参数相同的值,或者如果在您的数据集中找不到 NULL 值,则设置为 NULL。如果您需要有 >10 个列表项,则使用另一种方法,例如使用集合或过滤器使用不同的字段值并过滤此字段 在工作簿中将是更好的选择。

,

这就是我对带有“|”的参数所做的分隔符:

SELECT [COL1],[COL2],[COL3],[COL4] 

FROM [TABLE1]

WHERE 

COL1 IN(SELECT * FROM string_split(<Parameters.MultiValueFilterParam1>,'|')) AND
COL2 IN(SELECT * FROM string_split(<Parameters.MultiValueFilterParam2>,'|')) AND
COL3 = <Parameters.SingleValueFilterParam1> AND
COL4 BETWEEN <Parameters.RangeValueFilterParamMIN> AND <RangeValueFilterParamMIN>

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...