Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tableau api 在表中的select语句中使用子查询_Tableau Api - Fatal编程技术网

Tableau api 在表中的select语句中使用子查询

Tableau api 在表中的select语句中使用子查询,tableau-api,Tableau Api,我有三个表,结构如下: 1患者id、姓名 2.身份证、姓名 3患者疾病患者id,疾病id 在Tableau中,我想查询一组特定患者的疾病,例如,那些没有癌症的患者 在SQL中,这看起来像 SELECT * FROM patients INNER JOIN patient_illnesses ON patients.id = patient_illnesses.patient_id INNER JOIN illnesses ON illnesses.id = patient_illnesses

我有三个表,结构如下: 1患者id、姓名 2.身份证、姓名 3患者疾病患者id,疾病id

在Tableau中,我想查询一组特定患者的疾病,例如,那些没有癌症的患者

在SQL中,这看起来像

SELECT * FROM patients 
INNER JOIN patient_illnesses ON patients.id = patient_illnesses.patient_id 
INNER JOIN illnesses ON illnesses.id = patient_illnesses.illness_id 
WHERE NOT patients.id NOT IN (
SELECT patients.id FROM patients
INNER JOIN patient_illnesses ON patients.id = patient_illnesses.patient_id 
WHERE patient_illnesses.illness_id = 4 
GROUP BY patients.id
)
在这个例子中,disease_id 4指的是一种特定的疾病,但我希望能够在这个问题的表中多选择过滤器

我可以用自定义SQL在Tableau中实现这一点,但是当我使用自定义SQL时,我无法让过滤器工作


有什么想法吗?

避免使用自定义SQL,除非在越来越少的情况下,您需要访问一些特定于数据库的专门功能。除了不是很灵活之外,它还阻止Tableau执行一些查询优化

有多种解决方案。对于这一行,我创建了一个连接,将所有三个表连接在一起,以获得每个患者/疾病的一行。然后我将id字段隐藏在Tableau中,并重命名name字段,以描述它们来自哪些表

然后我定义了一组由条件定义的患者——在本例中,条件是患者不得患有某种特定疾病。所讨论的疾病由一个参数提供。集合对于这种特殊情况非常有用,但是您可以使用LOD计算,或者使用一对数据源和动作过滤器或其他方法

该条件需要稍微仔细理解,但它只是一个布尔表达式,它接受一组具有相同患者id的记录,并返回true或false以指示该患者是否应属于该组。这有助于了解最小值和最大值函数将真值视为大于假值。因此,只有当考虑的批处理中的每个数据行都为真时,MIN才为真

最后,这里所有内容都在仪表板上,以及用于错误检查的数据的交叉选项卡视图


一般来说,如果您不使用定制SQL,而是学习使用相应的Tableau功能,并让Tableau为您生成优化的SQL,那么您将从Tableau中获得更多好处。在某些特殊情况下,自定义SQL很有价值,例如使用特定数据库的地理空间功能。但是,对于典型的数据分析任务,组合、筛选、聚合和选择数据,您不需要自定义SQL。当然,对于此类问题有帮助的Tableau功能包括连接、集合和详细级别LOD计算,以及各种类型的过滤器。抱歉,我更喜欢在不使用自定义SQL的情况下执行此操作。我只是不知道如何使用现有的Tableau工具来实现这一点。