すべて展開 / 折りたたむ Constrain このページ上 表示するリンクを増やす
Constrain ステートメントは、スクリプト変数を定義するために Let または Set ステートメントと組み合わせて使用できます。Constrain ステートメントを使用すると、これらの変数の取り得る値に制約を定義できます。変数定義が制約に違反すると、リロードは失敗します。制約を使用すると、変数の値が特定の型に一致し、特定の数値範囲内にあり、定義した許容値と一致することを要求できます。
構文:
Constrain variablename = 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 オブジェクトである必要があります。
1 つの変数に対して複数の制約を指定できます。変数のすべての制約は、単一の制約オブジェクト内に含める必要があります。例については、「例 - 複数の制約 」を参照してください。
特定の名前のスクリプト変数をすでにアプリケーションにロードしている場合、その変数の制約と値を定義しようとすると、元の変数と再定義された変数の競合により失敗する可能性があります。
これらの競合を解決するには、空の定義を挿入して変数の制約と値をリセットします。例:
その後、ロード スクリプトの後続のセクションで変数とその制約を再定義できます。長い形式の例については、 「例 - 変数定義の競合の解決 」を参照してください。
変数定義と制約定義の順序は重要ではありません。ただし、変数関連のリロードに失敗した場合、ブレークポイントが発生する行は異なります。
Constrain スクリプト ステートメントは、スクリプト変数の変数定義のみを制限します。パブリック API を使用して、スクリプト変数およびエンド ユーザー変数 (シート ビューで作成または更新される変数、または API を使用してセッション変数として作成または更新される変数) に制約を適用することもできます。詳細については、「変数制約を定義するための開発者の代替方法 」を参照してください。
変数のどの値とも一致しないシナリオを回避するために、制約が検証されます。無効な制約の例:
{"minnum": 5000, "maxnum": 4}
{"type": "text", "maxnum": 4}
変数制約を定義するための開発者の代替方法 ロード スクリプト内の Constrain ステートメントを使用する代わりに、パブリック API を使用して変数制約を定義することもできます。API を通じて制約を定義した場合、ロード スクリプトでの直接更新やシート表示での更新など、変数の値を更新するすべての操作が制約の対象となります。
パブリック API 経由で変数制約を定義するには、Qlik Engine JSON API: GenericVariableProperties (英語のみ) の GenericVariableConstraints プロパティを使用します。
例 - type "type" によるリロードの失敗 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。
ロード スクリプトには次が含まれています:
ロード スクリプト
CONSTRAIN a = {"type": "text"};
LET a = 1000;結果
データをロードします。
制約により変数 a にテキスト タイプが必要なため、リロードは失敗します。変数定義は数値です。
対照的に、制約で number の type を指定すると、リロードは成功します。
例 - maxnum "maxnum" によるリロードの失敗 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。
ロード スクリプトには次が含まれています:
CONSTRAIN b = {"maxnum": "3000"};
LET b = 3001;結果
データをロードします。
制約により変数 b の最大値が 3000 である必要があるため、リロードは失敗します。変数定義は 3001 として評価されます。
対照的に、b を 2999 に指定すると、リロードは成功します。
例 - minnum "minnum" によるリロードの失敗 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。
ロード スクリプトには次が含まれています:
CONSTRAIN c = {"minnum": "3000"};
LET c = 2999;結果
データをロードします。
制約により変数 c の最小値が 3000 である必要があるため、リロードは失敗します。変数定義は 2999 として評価されます。
対照的に、c を 3000 に指定すると、リロードは成功します。
例 - valuesnum "valuesnum" によるリロードの失敗 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。
ロード スクリプトには次が含まれています:
CONSTRAIN d = {"valuesnum": [2,3,4]};
LET d = 1;結果
データをロードします。
変数 d が 1 と評価されますが、これは 3 つの可能な値のリストに含まれていないため、リロードは失敗します。
対照的に、d を 2 に指定すると、リロードは成功します。
例 - valuestext "valuestext" によるリロードの失敗 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。
ロード スクリプトには次が含まれています:
CONSTRAIN e = {"valuestext": ["Department A", "Department B", "Department C"]};
SET e = Department D;結果
データをロードします。
変数 e が Department D であり、制約によって定義された許可された値のリストに含まれていないため、リロードは失敗します。
対照的に、e を Department C として指定すると、リロードは成功します。
例 - SET 対 LET これらの例は、変数定義中に SET または LET を使用する場合に制約が適用される方法の違いを示しています。すべての例では type 要件を適用する制約を使用していますが、これらの原則は一般にすべての制約タイプに適用されます。
SET によるリロードの失敗 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。
ロード スクリプトには次が含まれています:
ロード スクリプト
CONSTRAIN f = {"type": "number"};
SET f = 500*2;結果
データをロードします。
制約により変数 f に数値タイプが必要なため、リロードは失敗します。変数定義には数値式が含まれていますが、SET ステートメントが使用されているため、定義はテキストとして評価されます。
LET によるリロードの失敗 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。
ロード スクリプトには次が含まれています:
ロード スクリプト
CONSTRAIN g = {"type": "text"};
LET g = 500*2;データをロードします。
制約により変数 g にテキスト タイプが必要なため、リロードは失敗します。変数定義に数値式が含まれており、LET ステートメントが使用されているため、定義は数値として評価されます。
SET によるリロードの成功 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。
ロード スクリプトには次が含まれています:
ロード スクリプト
CONSTRAIN h = {"type": "text"};
SET h = 500*2;データをロードします。
リロードは成功しました。制約では、変数 h にテキスト タイプが必要です。変数定義には数値式が含まれていますが、SET ステートメントが使用されているため、定義はテキストとして評価されます。
LET によるリロードの成功 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。
ロード スクリプトには次が含まれています:
ロード スクリプト
CONSTRAIN i = {"type": "number"};
LET i = 500*2;データをロードします。
リロードは成功しました。制約では、変数 i に数値タイプが必要です。変数定義に数値式が含まれており、LET ステートメントが使用されているため、定義は数値として評価されます。
例 - 複数の制約最小値と最大値の設定 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。
ロード スクリプトには次が含まれています:
ロード スクリプト
CONSTRAIN j = {"minnum": 1, "maxnum": 5};
LET j = 2;データをロードします。
リロードは成功しました。変数 f は 2 と評価され、これは許容範囲内です。
リストからテキストと数字の両方を受け入れる 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。
ロード スクリプトには次が含まれています:
ロード スクリプト
CONSTRAIN k = {"valuestext": ["abc","def","ghi"], "valuesnum": [0,1,3,5]};
LET k = 'def';データをロードします。
リロードは成功しました。変数 k の値は、許容値のリストにあります。同様に、k を 3 に指定すると、リロードは成功します。
例 - 変数定義の競合の解決ロード スクリプトと結果 概要
この例では、以前のロードからアプリケーションですでに定義されている変数に制約を追加するときに、変数定義の競合が発生する可能性がある方法を示します。
ロード スクリプト 1: スクリプト変数の設定
データ ロード エディター を開きます。次のスクリプトを追加します。
LET vConflictExample = 'Department C';データをロードします。リロードは成功しました。変数 vConflictExample は、スクリプト変数としてアプリケーション内に作成されました。
ロードスクリプト 2: 以前にロードされたスクリプト変数に対する制約定義の試行
ロード スクリプト 1 を削除します。次のスクリプトを追加します。
CONSTRAIN vConflictExample = {"type": "number"};
LET vConflictExample = 123;データをロードします。
新しい制約と値の定義に互換性がある場合でも、制約エラーによりリロードは失敗します。これは、ロード スクリプト 1 ですでに変数がテキスト値でアプリケーションにロードされており、その値がアプリケーション内に保持されているためです。この問題を解決するには、変数の制約と定義をリセットする必要があります。ロード スクリプト 3 を参照してください。
ロード スクリプト 3: 制約と値の定義のリセット
ロード スクリプト 2 を削除します。次のスクリプトを追加します。
CONSTRAIN vConflictExample;
LET vConflictExample;
CONSTRAIN vConflictExample = {"type": "number"};
LET vConflictExample = 123;
MockData:
LOAD
*
Inline [
id, date, amount
1, 05/30/2025, 23.56
];データをロードします。
リロードは成功しました。上記のスクリプトは、それぞれが空白行で区切られた 3 つの部分に分けられます。
最初の部分では、vConflictExample の制約と値の定義をリセットします。これにより、ロード スクリプト 1 でアプリケーションにロードされた定義が削除されます。
2 番目の部分では、ロード スクリプト 2 で失敗した新しい制約と値の定義を再適用します。
3 番目の部分では、シート ビューを開いて変数の値を検査できるように、モック データを追加します (以下を参照)。
編集モードでシート ビューを開き、 [変数 ] ダイアログを開きます。変数 vConflictExample が正常に作成されたことがわかります。
シート表示の変数ダイアログには、vConflictExample の変数定義の競合が解決されたことが示されています。