使用变量进行货币符号扩展
在加载脚本或图表表达式中,使用美元符号扩展中的变量可以:
-
引用文本
-
引用数值
文本变量
如果要在脚本或表达式中使用变量进行文本替换,需使用以下语法:
$(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 |
---|---|---|---|
红色 | 蓝色 | 红蓝 | 红绿蓝 |
加载脚本
将以下数据作为数据加载编辑中的内联加载载入。
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 语句用于为加载脚本中的变量赋值。两者之间的区别在于,Set 语句将字符串分配给变量,而 Let 语句在将结果值分配给变量之前先评估字符串的内容。本例中的内联加载表补充了两条前置 load 语句,它们用于将变量 vEvaluate 的不同计算可视化为文本字符串和相应的表达式。
输出
在 Qlik Sense 中创建以下表格:
ID | String | Expression | Upper |
---|---|---|---|
1 | abc | upper(String) | ABC |
2 | def | upper(String) | DEF |
3 | ghi | upper(String) | GHI |
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 不存在或不包含数字值,则会被扩展至 0 而非 NULL。
示例:数字变量加载脚本
加载脚本
将以下数据作为数据加载编辑中的内联加载载入。
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 |
引用备用状态扩展变量
变量只有一个值,并且在所有备用状态下都使用该值。当您展开一个变量时,该值也是相同的,与它的生成位置和对象的状态无关。
如果变量是计算变量,即定义以等号开头,则计算将在默认状态下进行,除非在变量定义中指定备用状态。
例如,如果您有名为 MyState 的状态以及名为 vMyVar 的变量:
vMyvar: =only({MyState}MyField)
变量定义内容(带有对备用状态名的显式引用)确定将在哪个状态下计算变量内容。