Tableau api 在表中的select语句中使用子查询
我有三个表,结构如下: 1患者id、姓名 2.身份证、姓名 3患者疾病患者id,疾病id 在Tableau中,我想查询一组特定患者的疾病,例如,那些没有癌症的患者 在SQL中,这看起来像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
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工具来实现这一点。