跳到主要内容

On-demand 模板应用程序中的绑定表达式

模板应用程序中的数据绑定指定使用相应选择应用程序中的哪些数据来构造将数据加载到 On-Demand 应用程序中时所发出的查询。

绑定表达式的基本形式--$(odag_FIELDNAME)--并非可用于绑定表达式的唯一方法。其他前缀可用于优化选择项并确保模板应用程序正确加载数据。

警告: 应更改最初使用 On-demand App GenerationQlik Sense 扩展创建的模板应用程序,以便使用下述方式来绑定字段中的大量选择项。

可用的绑定前缀

一般的前缀形式为 odag[s|o][n][cnt],其中:

  • s - 仅包括选择的值
  • o - 仅包括可选值
  • n - 选取数字版本,默认无引号
  • cnt - 插入值的数目而非实际值

下表提供了所有可用绑定前缀版本的列表。这些示例假定一个名为 MyField 并以 1,2,3 作为选定值(绿色值)而以 4 作为可选选定值(白色值)。的字段。

绑定前缀
前缀 说明 示例 替换为
odag_ 替换为选定(绿色)和可选(白色)值。选取值的文本版本。这是字符串值的标准前缀。 $(odag_MyField) '1','2','3','4'
odagcnt_ 替换为相应 odag_ 绑定中的值数。此前缀用于优化查询。 $(odagcnt_MyField) 4
odagn_

替换为选定(绿色)和可选(白色)值。选取值的数字版本。这是数字值的标准前缀。

备注:

如果数据模型不能有字段的选定值或可选值,则必须在表达式中指定 noValue。例如,$(odagn_MyField){"noValue":"-99999"}

有关更多信息,请参阅更改值引号字符和分隔符字符

$(odagn_MyField) 1,2,3,4
odagncnt_ 替换为相应 odagn_ 绑定中的值数。这用于优化查询。 $(odagncnt_MyField) 4
odago_

替换为可选(白色)值。选取值的文本版本。这用于优化查询。

为大型数据库优化

$(odago_MyField) '4'
odagocnt_ 替换为相应 odago_ 绑定中的值数。这用于优化查询。 $(odagocnt_MyField) 1
odagon_

替换为可选(白色)值。选取值的数字版本。这用于优化查询。

为大型数据库优化

$(odagon_MyField) 4
odagoncnt_ 替换为相应 odagon_ 绑定中的值数。这用于优化查询。 $(odagoncnt_MyField) 1
odags_

替换为选定(绿色)值。选取值的文本版本。这用于优化查询。

为大型数据库优化

$(odags_MyField) '1','2','3'
odagscnt_ 替换为相应 odags_ 绑定中的值数。这用于优化查询。 $(odagscnt_MyField) 3
odagsn_

替换为选定(绿色)值。选取值的数字版本。这用于优化查询。

为大型数据库优化

$(odagsn_MyField) 1,2,3
odagsncnt_ 替换为相应 odagsn_ 绑定中的值数。这用于优化查询。 $(odagsncnt_MyField) 3
备注:

空值在文本版本中会被过滤掉。非数值和 NaN 值在数值版本中会被过滤掉。

为大型数据库优化

odags_odagsn_ 前缀用于优化查询。当绑定字段中没有选择时,odag_ 包含所有值,而 odags_ 不包含值。在某些情况下,使用 odags_odagscnt_ 前缀更有效。这使您能够测试值集是否为空。例如,在 MyField 中未进行选择时,以下操作比在 odag_MyField 中测试所有值更有效:

WHERE ($(odagscnt_MyField)=0 OR MyColumn IN ($(odags_MyField)))

当并非按需字段的选择应用程序中有一个备选字段时,不能使用 odags_。例如,如果用户在 CountryName 中进行选择,但绑定表达式在相关字段 CountryCode 上,则无法使用 odags_。在这些情况下,可改为使用 odago_。如果 odago_ 绑定中没有值,则可能意味着要么应包含所有值,要么不应包含任何值。

绑定数值

在要绑定到 On-demand 应用程序的数据由数字(而非字符串)组成时,最好针对数值字段禁用加引号行为。例如,如果销售记录包括一个数值 DAY_OF_WEEK 列,您希望选择应用程序的用户选择 DAY_OF_WEEK 的任意组合,则可以增强用于加载选择应用程序的聚合查询,以便将 DAY_OF_WEEK 既包括在 SELECT 列表中又包括在 GROUP BY 列表中。如果在选择 DAY_OF_WEEK 值时在其两侧加引号,而且数据库不支持将字符串类型自动转换为数值,则可能会生成运行时查询错误。

要处理这种情况,可以使用绑定表达式后缀的数字版本。这将强制字段绑定使用选择应用程序中的数值,而不是字符串值。有以下数字版本可用:

  • odagn_
  • odagon_
  • odagsn_

通过使用数字版本,从存储选定值的双重值中的数字部分提取值,并且默认情况下这些值没有引号。

需要一定数量的选择项

在某些情况下,对于特定字段,可能必须要求 On-demand 应用程序查询中包含特定数量或特定范围的值。例如,如果 On-demand 应用程序的查询中包含 BETWEEN 子句(用来获取开始日期和结束日期之间的所有销售额),则 YEARQUARTER 字段的绑定表达式可以有一个后缀语法 [2],该语法将要求为 YEARQUARTER 正好选择两个值,如下所示:

$(odag_YEARQUARTER)[2]

选择应用程序上的 On-Demand 应用程序导航点将保持禁用状态,但前提是为 YEARQUARTER 选择的不是两个值。将显示一则消息来指示必须为 YEARQUARTER 正好选择两个值。

选择数量约束会在选择应用程序和 On-Demand 应用程序之间创建一个先决条件链接。这不同于未使用数量约束的绑定表达式。例如,当模板应用程序的脚本中包含绑定表达式而不包含数量约束(如下所示)时:

$(odag_MYFIELD)

既不要求选择应用程序包含名为 MYFIELD 的字段,又不要求为该字段选择任何值(如果该字段存在的话)。如果选择应用程序不包含名为 MYFIELD 的字段,或者用户只是忘了从中做出任何选择,则 On-Demand 应用程序导航点仍可以在为了满足记录限制值条件而进行其他选择时变成启用状态。

另一方面,如果绑定表达式为:

$(odag_MYFIELD)[1+]

现在会针对选择应用程序施加两个要求:

  • 选择应用程序必须包含一个名为 MYFIELD 的字段。
  • 用户必须至少为 MYFIELD 选择一个值。

在使用这种类型的绑定表达式时必须格外小心,因为它会限制哪些选择应用程序可以与模板应用程序一起使用。 您不应当在模板应用程序的绑定上使用该数量限制,除非您确定自己希望将该选择数量要求应用在和该模板应用程序关联的所有选择应用程序上。

为了执行数据绑定过程,On-Demand 应用程序服务使用对脚本中的注释不敏感的字符串替代方式。这意味着您不应在注释中使用绑定表达式,除非在应用程序生成后您希望这些注释包含绑定值列表。

可能会施加其他数量约束。下表概述了选择数量约束的不同组合。

选择项数量约束的不同组合
约束模式 选择要求
$(odag_YEARQUARTER)[2] 必须正好选择 2 个 YEARQUARTER 值。
$(odag_YEARQUARTER)[2-4] 必须选择 2 到 4 个 YEARQUARTER 值。
$(odag_YEARQUARTER)[2+] 必须至少选择 2 个 YEARQUARTER值。
$(odag_YEARQUARTER)[2-] 最多只能选择 2 个 YEARQUARTER 值。
备注: 在应用程序生成过程期间执行了检查,确定是否达到模板应用程序中的所有数量限制。如果不符合数量限制,生成该应用程序的请求将被拒绝,并显示错误信息。

更改值引号字符和分隔符字符

将从选择应用程序选择的字段中的值列表插入到模板应用程序脚本中时,将使用单引号将值括起来并用逗号分隔。这些是引号和分隔符的默认字符。可在附加到每个字段的绑定语句的语法中更改这些值。例如:

$(odag_ORIGIN){"quote": "|", "delimiter": ";"}

然后,在构造来自选择应用程序的绑定值列表时,将使用这些新值。例如,如果所选值是一年的前三个月,则会将列表构造为:

|January|;|February|;|March|

引号字符和分隔符字符的默认值适用于大多数标准 SQL 数据库。但这些值可能不适用于某些 SQL 数据库,也不适用于许多动态数据源(例如,NoSQLREST)。对于这些源,需要附加此绑定表达式以更改引号字符和分隔符字符。

下表概述了用于更改引号和分隔符字符的格式参数。

格式参数
参数 默认值 定义
引号

'(单引号)用于文本前缀

对于数字前缀为空

将添加在每个值之前和之后
分隔符 ,(逗号) 将添加在所有值之间
quoteReplace ''(双单引号)

当值不为空且引号不为空时,值中出现的所有引号都将替换为指定的字符串。

备注: quoteReplace 不支持用作数字前缀(诸如 odagn_.)的参数。quoteReplace 按数字前缀被忽略。
noValue 留空

如果没有为字段选择值,则将使用此值。当选择中没有特定字段的值时,此参数非常有用。

该值应设置为源数据中不存在的值。例如,对于数值,如果数据库中的所有值都为正值,则使用负值。

备注: 对于没有引号的值,如果字段的选定值可以是空集,则必须指定 noValue

下表概述了 odag_odagn_ 的格式规范和生成的值。生成的插入值基于 VAL1、VAL2 的默认数据值。

odag_ 示例格式规格以及生成的值
格式规格 说明 生成的插入的值
未指定

逗号分隔的值列表,带有引号 '。

'VAL1','VAL2'
{"quote": "", "delimiter": ""} 串联值 VAL1VAL2

{"quote": "X", "delimiter": "Y"}

由 X 引用并由 Y 限定的值。 XVAL1XYXVAL2X
{"quote": "XX", "delimiter": "YY"} 由 XX 引用并由 YY 限定的值。  XXVAL1XXYYXXVAL2XX
{"quote": "X"} 由 X 引用并由 ,(默认)限定的值。  XVAL1X,XVAL2X
{"delimiter": "YY"} 由 ' (默认)引用并由 YY 限定的值 'VAL1'YY'VAL2'
{"quote": ""} 由 , 限定的不带引号的值。 VAL1,VAL2
{"quote": "A", "quoteReplace": "\\A"}

由 A 引用并由逗号(默认)限定的值。字段内的值将由 \A 替代。

备注:

在本例中,需要有双重 \ 因为 \ 是 json 格式的转义字符。

AV\AL1A,AV\AL2A
odagn_ 示例格式规格以及生成的值
格式规格 说明 生成的插入的值
未指定

逗号分隔的没有引号的值列表。注意将使用数值。

VAL1,VAL2
{"delimiter": "YY"} 由 YY 限定的不带引号的值 VAL1YYVAL2
{"quote": "A", "quoteReplace": "\\A"} odag_ 前缀相比,将忽略 quoteReplace 参数。 AVAL1A,AVAL2A

处理单独值

当需要单独处理字段值时,可以使用内联方法在变量 Values 中生成值,并使用 Replace 或其他函数执行任意处理。在下面的示例中,Replace 结合占位符值使用。

MyTempBindingData: LOAD * INLINE [VAL $(odag_MyField){"quote": "", "delimiter": "\n"} ]; _TempTable: LOAD Concat(chr(39) & Replace(text, from_str, to_str) & chr(39), ',') as CombinedData Resident MyTempBindingData; LET Values = Peek('CombinedData',0,'_TempTable'); drop table _TempTable; drop table MyTempBindingData;