我正在尝试加载数字从1到12的字段。但是我希望将等效的月份名称加载到Qlik View中。就像每个人都建议使用名为MonthNames的set变量一样,而不是1我希望该单元格包含Jan,而不是2我希望它包含Feb等。当我将表格加载到qlik视图中时,我看到设置了MonthNames =“ jan; feb; mar; apr; ..'变量,该变量可用于为字段分配相应的月份。但是我找不到一个示例如何使用它。任何人都可以帮忙吗?
我的字段名称是“ Mon”。我不确定如何在编辑脚本的load语句中使用它。
答案 0 :(得分:3)
在这种情况下,您可以使用Mappng Load功能。您可以将“映射负载”视为查找功能。在数据加载期间被调用时,对于每个加载的值,映射将尝试在映射表中查找匹配项。如果找不到匹配项,它将返回原始值。
映射表不是数据模型的一部分,不需要删除它们
在下面的示例中,映射表称为Months
,它包含从1到12的数字,并且每个数字都应返回一个字符串值。使用ApplyMap
函数调用该映射,该函数接受2-3个参数:
ApplyMap('MyMappingTable', MyField, 'No match found')
脚本:
Months:
Mapping
Load * Inline [
Old, New
1 , Jan
2 , Feb
3 , Mar
4 , Apr
5 , May
6 , Jun
7 , Jul
8 , Aug
9 , Sep
10 , Oct
11 , Nov
12 , Dec
];
Data:
Load
MyFeld, // this will contain the original values
ApplyMap('Months', MyField) as MyField_Months // this will contain the month names values
From
MyData.qvd (qvd)
;
更新:
您可以使用设置变量MonthNames
来生成mapping
表。这样做的方法是拆分;
上变量的内容,并为每个元素生成一行,并为其关联一个ID。 Qlik有一个很好的功能,可以将字符串分成多行-SubField()
SubField()
接受两个参数(和一个可选参数)
在这种情况下,字符串包含以;
-'Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec'
使用此字符串调用SubField()
时,结果表将为:
Jan
Feb
Mar
Apr
...
更新的脚本:
Months:
Mapping // comment this row to view the "real" table
// Use SubField function to create N number of rows
// by separating the variable on ';'
// Use RowNo() function to generate and Id (1 ... 12)
// For each row
Load
RowNo() as Id,
SubField(MonthNames_Temp, ';') as MonthNames
;
// Get the content of the MonthNames variable as a string
// and generate one-row table
Load
'$(MonthNames)' as MonthNames_Temp
AutoGenerate(1)
;