跳到主要内容 跳到补充内容

使用自定义 SQL 创建 Direct Query 应用程序

使用 Direct Query 应用程序中的自定义 SQL 查询在加载脚本中创建数据模型。自定义 SQL 提供了一种替代方法,可以用 数据模型管理器 来定义 Direct Query 的数据模型。

使用自定义 SQL 创建 Direct Query 数据模型,这可让您使用 SQL 语句定义 SQL 查询本身生成的表和字段。此外,Qlik 应用程序中的自定义 SQL 语句可以在自定义 SQL 语句中使用加载脚本变量和 Qlik 表达式宏。这允许建立更动态的数据模型,并使自定义 SQL 定义的表和列能够根据变量或表达式计算结果进行调整。

自定义 SQL 可以在加载脚本中单独使用。还可以在 数据加载编辑器 中使用 数据模型管理器 和自定义 SQL 的组合来定义数据模型。

提示注释

如果可以使用 数据模型管理器 指定数据模型的某些部分,可使用 数据模型管理器 指定这些部分以获得最佳 SQL 性能。数据模型管理器 在表定义方面更有效,以便在已定义的数据模型中执行 Direct Query 查询时使用。

要使用自定义 SQL 创建数据模型,请执行以下操作:

  1. section directquery 添加到您的加载脚本中。

    加载脚本中只能存在一个 SECTION DIRECTQUERY 部分。该部分必须是加载脚本中的最后一个部分。

    即使您还没有用 数据模型管理器 定义数据模型,如果在加载脚本中添加一个 LIB CONNECT 语句,然后再添加一个 section directquery 声明,并加载脚本,也会将你的应用程序变成一个 Direct Query 应用程序。

  2. 使用以下语句构建数据模型:

    • SELECT

      使用 SELECT 语句选择要加载的表和列。例如:<TableName> SELECT <custom SQL>

      如果您没有在加载脚本中定义自己的表名,则表将被命名为Table<脚本行号>

      Select

    • CREATE RELATIONSHIP

      使用 CREATE RELATIONSHIP 定义数据模型中字段和表之间的关系。

      Create relationship

    • DROP RELATIONSHIP

      DROP RELATIONSHIP 从数据模型中删除以前定义的关系。

      删除关系

    • DROP TABLE

      DROP TABLE 从数据模型中删除以前定义的表,以避免表之间可能发生冲突。

    • LETSET

      使用 LETSET 语句来定义变量或 Qlik 表达式。

      Let

      Set

    在整个数据模型中,表和字段的名称必须唯一。如果在 数据模型管理器 中定义表,然后尝试在自定义 SQL 中重新定义该表,则除非删除在 数据模型管理器 中创建的表或重命名自定义 SQL 中的表和字段,否则该操作将失败。

section directquery 部分中不支持的任何脚本语句在加载数据时都会生成错误。脚本调试或强制继续的任何设置都将被忽略。

有关自定义 SQL 加载脚本的示例,请参阅Direct Query 的自定义 SQL 示例

自定义 SQL、变量和表达式

Direct Query 中的自定义 SQL 定义允许您在自定义 SQL 语句中同时使用脚本变量和 Qlik 表达式宏。

这一特性为应用程序的数据模型带来了动态变量和表达式的影响和灵活性,其中自定义 SQL 定义的表和列可根据变量或 Qlik 表达式的评估结果进行调整。

自定义 SQL 中的变量

使用 SETLET 语句定义变量。使用格式 $(<variable name>) 在加载脚本中添加变量。

:构建包含变量的数据模型

自定义 SQL 中的变量引用在重新加载时进行评估。如果变量值在应用程序的使用过程中发生更改,则除非执行脚本重新加载,否则更改将不会反映在使用该变量的自定义 SQL 中。

如果希望在自定义SQL定义中使用动态变量,请将变量作为 Qlik 表达式的一部分进行引用,以强制在每次执行使用这些自定义 SQL 定义的查询时计算这些变量。

有关变量的详细信息,请参阅在数据加载编辑器中使用变量

自定义 SQL 中的表达式

您可以使用表达式修改发送到远程数据库的自定义 SQL 的内容,以表示应用程序数据模型中的表和列。数据模型中使用的表达式必须解析为单个值。

提示注释

若要测试表达式的计算结果是否为单个值,请将其作为表达式添加到 KPI 中。如果它有效,那么您的表达式可以在自定义 SQL 中使用。

在每次执行使用这些 SQL 定义的查询时,都会动态计算表达式。任何时候,表或字段的自定义 SQL 语句在执行查询期间使用 Qlik 表达式时,都会首先计算这些 Qlik 表达式,以检索表达式的当前结果。这些结果插入到要代表原始查询执行的自定义 SQL 语句中。Qlik 表达式的这些计算可能反过来生成到远程数据库的 SQL 查询。Qlik 表达式的这些计算可能反过来生成到远程数据库的 SQL 查询。

如果表达式在加载过程中无法展开,它将返回一个 null 值。这并不意味着您的表达式无效。您的表达式可能需要用户在应用程序中进行选择以进行计算。

:用 Qlik 表达式构造数据模型

使用自定义 SQL 和 数据模型管理器 创建数据模型

您可以使用自定义 SQL 和 数据模型管理器 的组合为 Direct Query 创建数据模型。有一些实用的考虑事项,但是:

  • 作为最佳实践,在将自定义 SQL 添加到加载脚本之前,请先完成要在 数据模型管理器 中进行的任何建模。自定义 SQL 和 数据模型管理器数据模型管理器 用于定义加载的表和字段之间的关系时最好一起使用,而自定义 SQL 用于其他自定义。

  • 数据模型管理器 创建的数据模型部分和由自定义 SQL 创建的部分分别进行管理,然后在脚本重新加载期间组合在一起。数据模型管理器 不显示任何由自定义 SQL 定义的数据模型。要查看完整的数据模型,请使用 数据模型查看器

  • 数据模型管理器 创建的数据模型和自定义 SQL 定义的数据模型必须使用相同的数据库连接。

  • 您可以通过 数据模型管理器 移动添加到加载脚本中的 IMPORT LIVE 语句。加载脚本是按顺序评估的,因此它的新位置可能会影响您的自定义 SQL 需求。例如,它可能会在最终数据模型中创建不需要的关系或重复的表名。

  • 在整个数据模型中,表和字段的名称必须唯一。如果在 数据模型管理器 中定义表,然后尝试在自定义 SQL 中重新定义该表,则除非删除在 数据模型管理器 中创建的表或重命名自定义 SQL 中的表和字段,否则该操作将失败。

限制

Direct Query 的自定义 SQL有以下限制:

  • 自定义 SQL 只能使用单个数据库。

  • 使用一个或多个带有嵌入式 Qlik 表达式宏的自定义 SQL 语句的 Direct Query 应用程序不能用作 On-Demand 应用程序的选择应用程序。这是因为任何生成的模板应用程序,作为内存应用程序,都无法在其加载脚本中支持 Qlik 表达式宏。

  • 应用中添加的脚本不支持 Direct Query 自定义 SQL。有关脚本的更多信息,请参阅使用 脚本编辑器

本页面有帮助吗?

如果您发现此页面或其内容有任何问题 – 打字错误、遗漏步骤或技术错误 – 请告诉我们如何改进!