Constrain | Windows 版 Qlik Sense帮助
跳到主要内容 跳到补充内容

Constrain

Constrain 语句可与 LetSet 语句结合使用,用于定义脚本变量。通过 Constrain 语句,可以为这些变量的可能值定义约束条件。如果变量定义违反了限制条件,重载就会失败。通过约束,可以要求变量值与特定类型相匹配,在特定数值范围内,并与自己定义的可接受值相匹配。

Constrain variablename = json

其中:

  • variablename 是一个脚本变量。

  • json 是一个有效的 JSON 对象,指定约束条件。单个约束条件以键值对形式添加到该对象中。

约束类型
约束类型(键) 含义 约束要求(值) 实例
"type" 将变量值限制为特定数据类型。

"text" 指定文本类型。

"number" 指定数字类型。

CONSTRAIN vExampleText = {"type": "text"}
CONSTRAIN vExampleNumeric = {"type": "number"}
"maxnum" 为变量设置最大值。 仅限数字(整数或浮点数)。允许使用科学符号。
CONSTRAIN vExample = {"maxnum": 5000}
"minnum" 为变量设置最小值。 仅限数字(整数或浮点数)。允许使用科学符号。
CONSTRAIN vExample = {"minnum": 250}
"valuesnum" 定义变量的可接受数值的列表。 以逗号分隔的方括号内数字的列表。例如:[1,2,3]
CONSTRAIN vExample = {"valuesnum": [1,2,3]}
"valuestext" 定义变量的可接受文本值的列表。 以逗号分隔的方括号内字符串的列表。例如:["a","b","c"]
CONSTRAIN vExample = {"valuestext": ["Department A", "Department B", "Department C"]}

何时使用 Constrain 语句

使用 Constrain 语句可防止不需要的变量值加载到分析应用程序中。

注意事项

  • Constrain 变量的定义必须为有效的 JSON 对象。

  • 您可以为一个变量指定多个约束条件。变量的所有约束条件都必须包含在单个约束对象内。有关示例,请参阅示例 - 多重约束

  • 如果您已将某个名称的脚本变量加载到应用程序中,那么今后为该变量定义约束条件和值的尝试可能会因原始变量和重新定义的变量之间的冲突而失败。

    要解决这些冲突,可通过插入空白定义来重置变量约束和值。示例:

    CONSTRAIN x;
    LET x;
    
    CONSTRAIN x;
    SET x;

    然后,您可以在加载脚本的后续部分里重新定义变量及其约束条件。有关长篇范例,请参阅示例 - 解决变量定义冲突

  • 变量定义和约束定义的顺序并不重要。但是,如果发生与变量相关的重载失败事件,发生断点的行将有所不同。

  • Constrain 脚本语句只限制脚本变量的变量定义。您还可以通过使用公共 API 对脚本和最终用户变量(在工作表视图中创建或更新的变量,或使用 API 作为会话变量而创建或更新的变量)应用约束。有关更多信息,请参阅开发人员用于定义变量约束的替代方案

  • 对约束进行验证,以避免出现无法匹配变量任何值的场景。无效约束的示例:

    • {"minnum": 5000, "maxnum": 4}
    • {"type": "text", "maxnum": 4}

开发人员用于定义变量约束的替代方案

您还可以使用公共 API 来定义变量约束,而不是在加载脚本中使用 Constrain 语句。通过 API 定义约束时,所有更新变量值的尝试—无论是直接在加载脚本中还是在工作表视图中—都将受到约束。

要通过公共 API 定义变量约束,请使用 QlikEngine JSON API 中的 GenericVariableConstraints 属性:GenericVariableProperties (仅提供英文版本)

示例 - type

示例 - maxnum

示例 - minnum

示例 - valuesnum

示例 - valuestext

示例 - SETLET

这些示例显示了在变量定义过程中使用 SETLET 时应用约束条件的不同之处。所有示例都使用了应用 type 要求的约束,但这些原则一般适用于所有约束类型。

示例 - 多重约束

示例 - 解决变量定义冲突

本页面有帮助吗?

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