创建 On-demand 模板应用程序

On-demand 模板应用程序和常规的 Qlik Sense 应用程序有一个重要的差别:其加载脚本包含数据绑定表达式,用于构造在数据源上进行的查询。在生成 On-demand 应用程序时,会使用这些数据绑定表达式,从选择应用程序的选择状态读取值,并将这些值绑定到模板应用程序脚本,以便所生成的应用程序将使用一个数据子集来加载,该子集可以由用户进行控制。

模板应用程序通常作为选择应用程序连接到同一个数据源。选择应用程序的加载脚本通常会加载聚合数据以减少数据量,同时仍提供重要维度和度量的交互式可视化。模板应用程序的加载脚本使用查询来加载更精细的受控制数据子集。

备注: On-Demand 模板应用程序不直接加载数据。尝试从模板应用程序加载数据将导致错误。模板应用程序连接必须有效,但是要测试连接是否正常作用,您必须生成 On-demand 应用程序。在生成 On-demand 应用程序之后,将通过 On-Demand 应用程序服务修改加载脚本,以加载 On-demand 选择应用程序的选择状态。如果 On-Demand 应用程序没有错误地生成,则可以确定模板应用程序中的连接可正常作用。

模板应用程序的结构

模板应用程序使用 On-Demand 应用程序导航链接来链接到选择应用程序。应用程序导航链接包括用来控制在使用数据加载 On-demand 应用程序时所查询的记录数的属性。模板应用程序的加载脚本包含数据绑定表达式,这些表达式指定使用选择应用程序中的哪些字段数据来构造将数据加载到 On-demand 应用程序中时所发出的查询。

备注: Qlik Sense Enterprise on Windows 安装中包括有示例的 On-Demand 模板应用程序,位置为 ProgramData\Qlik\Examples\OnDemandApp\sample

数据绑定表达式的形式如下:

$(od_FIELDNAME)

od_ 前缀用于将选择应用程序的选择状态绑定到 On-demand 应用程序的加载脚本(通过复制模板应用程序创建)。数据绑定表达式中位于 od_ 前缀后面的部分必须是与选择应用程序中的字段相匹配的名称。生成 On-demand 应用程序时,选择应用程序的当前选择状态用于获取要针对每个字段绑定的所需值。生成 On-demand 应用程序时,选择应用程序的当前选择项状态用于获取要针对每个字段绑定的所需值。 在新创建的 On-demand 应用程序的加载脚本中,$(od_FIELDNAME) 表达式的每个实例都替换为针对选择应用程序的选择状态中的相应字段选择的值列表。

要了解有关如何使用 INLINE 加载语句绑定值的信息,请参阅On-demand 模板应用程序中的绑定表达式

为了使 SQL 语法有效,模板应用程序的 SELECT 语句(用于筛选多个值)必须使用 IN 子句。建议的做法是写入一个用来创建正确 WHERE 子句的子例程:

SUB ExtendWhere(Name, ValVarName) LET T = Name & '_COLNAME'; LET ColName = $(T); LET Values = $(ValVarName); IF len(Values) > 0 THEN IF len(WHERE_PART) > 0 THEN LET WHERE_PART = '$(WHERE_PART) AND $(ColName) IN ( $(Values) )'; ELSE LET WHERE_PART = ' WHERE $(ColName) IN ( $(Values) )'; ENDIF ENDIF END SUB;

在调用 ExtendWhere 子例程之前,您必须设置 WHERE_PART 变量。

SET WHERE_PART = '';

如果希望 SQL 语句在选择应用程序将插入的子句以外还有一个不变化的 WHERE 子句,请在 SET 语句中插入 'WHERE <condition>'。否则,将使用简单的 SET 语句。

下面是如何使用 ExtendedWhere 子例程的示例:

FOR EACH fldname IN 'ORIGIN', 'DEST', 'YEAR', 'QUARTER', 'ORIGIN_STATE_ABR', 'DEST_STATE_ABR' LET vallist = $(fldname); WHEN (IsNull(vallist)) LET vallist = ''; IF len(vallist) > 0 THEN CALL ExtendWhere('$(fldname)','vallist'); ENDIF NEXT fldname

字段名称列表应与所创建的每个字段绑定中使用的字段名称相匹配。

构建每个字段的值列表后,可以编写 SELECT 语句。例如:

SQL SELECT "MKT_ID", "YEAR", "QUARTER", "ORIGIN", "ORIGIN_STATE_ABR", "DEST", "DEST_STATE_ABR", "TICKET_CARRIER", "FARE_CLASS", "PASSENGERS", "DISTANCE", 1 AS "FLIGHT_COUNT" FROM "SAPH7T"."/QT/AIRPORT_FACT" $(WHERE_PART);

将扩展 SELECT 语句的 $(WHERE_PART) 部分以包含通过执行上述 FOR-NEXT 循环生成的 WHERE 子句。应修改遵循 SELECT 关键字的列表达式列表,以便与特定数据库表格的列相匹配。

警告: 在创建 On-Demand 应用程序绑定变量时,避免使用模板应用程序模型的字段名称。在脚本中定义的变量将在创建数据可视化时参考的模板应用程序模型中可用。选择不会与模型中的字段重叠的 On-Demand 应用程序绑定变量将避免模板应用程序模型中的字段和数据加载脚本中 On-Demand 应用程序绑定变量之间产生意外混淆。一种不错的做法是为 On-Demand 应用程序绑定变量创建前缀。例如使用 X_ORIGIN 而非 ORIGIN

单点登录 (SSO)

On-Demand 应用程序可将 single sign-on (SSO) 用于支持 SSO 的数据源。必须配置引擎和数据源以允许 SSO

有关更多信息,请参阅使用 Qlik Sense 配置 SAP HANA for SAML 单点登录 (仅提供英文版本)以及为单点登录配置 Cloudera Impala (仅提供英文版本)

一旦为 SSO 配置了引擎和数据源,则必须通过将以下语法添加至模板应用程序脚本来启用 SSO

///!ODAG_SSO

在生成了 On-Demand 应用程序并每次重新载入该程序时,On-Demand App Service 解析脚本。

当通过 SSO 加载 On-Demand 应用程序时,会将最终用户的身份发送至数据源。最终用户必须具有在模板应用程序的数据连接中使用的源的访问权限。仅会载入这些源中用户有访问权限的数据,即使选择了更大的数据集。

警告: 无法发布使用 single sign-on (SSO) 的通过模板应用程序生成的 On-Demand 应用程序。

加载模板应用程序的节点

管理员可控制多节点环境中在何处通过在模板应用程序上设置加载平衡规则加载 On-demand 应用程序。在设置了负载均衡规则之后,通过指向模板应用程序的链接生成的所有应用程序将根据适用于模板应用程序的规则加载。有关更多信息,请参阅管理 On-Demand 应用程序 (仅提供英文版本)