変数を使用したドル記号展開
ロード スクリプトまたはチャートの数式で、ドル記号展開の変数を使用して次のことを行います。
-
テキストを参照
-
数値を参照
テキスト変数
スクリプトや数式でのテキスト置換に変数を使用する場合は、次の構文が使用されます。
$(variablename)
$(variablename) により、変数内の値に展開されます。variablename が存在しない場合は、空の文字列に展開されます。
例: テキスト変数ロード スクリプト
ロード スクリプト
次のデータをインライン ロードとしてデータ ロード エディタにロードします。
Set x = 'red'; // Assign the value "red" to variable x
Set y = 'blue'; // Assign the value "blue" to variable y
Set z = '$(x) $(y)'; // Expands x and y, returns "red blue" in variable z
// Expand x and y, return "red green blue" in variable MyString
Let MyString='$(x)'&' green '&'$(y)';
// Create table MyTable, load variable values for x, y, z into fields X, Y, Z
// Concatenate with variable MyString into field NewString
MyTable:
Load '$(x)' as X, '$(y)' as Y, '$(z)' as Z, '$(MyString)' as NewString autogenerate 1;
インライン ロードの使用の詳細については、インライン ロード を参照してください。
説明
この例では、次のことを示しています。
-
変数割り当てで変数を展開する方法。
-
テキスト操作と組み合わせて変数を展開する方法。
これは、変数の内容と静的文字列を組み合わせた動的ラベルと一般的なテキスト文字列を作成するための便利な設定です。
アウトプット
Qlik Sense で次のテーブルを作成します:
X | Y | Z | NewString |
---|---|---|---|
red | blue | red blue | red blue green |
ロード スクリプト
次のデータをインライン ロードとしてデータ ロード エディタにロードします。
Set vFunction = 'upper'; // Assign the string “upper” to variable vFunction
Set vField = 'String'; // Assign the string "String" to variable vField
Let vEvaluate = '$(vFunction)'&'('&'$(vField)'&')';
// The variable vEvaluate returns the value "upper(string)"
MyTable: // Create table called MyTable
Load *, $(vEvaluate) as Upper; // vEvaluate expanded as a dynamic expression
Load *, '$(vEvaluate)' as Expression; // vEvaluate expanded as string
Load * inline [
ID, String
1, abc
2, def
3, ghi
4, jkl ];
説明
Set ステートメントと Let ステートメントは、ロード スクリプトの変数に値を割り当てるために使用されます。2 つの違いは、Set ステートメントが変数に文字列を割り当てるのに対し、Let ステートメントは結果の値を変数に割り当てる前に文字列の内容を評価することです。この例の load インライン テーブルには、変数 vEvaluate のさまざまな評価をテキスト文字列と対応する数式の両方として視覚化するために使用される 2 つの先行する load ステートメントが追加されています。
アウトプット
Qlik Sense で次のテーブルを作成します:
ID | String | Expression | Upper |
---|---|---|---|
1 | abc | upper(String) | ABC |
2 | DEF | upper(String) | DEF |
3 | ghi | upper(String) | HIJ |
4 | jkl | upper(String) | JKL |
例: テキスト変数のチャートの数式
ロード スクリプト
次のデータをインライン ロードとしてデータ ロード エディタにロードします。
// Create table SalesByCountry
SalesByCountry:
Load * Inline [
Country, Year, Sales
Argentina, 2014, 66295.03
Argentina, 2015, 140037.89
Austria, 2014, 54166.09
Austria, 2015, 182739.87
Belgium, 2014, 182766.87
Belgium, 2015, 178042.33
Brazil, 2014, 174492.67
Brazil, 2015, 2104.22
Canada, 2014, 101801.33
Canada, 2015, 40288.25
Denmark, 2014, 45273.25
Denmark, 2015, 106938.41
Finland, 2014, 107565.55
Finland, 2015, 30583.44
France, 2014, 115644.26
France, 2015, 30696.98
Germany, 2014, 8775.18
Germany, 2015, 77185.68
];
変数
編集モードのシートで、[アセット] パネルから [変数] ダイアログを開きます。
次の変数を作成します。
名前 | 定義 |
---|---|
vSales | Sum(Sales) |
vSales2014 | Sum({<Year={2014}>}Sales) |
vSales2015 | Sum({<Year={2015}>} Sales) |
vSalesAllYears | $(vSales2014) +$(vSales2015) |
vSalesDifference | $(vSales2015)/$(vSales2014) - 1 |
KPI チャートを作成して、展開を確認します。
数値の変数展開
数値の変数展開では、次の構文が使用されます。
(#variablename)
展開は、常に変数の数値を有効な少数で表現します。指数表記が使用される場合もあります (非常に大きい数字または小さい数字の場合)。variablename が存在しないか、数値が含まれていない場合、これは NULL ではなく 0 に展開されます。
例: 数値変数ロード スクリプト
ロード スクリプト
次のデータをインライン ロードとしてデータ ロード エディタにロードします。
Set DecimalSep = ','; // Set decimal comma as separator for this example.
Let X = 7/2; // Assign the expression 7/2 to variable X.
MyTable: // Create an inline table labeled “MyTable”
Load 1 as ID, * inline [
DecimalComma DecimalPoint
$(X) $(#X) ]
(delimiter is '\t');
説明
#vVariable 展開は、常に変数の数値を有効な少数で表現します。これは、ポイントではなくコンマが小数点記号として使用され、コンマ区切りのリストと競合するリスクがある場合に役立ちます。
ロードインライン テーブルでこれらの変数を展開する主な理由は、$(X) の追加の引用符が必要ないためです。
アウトプット
Qlik Sense で次のテーブルを作成します:
DecimalComma | DecimalPoint |
---|---|
3,5 | 3.5 |
ロード スクリプト
次のデータをインライン ロードとしてデータ ロード エディタにロードします。
// The three Set statements below are required to mimic and initialize
// Format specifiers that are relevant to this particular example
Set ThousandSep=' '; // Set example thousand separator
Set DecimalSep=','; // Set example decimal separator
Set TimestampFormat='YYYY-MM-DD hh:mm:ss'; // Set example date format
Let vRaw = today()-1/1440; // Timestamp minus one minute
Let vFormat = timestamp($(#vRaw)); // Formatted as timestamp
// Create MyTable as an inline table to expand variables as field values
MyTable:
Load * inline [
DecimalComma DecimalPoint FormattedNumber
$(vRaw) $(#vRaw) $(vFormat) ] (delimiter is '\t');
説明
#vVariable 展開は、常に変数の数値を有効な少数で表現します。これは、ポイントではなくコンマが小数点記号として使用され、コンマ区切りのリストと競合するリスクがある場合に役立ちます。変数が正しい小数点記号なしで展開されると、小数部分が切り捨てられるため、数値の精度が影響を受けることに注意することも重要です。
ロードインライン テーブルでこれらの変数を展開する主な理由は、$(X) の追加の引用符が必要ないためです。
アウトプット
Qlik Sense で次のテーブルを作成します:
DecimalComma | DecimalPoint | FormattedNumber |
---|---|---|
44 470,00 | 44469.999305556 | 2021-09-18 23:59:00 |
ロード スクリプト
次のデータをインライン ロードとしてデータ ロード エディタにロードします。
// The three Set statements below are required to mimic and initialize
// format specifiers that are relevant to this particular example
Set ThousandSep=' '; // Set example thousand separator
Set DecimalSep=','; // Set example decimal separator
Set TimestampFormat='YYYY-MM-DD hh:mm:ss'; // Set example date format
// Assign a numerical value and a valid format specifier to vStart
Let vStart = timestamp#('2021-03-23 12:34:56','$(TimestampFormat)');
// Calculate timestamp (vStart + 3 hours) with valid decimal separator: "."
Let vStop = timestamp($(#vStart)+1/8,'YYYY-MM-DD hh:mm:ss');
// Create MyTable as an inline table to expand variables as field values
MyTable:
Load * inline [
StartTime StopTime
$(vStart) $(vStop) ] (delimiter is '\t');
// This is a tab delimited inline table
// Tab delimited tables are useful for avoiding conflicting list separators
説明
#vVariable 展開は、常に変数の数値を有効な少数で表現します。これは、ポイントではなくコンマが小数点記号として使用され、コンマ区切りのリストと競合するリスクがある場合に役立ちます。変数が正しい小数点記号なしで展開されると、小数部分が切り捨てられるため、数値の精度が影響を受けることに注意することも重要です。
ロードインライン テーブルでこれらの変数を展開する主な理由は、$(X) の追加の引用符が必要ないためです。
アウトプット
Qlik Sense で次のテーブルを作成します:
StartTime | StopTime | |
---|---|---|
2021-03-23 12:34:56 | 2021-03-23 15:34:56 |
並列ステートを参照する変数の展開
変数には 1 つの値のみが含まれ、この値がすべての代替ステートで使用されます。変数を展開しても、この値は変わりません。変数が作成された場所やオブジェクトのステートは、この値に影響しません。
変数が計算による変数の場合、つまり定義が等号で始まる場合、変数の定義で代替ステートを指定しない限り、計算は既定のステートで実行されます。
例えば、名前が MyState のステート、vMyVar の名前の変数がある場合:
vMyvar: =only({MyState}MyField)
変数の定義で代替ステート名への参照が明示されているので、変数のコンテンツを評価するステートがこの参照により決定されます。