【问题标题】:Select statement in custom SQL Tableau based on another custom SQL基于另一个自定义 SQL 的自定义 SQL Tableau 中的 Select 语句
【发布时间】:2020-09-20 04:03:49
【问题描述】:

我正在使用 Tableau 中的自定义 SQL 选项创建大量新数据源。 我想创建另一个新数据源,其中包含引用另一个自定义 SQL 的 Select 语句。示例:

数据库中提供的表格:

  1. school,字段包括:areaarea_codeschool_idschool_name
  2. student,字段包括:school_idstudent_idstudent_name
  3. mark,字段包括:school_idstudent_idmark_value

自定义 SQL #1,命名为 testresult

SELECT student.student_name, mark.mark_value,
CASE WHEN mark.mark_value > 70 THEN 'passed'
WHEN mark.mark_value BETWEEN 50 AND 60 THEN 'retake'
ELSE 'failed'
END AS student_result
FROM student
LEFT JOIN mark ON student.student_id = mark.student_id

自定义 SQL #2,命名为 arearesult

SELECT school.area, school.area_code, student.student_name, testresult.student_result
FROM school
LEFT JOIN student ON school.school_id = student.school_id
INNER JOIN testresult ON school.student_name = testresult.student_name

在我尝试创建自定义 SQL #2 arearesult 之前,一切正常。似乎 Tableau 无法将自定义 SQL 识别为表。无论如何我可以做到这一点吗?

请注意,由于我的真实数据的条件,只能通过加入我上面解释的 3 个表来完成,而不是使用 1 个 SQL 脚本。我知道根据我在示例中提供的数据,使用 1 个 SQL 脚本是可能的并且更容易。但实际上我就是做不到。

【问题讨论】:

    标签: sql sql-server tableau-api


    【解决方案1】:

    我认为您可以使用子查询而不是 CTE 来完成所有这些操作。

    SELECT school.area, 
       school.area_code, 
       student.student_name, 
       testresult.student_result
    
    FROM school
    LEFT JOIN student ON school.school_id = student.school_id 
    INNER JOIN (SELECT student.student_name, mark.mark_value,
                  CASE WHEN mark.mark_value > 70 THEN 'passed'
                       WHEN mark.mark_value BETWEEN 50 AND 60 THEN 'retake'
                       ELSE 'failed'
                       END AS student_result
                FROM student
                LEFT JOIN mark ON student.student_id = mark.student_id) testresult ON school.student_name = testresult.student_name
    

    【讨论】:

    • 感谢您的帮助。但实际上,我必须使用自定义 SQL 创建多个新字段。在我的示例中,我所说的“新领域”类似于student_result。因此,如果我要按照您的回答,我如何以及在何处将这些多个新字段放在FROM 语句中?另外,还有比这更紧凑的解决方案吗?
    • 这完全取决于 sql 的复杂程度以及您需要多少新字段。此外,它多久会更改一次,以及它是否在画面中的多个数据源中使用。如果您认为您的 sql 足够复杂并且将在 tableau 中多次使用并且您有权在 DB 中创建对象,那么您可以在数据库中创建一个视图并在 Tableau 中以“Select * from New_View”的形式访问它跨度>
    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2015-06-29
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多