在 Tableau 的 select 语句中使用子查询
Use subquery in select statement in Tableau
我有三个具有以下结构的表:
1)患者(身份证,姓名)
2)疾病(身份证,姓名)
3) patient_illnesses (patient_id, illness_id)
在 Tableau 中,我想查询 select 一组患者(例如,未患癌症的患者)的患者所患的疾病。
IN 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
)
在这个例子中,illness_id 4 指的是一种特定的疾病,但我希望能够在 Tableau 中对此进行多重select 过滤。
我可以在 Tableau 中使用自定义 SQL 完成此操作,但是当我使用自定义 SQL.
时我无法使过滤器工作
有什么想法吗?
避免自定义 SQL,除非在越来越罕见的情况下,您需要访问某些专门的数据库特定功能。除了不太灵活之外,它还会阻止 Tableau 执行某些查询优化。
有多种解决方案。对于这个,我创建了一个连接,将所有三个表连接在一起,每个 patient/disease 得到一行。然后我在 Tableau 中隐藏了 id 字段并重命名了名称字段以描述它们来自哪些表。
然后我定义了一组由条件定义的患者——在这种情况下,条件是患者不得患有某种特定疾病。所讨论的疾病由参数提供。集合对于这种特殊情况非常有用,但您可以使用 LOD 计算代替,或者使用具有动作过滤器或其他方法的一对数据源。
条件需要一点点理解才能理解,但它只是一个布尔表达式,它采用一组记录(具有相同的患者 ID)和 returns true 或 false 来指示该患者是否应该属于集合。了解 min 和 max 函数将 True 值视为大于 false 值会有所帮助。因此,仅当所考虑的批次中的每个数据行都为真时,MIN() 才为真。
最后,这一切都在仪表板上,还有用于错误检查的数据的交叉选项卡视图。
我有三个具有以下结构的表: 1)患者(身份证,姓名) 2)疾病(身份证,姓名) 3) patient_illnesses (patient_id, illness_id)
在 Tableau 中,我想查询 select 一组患者(例如,未患癌症的患者)的患者所患的疾病。
IN 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
)
在这个例子中,illness_id 4 指的是一种特定的疾病,但我希望能够在 Tableau 中对此进行多重select 过滤。
我可以在 Tableau 中使用自定义 SQL 完成此操作,但是当我使用自定义 SQL.
时我无法使过滤器工作有什么想法吗?
避免自定义 SQL,除非在越来越罕见的情况下,您需要访问某些专门的数据库特定功能。除了不太灵活之外,它还会阻止 Tableau 执行某些查询优化。
有多种解决方案。对于这个,我创建了一个连接,将所有三个表连接在一起,每个 patient/disease 得到一行。然后我在 Tableau 中隐藏了 id 字段并重命名了名称字段以描述它们来自哪些表。
然后我定义了一组由条件定义的患者——在这种情况下,条件是患者不得患有某种特定疾病。所讨论的疾病由参数提供。集合对于这种特殊情况非常有用,但您可以使用 LOD 计算代替,或者使用具有动作过滤器或其他方法的一对数据源。
条件需要一点点理解才能理解,但它只是一个布尔表达式,它采用一组记录(具有相同的患者 ID)和 returns true 或 false 来指示该患者是否应该属于集合。了解 min 和 max 函数将 True 值视为大于 false 值会有所帮助。因此,仅当所考虑的批次中的每个数据行都为真时,MIN() 才为真。
最后,这一切都在仪表板上,还有用于错误检查的数据的交叉选项卡视图。