QlikView-在加载过程中如何在“编辑脚本”中使用“设置”

时间:2019-07-08 04:26:52

标签: qlikview

我正在尝试加载数字从1到12的字段。但是我希望将等效的月份名称加载到Qlik View中。就像每个人都建议使用名为MonthNames的set变量一样,而不是1我希望该单元格包含Jan,而不是2我希望它包含Feb等。当我将表格加载到qlik视图中时,我看到设置了MonthNames =“ jan; feb; mar; apr; ..'变量,该变量可用于为字段分配相应的月份。但是我找不到一个示例如何使用它。任何人都可以帮忙吗?

我的字段名称是“ Mon”。我不确定如何在编辑脚本的load语句中使用它。

1 个答案:

答案 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()接受两个参数(和一个可选参数)

  • 字段名称-包含字符串值的有效字段名称
  • 分隔符-应该在其上分割字符串的字符串
  • 位置(可选)-函数可以拆分字符串并返回位置N上的值。指定此参数将仅返回原始字符串中的一个值

在这种情况下,字符串包含以;-'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)
;