ACLScript での変数の操作
Analytics でスクリプトを作成するときには、通常、変化する値を構成する必要があります。例:
-
スクリプト構成 すべての値の出現を更新せずにテーブルやフィールド名などのスクリプト ロジックの値をカスタマイズする簡単な方法が必要です。
-
ユーザー入力 ユーザーがスクリプトを実行するときに、日付範囲やしきい値金額などの入力値をカスタマイズする必要があります。
-
一時保存 スクリプトのロジックは、カウンターや合計などのスクリプトが進むに従って継続的に更新される値を一時的に保存する必要があります。
このような目的では、変数を使用します。
変数について
変数は、変化する値を格納または保存する名前付きコンテナーであると考えることができます。値は変化しますが、変数の名前は変わりません。スクリプト作成者は、スクリプト ロジック全体で固定の変数名を使用します。スクリプトが実行されるときには、変数名は処理されません。スクリプトは、現在変数に格納されている値にアクセスし、その値を処理します。
以下の例では、v_start_date および v_end_date は変数名で、日付は変数に格納されている値です。
変数の利点
スクリプト全体で、リテラル値ではなく、変数を使用できます。実際のテーブル名、フィールド名、数値、日付をそれらの項目を参照する変数で置換することで、スクリプトの柔軟性が大幅に向上します。1 つの特定な状況でのみ動作するスクリプトを作成するのではなく、あらゆる状況で使用できるスクリプトを作成できます。
変数を使用する方法と変数を使用できる場所
変数が参照するリテラル項目のように、変数の作成、名前変更、削除、演算やさまざまな式での使用、エクスポート、抽出ができます。つまり、リテラル項目が有効であるすべての場所で、変数を使用できます。
変数を作成する方法
変数を作成するには、Analytics コマンドの ASSIGN コマンドまたは他のコマンドのいずれかを使用します。一般的には、コマンドはスクリプトに含めますが、Analytics コマンドラインで ASSIGN コマンドを入力すると、手動で変数を作成することもできます。
例
スクリプトにカスタマイズ可能な日付範囲を設定し、開始日と終了日の変数を作成する必要があります。
次の例では、現在、変数 v_start_date には日付値 `20210101`、変数 v_end_date には日付値 `20210331` が格納されています。
これらの 2 つの変数を使用して、ユーザーが指定するすべての開始日と終了日を格納できます。日付が必要になる場合には、スクリプト ロジックで v_start_date および v_end_date を指定します。ただし、スクリプトが実行されるときには、ユーザーが指定した実際の日付が使用されます。
ASSIGN v_start_date = `20210101`
ASSIGN v_end_date = `20210331`
ヒント
これらの変数のいずれかを作成するには、ASSIGN コマンドとパラメーターを Analytics コマンドラインにコピーし、Enter を押します。ナビゲーターで[変数]タブを開き、結果を表示します。
[コマンド ライン]テキスト ボックスが表示されていない場合は、[ウィンドウ > コマンド ライン]の順にクリックします。
Analytics プロジェクトでの変数の表示
変数を操作するときには、Analytics プロジェクトに存在する変数と現在の値を確認できると、非常に便利です。次の 2 つの方法を使用すると、変数と値を表示できます。
-
[変数]タブ
-
DISPLAY VARIABLES コマンド
[変数]タブ
ナビゲーターの[変数]タブでは、変数の作成や、変数への値の割り当てをリアルタイムで追跡します。読み取り専用タブには、Analytics プロジェクトのすべての変数の名前、データ型、現在の値が表示されます。名前はアルファベット順に表示されます。
スクリプトを 1 行ずつ進むと、スクリプトで定義された変数またはシステムで生成された変数が作成時に[変数]タブに表示されます。変数がすでに存在する場合は、スクリプト ロジックに基づいて値が動的に更新されます。(スクリプト エディターで、[ステップ
]オプションを使用してスクリプトを進めます。)
スクリプト変数で発生している正確な変更を発生時に監視できるのは、重要な診断ツールです。この機能では、スクリプト構文の調査だけでは検出が難しいスクリプト エラーをピンポイントで特定できます。
スクリプトを実行する場合、変数に関連するすべての変更は、ブレーク ポイントに達したとき、またはスクリプトが完了したときに[変数]タブに表示されます。
DISPLAY VARIABLES コマンド
DISPLAY VARIABLES コマンドには、Analytics プロジェクトのすべての変数の名前、データ型、現在の値が表示されます。名前は、変数の作成日時または更新日時に基づいて、日時の新しい順に表示されます。
DISPLAY 変数名 は、単一の変数に関連付けられた情報を返します。
DISPLAY VARIABLES コマンドは次の 2 つの方法で使用できます。
-
プロジェクト変数の現在の状態 コマンド ラインで DISPLAY VARIABLES と入力し、Enter キーを押します。
プロジェクト内のすべての変数とその現在値が、時系列を遡って画面に表示されます。
-
スクリプトの別の点にあるプロジェクト変数の状態 プロジェクト変数の状態を取り込むスクリプトの時点で、DISPLAY VARIABLES をスクリプトに追加します。この目的でもブレーク ポイントを使用できます。ブレーク ポイントはスクリプトの実行を一時停止しますが、DISPLAY VARIABLES コマンドはスクリプトの実行を一時停止しないという点が違いです。
スクリプトが完了した後、コマンド ログで対応する DISPLAY VARIABLES エントリをダブルクリックします。指定したスクリプトの時点でのプロジェクト変数の状態が、日時の新しい順に画面に表示されます。
メモ
GROUP コマンド内では DISPLAY VARIABLES コマンド コマンドを使用できません。
ACLScript 変数に関して理解しておくべき 8 つの事項
他のプログラミング言語やスクリプト言語に詳しい場合は、すでに変数や変数のさまざまな使用法についても熟知しています。ACLScript 変数の主な特長は次のとおりです。
スクリプトと変数を初めて使う場合は、変数の操作を始めると、次の情報を理解できるようになります。
6. 変数は Analytics プロジェクトが終了するまで永続します
8. システム変数は一部の Analytics コマンドによって自動的に作成されます
1. 変数は、値を割り当てるときに自動的に作成される
変数は、初期値を名前付き変数に割り当てるときに自動的に作成(宣言)されます。変数への初期値の割り当ては、変数の初期化とも呼ばれます。
次の例では、ASSIGN コマンドを使用して、値 "Ap_Trans" を変数に割り当てるときに、v_input_table 変数が自動的に作成されます。つまり、変数の作成と、変数への値の割り当て(宣言、初期化)は 1 つのステップで実行されます。
ASSIGN v_input_table = "Ap_Trans"
変数を作成するタイミングと場所
変数を最初に使用する前に変数が作成されるかぎり、変数はスクリプトのどの部分でも作成できます。
ベストプラクティスとして、すべてのユーザー入力変数とスクリプト構成変数をスクリプトの先頭で作成することをお勧めします。このアプローチに従うと、ユーザーはスクリプトの開始時点ですべての必須入力値を入力し、スクリプトを実行させることができます。また、すべての必須のスクリプト構成変数がスクリプトの先頭の単一の整理された場所に配置されていることを保証できます。
ユーザー入力や詳細構成が必要ない変数は、スクリプトの変数が必要になる部分で作成できます。
必要に応じて、文字または日付時刻変数に空白の値を割り当て、変数だけ存在し、初期値が空になるようにできます。
ASSIGN v_input_table = ""
ASSIGN v_all_field_list = BLANKS(20000)
ASSIGN v_start_date = `19000101`
2. 変数を作成する別の方法が存在する
変数を作成する方法は、変数を使用する方法によって異なります。
| 使用方法 | 作成方法 |
|---|---|
|
スクリプト構成 一時ストレージ スクリプトの他の使用
|
ASSIGN コマンド スクリプトの別の行でASSIGN コマンドを使用し、変数を宣言して初期化します。割り当てられた値のデータ型は、変数のデータ型を示します。 メモ ASSIGN キーワードを明示的に指定することをお勧めします。スクリプトが読みやすくわかりやすくなります。ただし、ASSIGN キーワードを省略し、次のように指定することもできます。 変数名 = 変数値 |
|
ユーザー入力 |
ACCEPT コマンド ACCEPT コマンドを使用して、1 つ以上のスクリプト入力値をインタラクティブにユーザーに確認する基本のダイアログ ボックスを作成します。各入力値は、それが表す内容に関係なく、名前付き文字変数に格納されます。 インタラクティブ スクリプトの作成を参照してください。 |
|
DIALOG コマンド DIALOG コマンドと関連付けられたダイアログ ビルダーを使用して、1 つ以上のスクリプト入力値をインタラクティブにユーザーに確認する高度なダイアログ ボックスを作成します。各入力値は名前付き変数に格納されます。ほとんどの入力オプションは文字変数を使用します。 ACCEPT コマンドで提供されるオプションのほかに、DIALOG コマンドではチェックボックス、ラジオボタン、ドロップダウンリストなどのその他のオプションが提供されます。 インタラクティブ スクリプトの作成を参照してください。 |
|
|
PARAM タグ、TABLE タグ、FIELD タグ ロボットで実行されるスクリプトのユーザー入力では、アナリティクス ヘッダーPARAM タグを作成し、TABLE タグ、FIELD タグ、またはRobotsを使用します。 PARAM タグは 1 つの変数作成方法であり、関連付けられた変数のデータ型を明示的に指定する必要があります。 TABLE タグと FIELD タグには、文字変数の入力値が格納されます。 |
|
|
資格情報入力 |
PASSWORD コマンド PASSWORD コマンドを使用して、パスワード、トークン、または他の機密情報をインタラクティブにユーザーに確認するダイアログボックスを作成します。PASSWORD コマンドは、保護されたメモリの場所に資格情報値の安全なデータ入力と暗号化された保存を提供します。 資格情報の安全な処理の一部として、機密情報を含む変数は表示されず、直接管理できません。 インタラクティブ スクリプトの作成を参照してください。 SET PASSWORD コマンドを使用して、ユーザー入力せずに、直接パスワードを指定することもできます。ただし、パスワードはスクリプトにプレーン テキストとして表示されます。 |
|
PASSWORD タグ ロボットで実行されるスクリプトの資格情報入力では、アナリティクス ヘッダーを作成し、PASSWORD タグRobotsを使用します。 |
3. 変数のデータ型は自動的に指定されます。
ASSIGN コマンドを使用するときには、変数に割り当てられた値のデータ型を示します。このプロセスは暗黙の型宣言と呼ばれます。ほとんどの場合、Analytics で変数のデータ型を明示的に指定することはありません。
ヒント
作成するスクリプトの変数のデータ型には十分に注意してください。スクリプト エラーの一般的な原因は、変数のデータ型と変数を使用している方法が一致していないことです。詳細については、変数のデータ型の重要性を参照してください。
変数に割り当てられる値の種類
リテラル値を変数に割り当てたり、フィールドを変数に割り当てたりすることができます。変数は、現在選択されているレコードのフィールド値で初期化されます。1 つの変数の現在の値を別の変数に割り当てることもできます。
値のデータ型
Analytics では、すべてのデータ値が次のデータ型(またはカテゴリ)のいずれかになっています。
-
文字
-
数値
-
日付時刻
-
論理
値のデータ型は次のいずれかの方法で定義されます。
-
リテラル値 リテラル値のデータ型は、値を囲む修飾子の有無と、値を構成する英数字で定義されます。
-
フィールド フィールドの値のデータ型はフィールドのデータ型で定義されます。
-
変数 "from" 変数とそこに含まれる値はすでに設定され、"to" 変数のデータ型になります。一般的に、作成した後は、変数のデータ型は変更しません(ただし、このような操作は禁止されていません)。
ASSIGN コマンドを使用して、別のデータ型の変数を作成する例
メモ
変数を作成する ACCEPT コマンド、または DIALOG コマンドのほとんどのオプションを使用するときには、含まれる値の型に関係なく、変数は文字データ型です。
| 変数と値のデータ型 | 例 |
|---|---|
|
文字 文字値には、英数字文字と特殊文字を含めることができます。 文字リテラル値は、引用符または二重引用符で囲む必要があります。 文字値に引用符が含まれる場合は、次のアプローチを使用してください。
|
文字の例 文字値 "Vendor_number" を v_input_table 変数に割り当てます。 ASSIGN v_input_table = "Vendor_number" 現在選択されているレコードの文字 Vendor_number フィールドの値を v_identifier 変数に割り当てます。 ASSIGN v_identifier = Vendor_number メモ 修飾フィールド名を変数に割り当てることと、非修飾フィールド名を変数に割り当てることの違いを理解することが重要です。 "Vendor_number" を割り当てると、フィールド名を構成する文字の実際の文字列が割り当てられます。 Vendor_number を割り当てると、Vendor_number フィールドに含まれる値のいずれかが割り当てられます。
|
|
数値 数値には、0 ~ 9 の数値、小数点、負号を含めることができます。 リテラル数値は修飾子で囲まないでください。 |
数値の例 数値 1000 を v_min_amount 変数に割り当てます。 ASSIGN v_min_amount = 1000 現在選択されているレコードの数値 Invoice_Amount フィールドの値を v_running_total 変数に割り当てます。 ASSIGN v_running_total = Invoice_Amount |
|
日付時刻 日付時刻値は日付、時刻、または日付時刻にすることはできます。値は Analytics でサポートされている形式を使用する必要があります。 サポートされている日付時刻形式の詳細については、日付時刻リテラルの書式を参照してください。 リテラル日付時刻値はバッククオートで囲む必要があります。 メモ Analytics は文字データ型を使用する日付時刻値もサポートします。詳細については、日付時刻値についてを参照してください。 |
日付時刻の例 日付値 `20210101` を v_start_date 変数に割り当てます。 ASSIGN v_start_date = `20210101` 現在選択されているレコードの日付時刻値 Invoice_Date フィールドの値を v_date 変数に割り当てます。 ASSIGN v_date = Invoice_Date |
|
論理 論理値は T または F にすることができます。 リテラル論理値は修飾子で囲まないでください。 |
論理値の例 論理値 T を v_Q1 変数を割り当てます。 ASSIGN v_Q1 = T 現在選択されているレコードの論理値 Approved フィールドの値を v_approved 変数に割り当てます。 ASSIGN v_approved = Approved |
4. 変数名は一部の制限がありますが柔軟です
ほとんどの場合、目的に最適な方法で変数名を指定できます。
自発的な変換
これらの自発的な変換により、スクリプトが読みやすく、わかりやすくなります。
-
スクリプトで変数が実行する役割に直接関連する、理解しやすくわかりやすい名前を変数に指定します。変数の目的がわかりにくい短く不可解な名前よりも、長めのわかりやすい名前の方が良いです。
-
すべての変数名の先頭に v_ を付けるなど、一般的な命名規則を採用します。
適用される制限事項
Analytics では、変数名について次の制限事項が適用されます。
-
最大長 31 文字
-
有効な文字 英数字とアンダースコア(_)。名前に特殊文字や空白を使用したり、名前を数字で始めることはできません。
メモ
代入変数に使用される変数の名前に、é のような英語以外の文字は使用しないでください。変数名に英語以外の文字が含まれていると、変数の代入が失敗します。
このヘルプ トピックの英語版以外のバージョン(フランス語版など)には、アクセント付き文字で変数名が表記されている場合があります。実際のスクリプトでは、変数代入で使用される変数名にアクセント付き文字を絶対に使用しないでください。
-
一意性 変数名は Analytics プロジェクトで一意でなければなりません。変数はプロジェクト全体でグローバルに機能するためです。
変数名は大文字と小文字が区別されません。ACLScript では、v_start_date と v_Start_Date は同じ変数です。
5. 変数は範囲でグローバルです
Analytics スクリプトで作成された変数は、後続のすべての部分で使用できます。Analytics プロジェクトの他のスクリプトでも使用できます。親スクリプトで定義された子スクリプトで変数を使用する場合には、この動作が役立ちます。
ACLScript は変数のローカル スコーピングをサポートしません。
6. 変数は Analytics プロジェクトが終了するまで永続します
変数は、変数に含まれる Analytics プロジェクトが終了するか、変数を明示的に削除するまで、コンピューターのメモリに残ります。
プロジェクトを終了した後にも変数を永続させ、プロジェクトをもう一度開くときに使用可能にする場合は、永続変数を作成できます。永続変数を作成するには、変数名の前にアンダースコアを付けます。例:_v_start_date変数と変数に含まれる値の両方が永続します。永続変数を削除するには、明示的に削除するしかありません。
メモ
永続変数は、ロボットで実行されるスクリプトではサポートされません。
7. 変数は明示的に削除できます
Analytics プロジェクトで 1 つまたはすべての変数を明示的に削除するには、コマンドラインまたはスクリプトで DELETE コマンドを使用します。
特定の変数を明示的に削除する
DELETE 変数名 OK
すべての変数を明示的に削除する
DELETE ALL OK
削除される内容
変数を削除するときには、名前付きコンテナーと底に含まれる値をコンピューターのメモリからのみ削除します。
変数を削除しても、スクリプトの変数に関連する項目には影響しません。メモリの変数を元に戻すには、コマンドラインの ASSIGN コマンドを手動で実行し、変数割り当てを含むスクリプトを実行します。
変数とその値を削除しても、Analytics テーブルなどの変数外に存在する値によって参照される項目には影響しません。
例
次の 2 つの例は、変数と変数によって参照されている項目がどのように個別のエンティティになるのかを示しています。一方を削除しても他方には影響しません。
メモ
この例では、変数代入を使用して、変数名に変数の内容を代入します。
最初の例では、変数 v_test_table を削除すると、変数値 "Running_totals" が削除されます。実際の Running_totals テーブルは削除されません。
ASSIGN v_test_table = "Running_totals"
COMMENT 正常に実行されます
OPEN %v_test_table%
COMMENT 変数が削除されます
DELETE v_test_table OK
COMMENT 正常に実行されます
OPEN Running_totals
2 番目の例では、Running_totals テーブルを削除しても v_test_table 変数の影響はありませんが、変数値は存在しないテーブルを参照しています。
ASSIGN v_test_table = "Running_totals"
COMMENT 正常に実行されます
OPEN %v_test_table%
COMMENT 変数によって参照されているテーブルが削除されます
DELETE FORMAT %v_test_table% OK
COMMENT "Table 'Running_totals' invalid" エラーで失敗します
OPEN %v_test_table%
8. システム変数は一部の Analytics コマンドによって自動的に作成されます
特定の Analytics コマンドを実行するときに、システム変数が自動的に作成されます。たとえば、COUNT コマンドは COUNTn システム変数を生成します。これには合計のレコード数が含まれます。スクリプトの後続の部分では、これらの変数を変数に含まれる値を使用できます。
たとえば、ユーザーがレコードのないテーブルを選択した場合に、このスクリプトは自動的に終了します。
ACCEPT "Select an input table:" FIELDS "xf" TO v_input_table
OPEN %v_input_table%
COUNT
PAUSE "選択したテーブルにはレコードがありません。スクリプトは終了します。"IF COUNT1 = 0
ESCAPE IF COUNT1 = 0
DO SCRIPT summarize_transactions
詳細については、Analytics コマンドによって作成されたシステム変数を参照してください。
変数のデータ型の重要性
Analytics コマンドまたは関数が変数を参照するときには、変数のデータ型がコマンドまたは関数で許可されたデータ型と一致する必要があります。データ型が一致しない場合、エラーが発生し、コマンドまたは関数の処理が失敗します。
このような状況でエラーを回避するために、Analytics 関数を使用して、変数の格納された値を使用可能なデータ型に変換できます。たとえば、次の式では、文字変数に格納された日付を日付時刻データ型に変換します。
CTOD(v_character_date)
次の式では、文字変数に格納された数値を数値データ型に変換します。
VALUE(v_character_number, 2)
詳細については、変換関数を参照してください。
メモ
日付および数値は、ユーザー入力で入力された場合は、文字変数に格納されます。詳細については、変数を作成するためのさまざまな方法を参照してください。
日付時刻値について
Analytics では、日付時刻データ型または文字データ型を使用する日付時刻値を処理できます。一般的に、日付時刻値に関連付けられたデータ型は、Analytics にインポートするときのデータの性質に基づいています。
日付、時刻、日付時刻値を含む変数の意味。簡潔に言うと、操作している基本データのデータ型を認識している必要があるということです。スクリプト構文は、使用中のデータ型に基づいて異なる必要があります。
例
次の 2 つの例では、ユーザーが入力した日付範囲に基づいて、日付フィールドをフィルタリングする構文を示します。
-
最初の例では、日付フィールドが日付時刻データ型を使用します。
-
2 番目の例では、日付フィールドが文字データ型を使用します。
-
いずれの例でも、v_start_date および v_end_date 変数は文字データ型を使用します。これらは ACCEPT コマンドまたは DIALOG コマンドを使用して作成されたからです。
最初の例では、 CTOD( ) 関数を使用して、日付範囲値を文字データ型から日付時刻データ型に変換する必要があります。(CTOD は「Character to Date」を表します。)日付範囲値のデータ型が日付時刻日付フィールドのデータ型と一致するように、この変換を実行する必要があります。
SET FILTER TO BETWEEN(datetime_date_field, CTOD(v_start_date), CTOD(v_end_date))
2 番目の例では、日付範囲値の変換を実行しません。文字日付フィールドのデータ型とすでに一致するからです。変換する場合は一致せず、スクリプト エラーが発生します。
SET FILTER TO BETWEEN(character_date_field, v_start_date, v_end_date)
代入変数
Analytics コマンドまたは関数の入力として文字変数を使用するときには、変数名に変数の値を代入する必要があります。この代入を実行しない場合、コマンドまたは関数は、変数に格納されている値ではなく実際の変数名で動作しようとし、エラーが発生します。
変数代入は、変数名の文字変数に格納されている値を代入する方法です。変数代入を使用するには、文字変数の名前をパーセント記号(%)で囲みます。たとえば、%v_input_table% は v_input_table に格納された実際のテーブル名を取得し、それを変数名に代入します。
ほとんどの場合、スクリプトのユーザー入力は文字変数に格納されるため、変数代入は、ユーザー入力をスクリプト ロジックを取り込むときに一般的に使用されます。
メモ
変数代入は、文字データを表す値を格納する文字変数での使用のみが想定されています。他のデータ型の変数、または数値、日付時刻、論理値を表す値を格納する文字変数で変数代入を使用すると、信頼できない結果またはエラーが生じる可能性があります。
例
スクリプトで、ユーザーに入力テーブルを選択できるようにします。ユーザーが選択したテーブルをスクリプトによって開きます。OPEN コマンドで変数代入を使用し、コマンドが正しいテーブル名に対して実行されるようにします。
OPEN %v_input_table% を指定すると、スクリプトによって次の内容が実際に表示されます。
OPEN Name_of_table_selected_by_user
ACCEPT "Select an input table:" FIELDS "xf" TO v_input_table
OPEN %v_input_table%
この例で変数代入を使用しない場合、OPEN コマンドがテーブル v_input_table を開こうとして、その名前のテーブルは存在しないため、通常はスクリプトが失敗します。
ACCEPT "Select an input table:" FIELDS "xf" TO v_input_table
OPEN v_input_table
変数代入の使用は注意が必要です
特定の状況では、変数代入が必要に思われる場合がありますが、実際には変数代入によりエラーが発生します。
前述の例の 1 つについて考えてみます。
SET FILTER TO BETWEEN(character_date_field, v_start_date, v_end_date)
次の例では、変数とフィールドの両方で文字データとして格納された日付値を比較しているため、変数で変数代入を使用すると動作するはずです。
SET FILTER TO BETWEEN(character_date_field, %v_start_date%, %v_end_date%)
では、この状況で変数代入のエラーが発生する理由は何でしょうか。それは変数代入が絶対にリテラルだからです。エラーのトラブルシューティングを実行するには、変数に格納された正確な値を確認し、手動で式に代入して、結果の式を確認します。例:
SET FILTER TO BETWEEN(character_date_field, 20000101, 20001231)
この式は、文字データ型を使用する日付と、代入後に数値データ型を使用する数値を比較します。これはデータ型が一致していません。
BETWEEN( ) で文字フィールドを指定したため、この関数は v_start_date と v_end_date の値を自動的に文字値として解釈し、変数代入を使用する必要はありません。
詳細については、トラブルシューティングを参照してください。
ルールの例外
場合によっては、数値変数で問題なく変数代入をできることがあります。この利点は、数値変数の値がログに取り込まれ、トラブルシューティングで役立つということです。
次の例はいずれも COUNT1 数値変数の値を v_counter 数値変数に割り当てます。ただし、最初の例では、実際の割り当てられた値はログに取り込まれません。2 番目の例では、実際の値が取り込まれます。
COMMENT log entry: ASSIGN v_counter = COUNT1
ASSIGN v_counter = COUNT1
COMMENT log entry: ASSIGN v_counter = 500
ASSIGN v_counter = %COUNT1%
手動による変数の管理
Analytics メインメニューから[変数]ダイアログボックスを使用して手動で変数を管理できます。変数の作成、名前の変更、複製、または削除、あるいは変数値の更新ができます。
実行するメンテナンスは、メモリ内の変数の現在のインスタンスにのみ影響します。たとえば、変数の名前を変更する場合は、メモリの変数のインスタンスの名前のみを変更しています。スクリプトの変数は変更していません。
メモ
ユーザー インターフェイスで手動で変数を管理する機能は、一部の状況で役立つ場合があります。手動の管理では、追加の機能がなく、コマンドを使用して変数を管理します。
ほとんどのスクリプト作成者はスクリプト エディターと、コマンドラインや[変数]タブなどの関連付けられた機能でのみ変数を操作します。
- Analytics のメイン メニューから、[編集 > 変数]を選択します。
[変数]ダイアログボックスが開き、プロジェクトに含まれるすべてのシステム変数とユーザー定義変数が表示されます。システム変数は、コマンドによって自動的に作成される変数です。
- 次のいずれかを実行します。
新しい変数を作成する [新規作成]をクリックして式ビルダーを開きます。
変数に割り当てる式または値を[式]テキスト ボックスに入力します。
リテラル値は正しい形式と修飾子(必要な場合)を使用する必要があります。詳細については、変数のデータ型は自動的に指定されますを参照してください。
省略可能。[検証]をクリックし、値または式が有効であることを確認します。
[次の名前で保存]テキスト ボックスに変数の名前を入力します。
詳細については、
を参照してください。[OK]をクリックします。
変数が作成され、[変数]タブに表示されます。
変数値を更新する リストの変数を選択し、[OK]をクリックして、式ビルダーを開きます。
変数に割り当てられた式または値を[式]テキスト ボックスで更新します。
リテラル値は正しい形式と修飾子(必要な場合)を使用する必要があります。詳細については、変数のデータ型は自動的に指定されますを参照してください。
省略可能。[検証]をクリックし、値または式が有効であることを確認します。
[OK]をクリックします。
変数に割り当てられた値がコンピューターのメモリで更新されます。
変数名を変更する リストの変数を選択し、[名前の変更]をクリックします。
[名前の変更]テキストボックスで、新しい名前を入力して、[OK]をクリックします。
変数名がコンピューターのメモリで変更されます。
[キャンセル]をクリックして、[変数]ダイアログ ボックスを閉じます。
変数を複製する リストの変数を選択し、[複製]をクリックします。
変数と値がコンピューターのメモリで複製されます。複製された変数の名前には、数値サフィックスが追加されます。
次のいずれかを実行します。
[完了]をクリックして、[変数]ダイアログ ボックスを閉じます。
[OK]をクリックして、変数に割り当てられた値または式を更新します。
変数の削除 リストの変数を選択します。
省略可能。複数の変数を選択して削除するには、Shift キー + クリック、または Ctrl キー + クリックを使用します。
[削除]をクリックします。
もう一度[削除]をクリックします。
変数がコンピューターのメモリから削除されます。
[完了]をクリックして、[変数]ダイアログ ボックスを閉じます。
変数の使用例
売上税金額を計算し、定期的に変更される売上税率を処理するスクリプトを作成します。
必須の変数
異なる税率と日付範囲の構成を許可するには、ASSIGN コマンドを使用して、次の変数のセットを作成します。
| 変数名 | 変数の内容 |
|---|---|
| v_tax_1 | 最初の税率 |
| v_tax_2 | 2 番目の税率 |
| v_tax_2_start | 2 番目の税率が有効になる日付 |
| v_tax_2_end | 2 番目の税率が終了する日付、または現在の日付(税率がまだ有効な場合) |
スクリプト
COMMENT 売上税率の変数と日付範囲を作成して初期化します
COMMENT 必要に応じて、追加の税率と日付範囲変数を追加して、スクリプトを拡張できます
ASSIGN v_tax_1 = 0.05
ASSIGN v_tax_2 = 0.06
ASSIGN v_tax_2_start = `20210701`
ASSIGN v_tax_2_end = `20211231`
COMMENT 2 つの異なる期間に対して別の売上税率を使用する条件付き演算フィールドを作成します
DEFINE FIELD sales_tax COMPUTED
Invoice_Amount * v_tax_2 IF BETWEEN(Invoice_Date, v_tax_2_start, v_tax_2_end)
Invoice_Amount * v_tax_1
[変数]タブで作成および初期化された変数
スクリプトを実行した後は、作成および初期化された変数が[変数]タブに表示されます。
ASSIGN コマンドは変数を作成するため、割り当てられた値のデータ型は変数のデータ型を示します。この例では、2 つの数値変数と 2 つの日付時刻変数があります。
ユーザーが Analytics プロジェクトで任意のテーブルを選択し、数値範囲と日付範囲でテーブルのレコードをフィルタリングして、フィルタリングされたレコードを新しいテーブルに出力するスクリプトを作成します。
必須の変数
スクリプトのユーザー入力を取り込むには、ACCEPT コマンドを使用して、次の変数のセットを作成します。
| 変数名 | 変数の内容 |
|---|---|
| v_input_table | 入力として使用する Analytics テーブルの名前 |
| v_output_table | フィルタリングされたレコードの Analytics 出力テーブルの名前 |
| v_numeric_field | 数値範囲で使用する入力テーブルの数値フィールド |
| v_min_amount | 数値範囲の下限 |
| v_max_amount | 数値範囲の上限 |
| v_date_field | 日付範囲で使用する入力テーブルの日付フィールド |
| v_start_date | 日付範囲で最も早い日付 |
| v_end_date | 日付範囲で最も遅い日付 |
スクリプトの考慮事項
ACCEPT コマンドを使用して、対話型でユーザーにスクリプトの入力値を確認しているため、値が数値でも日付でも、各入力値は名前付きの文字変数に格納されます。この事実を考慮すると、スクリプトの特定の位置で Analytics 関数を使用して、変数値をスクリプト ロジックで必要なデータ型に変換する必要があります。
例:
-
VALUE( ) 関数は、v_min_amount に格納された数値を文字データ型から数値データ型に変換します。
VALUE(v_min_amount, 2)
-
CTOD( ) 関数は v_start_date に格納された日付を文字データ型から日付データ型に変換します。
CTOD(v_start_date)
これらの変数の値は、数値または日付時刻データ型を使用するフィールドの値と比較されているため、これらのデータ型変換を実行する必要があります。
変数代入を使用して、テーブルの実際の名前と変数の一部に格納されたフィールドにアクセスする必要もあります。
例:
OPEN %v_input_table%
スクリプト
COMMENT ダイアログボックスを作成し、入力テーブルと出力テーブルをユーザーに確認します
ACCEPT "入力テーブルを選択:" FIELDS "xf" TO v_input_table, "出力テーブル名を指定(スペースなし):" TO v_output_table
COMMENT ユーザーが選択した入力テーブルを開きます
OPEN %v_input_table%
COMMENT ダイアログボックスを作成し、数値フィールドと数値範囲をユーザーに確認します
ACCEPT "フィルタリングする数値フィールドを選択:" FIELDS "N" TO v_numeric_field, "最小金額を指定:" TO v_min_amount, "最大金額を指定:" TO v_max_amount
COMMENT ダイアログボックスを作成し、日付フィールドと日付範囲をユーザーに確認します
ACCEPT "フィルタリングする日付フィールドを選択:" FIELDS "D" TO v_date_field, "開始日を指定(YYYYMMDD):" TO v_start_date, "終了日を指定(YYYYMMDD):" TO v_end_date
COMMENT ユーザーの数値および日付範囲に基づいて入力テーブルをフィルタリングします
SET FILTER TO BETWEEN(%v_numeric_field%, VALUE(v_min_amount, 2), VALUE(v_max_amount, 2)) AND BETWEEN(%v_date_field%, CTOD(v_start_date), CTOD(v_end_date))
COMMENT フィルタリングされたレコードのセットをユーザーが指定した出力テーブルに抽出します
EXTRACT RECORD TO %v_output_table%
COMMENT フィルタリングされたレコードの出力テーブルを開きます
OPEN %v_output_table%
[変数]タブで作成および初期化された変数
スクリプトを実行した後は、作成および初期化された変数が[変数]タブに表示されます。
ACCEPT コマンドは変数を作成するため、変数値が数値または日付を表す場合でも、変数は文字データ型を使用します。
WRITE1 はシステム変数です。この現在の状況では、値は出力テーブル(v_output_table)のレコード数を表します。詳細については、Analytics コマンドによって作成されたシステム変数を参照してください。
ユーザーに空白フィールドを表示するのではなく、ユーザー入力フィールドにデフォルト値をあらかじめ入力します。デフォルト値は、入力値の正しい形式を表示することで、作業とエラーを減らすことができます。
デフォルト値を指定するには、最初にASSIGN コマンドを使用して、デフォルト値で変数を初期化します。同じ変数名でACCEPT コマンドを使用し、ユーザーが任意でデフォルト値を上書きできるようにします。
この例は上記のユーザー入力の変数と同じです。ただし、数値および日付範囲のデフォルト値で変数を初期化するための予備セクションが追加されています。
デフォルト値で変数を初期化する
デフォルト値で変数を初期化するには、ASSIGN コマンドを使用して、次の変数を作成します。
| 変数名 | 変数の内容 |
|---|---|
| v_min_amount | 数値範囲の下限 |
| v_max_amount | 数値範囲の上限 |
| v_number_of_months | 日付範囲の長さ(月) |
| v_end_date | 日付範囲で最も遅い日付(演算) |
| v_start_date | 日付範囲で最も速い日付(演算) |
スクリプトの考慮事項
ACCEPT コマンドによって作成されたデフォルト値をフィールドにあらかじめ入力しているため、これらの値は文字データ型を使用する必要があります別のデータ型の値を入力しようとすると、値が表示されません。
この事実を考慮して、Analytics 関数を使用し、デフォルト値を文字データ型に変換しなければならない場合があります。(スクリプトの後の部分では、他の関数を使用して、スクリプト ロジックで必要なデータ型に変数値を変換できます。)
例:
-
STRING( ) 関数は 5000 という数値を文字列に変換します。この文字列は v_min_amount 変数に格納されます。
ASSIGN v_min_amount = STRING(5000, 4)
-
DATE( ) 関数は計算された終了日を v_end_date 変数に格納された文字列に変換します。
ASSIGN v_end_date = ALLTRIM(DATE(EOMONTH(TODAY(),-1)))
日付範囲の計算
日付範囲の計算により、デフォルトの範囲が現在の日付のちょうど 12 か月前に設定されます。範囲の長さを変更するには、v_number_of_months 変数に割り当てられた値を更新します。日付範囲を計算するために使用される関数の詳細については、EOMONTH( ) 関数を参照してください。
スクリプト
COMMENT Analytics セッションの期間の日付形式を設定します
SET DATE "YYYYMMDD"
COMMENT 数値範囲の上限と下限のデフォルト値を指定します
ASSIGN v_min_amount = STRING(5000, 4)
ASSIGN v_max_amount = STRING(100000, 6)
COMMENT 計算された日付範囲の長さを指定します(月数)
ASSIGN v_number_of_months = 12
COMMENT 現在の日付と v_number_of_months で指定された長さに基づいて、デフォルトの日付範囲の開始日と終了日を計算します。
ASSIGN v_end_date = ALLTRIM(DATE(EOMONTH(TODAY(),-1)))
ASSIGN v_start_date = ALLTRIM(DATE(EOMONTH(CTOD(v_end_date), -v_number_of_months) + 1))
COMMENT ダイアログボックスを作成し、入力テーブルと出力テーブルをユーザーに確認します
ACCEPT "入力テーブルを選択:" FIELDS "xf" TO v_input_table, "出力テーブル名を指定(スペースなし):" TO v_output_table
COMMENT ユーザーが選択した入力テーブルを開きます
OPEN %v_input_table%
COMMENT ダイアログボックスを作成し、数値フィールドと数値範囲をユーザーに確認します
ACCEPT "フィルタリングする数値フィールドを選択:" FIELDS "N" TO v_numeric_field, "最小金額を指定:" TO v_min_amount, "最大金額を指定:" TO v_max_amount
COMMENT ダイアログボックスを作成し、日付フィールドと日付範囲をユーザーに確認します
ACCEPT "フィルタリングする日付フィールドを選択:" FIELDS "D" TO v_date_field, "開始日を指定(YYYYMMDD):" TO v_start_date, "終了日を指定(YYYYMMDD):" TO v_end_date
COMMENT ユーザーの数値および日付範囲に基づいて入力テーブルをフィルタリングします
SET FILTER TO BETWEEN(%v_numeric_field%, VALUE(v_min_amount, 2), VALUE(v_max_amount, 2)) AND BETWEEN(%v_date_field%, CTOD(v_start_date), CTOD(v_end_date))
COMMENT フィルタリングされたレコードのセットをユーザーが指定した出力テーブルに抽出します
EXTRACT RECORD TO %v_output_table%
COMMENT フィルタリングされたレコードの出力テーブルを開きます
OPEN %v_output_table%
スクリプトを作成し、数値フィールドの値に基づいて合計を計算します。識別子フィールドの各一意の値の合計はゼロ(0.00)から開始します。
必須の変数
スクリプト入力は、次の 3 つの目的で変数を使用します。
-
ユーザー入力
-
一時ストレージ
-
スクリプト構成
ユーザー入力
スクリプトのユーザー入力を取り込むには、ACCEPT コマンドを使用して、次の変数のセットを作成します。
| 変数名 | 変数の内容 |
|---|---|
| v_input_table | 入力として使用する Analytics テーブルの名前 |
| v_output_table | 合計の Analytics 出力テーブルの名前 |
| v_id_field | 顧客 ID や業者 ID などの識別子値を格納する入力テーブルのフィールド。 |
| v_numeric_field | 合計を計算するために使用する入力テーブルの数値フィールド |
値の一時保存、およびスクリプト構成
スクリプトがレコード単位で入力テーブルを処理するときに値の一時保存を許可するには、ASSIGN コマンドを使用して、次の 2 つの変数を作成および更新します。必要に応じて、ゼロ(0.00)以外の合計の開始点を構成できます。
| 変数名 | 変数の内容 |
|---|---|
| v_id_value | スクリプトが現在処理しているレコードの識別子値 |
| v_running_total |
スクリプトが現在処理しているレコードの合計値 |
スクリプト
COMMENT
確認ダイアログボックスを表示せずにファイルの上書きを許可します
END
SET SAFETY OFF
COMMENT
ダイアログボックスを作成し、入力テーブルと出力テーブルをユーザーに確認します
END
ACCEPT "入力テーブルを選択:" FIELDS "xf" TO v_input_table, "出力テーブル名を指定(スペースなし):" TO v_output_table
OPEN %v_input_table%
COMMENT
ダイアログボックスを作成し、文字識別子フィールドをユーザーに確認します
END
ACCEPT "文字識別子フィールドを選択:" FIELDS "C" TO v_id_field
COMMENT
ダイアログボックスを作成し、数値フィールドをユーザーに確認します
END
ACCEPT "数値フィールドを選択:" FIELDS "N" TO v_numeric_field
COMMENT
文字識別子フィールドでテーブルのインデックスを作成(並べ替え)します
END
INDEX ON %v_id_field% TO "ID_field_sorted"
SET INDEX TO "ID_field_sorted"
COMMENT
文字識別子フィールドの現在の値を v_id_value 変数に割り当てます。
初めて v_input_table が開かれるときの現在の値はフィールドの最初の値です。その後、現在の値はスクリプトで現在処理されているレコードによって異なります。
END
ASSIGN v_id_value = %v_id_field%
COMMENT
合計値の開始値をゼロ(0.00)に設定します
END
ASSIGN v_running_total = 0.00
COMMENT
レコード単位でテーブルを処理します。一意の識別子ごとに、数値フィールドの合計を計算します。
END
GROUP IF v_id_value = %v_id_field%
ASSIGN v_running_total = v_running_total + %v_numeric_field%
EXTRACT %v_id_field% %v_numeric_field% v_running_total AS "%v_numeric_field% running total" TO %v_output_table%
ELSE
ASSIGN v_id_value = %v_id_field%
ASSIGN v_running_total = 0.00
ASSIGN v_running_total = v_running_total + %v_numeric_field%
EXTRACT %v_id_field% %v_numeric_field% v_running_total AS "%v_numeric_field% running total" TO %v_output_table%
END
COMMENT 計算された合計の出力テーブルを開きます
OPEN %v_output_table%
COMMENT ファイルを上書きする前に確認ダイアログボックスを表示するデフォルトの動作を復元します
SET SAFETY ON
[変数]タブで作成および初期化された変数
スクリプトを実行した後は、作成および初期化された変数が[変数]タブに表示されます。
ACCEPT コマンドで作成された変数は文字データ型を使用します。ASSIGN コマンドで作成された変数(v_id_value、v_running_total)は割り当てられた値のデータ型を使用します。
v_id_value および v_running_total に割り当てられた値は、スクリプトの進行に従い、継続的に更新されます。[変数]タブには、スクリプトが完了する前の最終地が表示されます。
システム変数(WRITEn)と番号体系については、連続番号が付けられたシステム変数を参照してください。
トラブルシューティング
スクリプトで変数を操作するときには、次の 2 つの種類のエラーが多く発生します。
-
予期しない結果 スクリプトは最後まで実行されて完了しましたが、変数を含む分析で想定された結果が得られません。
-
データ型の問題 スクリプトは、「式の型が不一致」、「文字式が必要」などのデータ型に関連するエラーのため、失敗しました。
予期しない結果
初めて発生したエラーの場合には、次のトラブルシューティング手順を試してください。
-
ナビゲーターで[変数]タブを開きます。
-
Analytics のコマンドラインで DELETE ALL OK と入力し、既存の変数を削除します。
[コマンド ライン]テキスト ボックスが表示されていない場合は、[ウィンドウ > コマンド ライン]の順にクリックします。
-
[スクリプト エディター]で[ステップ
]オプションを使用し、スクリプトを 1 行ずつ進め、[変数]タブで各変数と割り当てられた値の作成状況を追跡します。変数に割り当てられている値が想定している値とは異なり、スクリプトの調整が必要であることが判明する場合があります。詳細については、スクリプトのテストおよびデバッグを参照してください。
メモ
GROUP、LOOP、または DEFINE FIELD ... COMPUTED などの複数行コマンドの内容をステップ実行することはできません。この状況でスクリプト ロジックをテストするには、周辺のコマンド構文を除いたスクリプト ロジックを一時的に別のスクリプトにコピーします。
データ型の問題
変数を利用するスクリプトを開発するときには、多くの場合、データ型の不一致が原因のエラーが発生します。変換関数と変数代入を同じ式で組み合わせている場合は、特に、エラーが発生する確率が高くなります。
エラーの発生は普通のことであり、エラーを解消するには、別の方法をテストし、次の原則を覚えておく必要があります。
-
式のすべての要素のデータ型に十分に注意する。式のすべてのデータ型が ACLScript で規定されている方法で一致しているか。
-
変数代入は絶対にリテラルである。変数代入でエラーが発生している疑いがある場合は、変数に格納された正確な値を確認し、手動でその値を式に代入します。シンプルなトラブルシューティング手順を実行するだけで、問題が明らかになる場合があります。
-
スクリプトの別の場所に DISPLAY VARIABLES コマンドを挿入すると、プロジェクト変数のその時点の状態を取り込むことができます。
-
スクリプトを 1 行ずつ進み、ブレーク ポイントを設定すると、トラブルシューティングが大幅に容易になります。詳細については、スクリプトのテストおよびデバッグを参照してください。