QlikView - 如何在加载过程中使用 "set" in "edit script"

QlikView - How to use "set" in "edit script" during loading process

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

我的域名是"Mon"。我不确定如何在编辑脚本的加载语句中使用它。

对于这种情况,您可以使用 Mappng Load 功能。您可以将 Mapping load 视为查找功能。在数据加载期间调用时,对于加载的每个值,映射将尝试在映射 table 中找到匹配项。如果未找到匹配项,它将 return 原始值。

映射 table 不是数据模型的一部分,不需要删除它们

在下面的示例中,映射 table 被称为 Months,它包含从 1 到 12 的数字,每个数字都有一个字符串值应该 returned .使用接受 2-3 个参数的 ApplyMap 函数调用映射:

  • mapping name - 映射的名称table(名称应在引号内)
  • 字段名 - 应用映射的字段
  • 默认值(可选)- 如果在未找到匹配项时未指定,则原始值为 returned。这可以用这个参数覆盖。例如: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生成mappingtable。这样做的方法是在 ; 上拆分变量的内容并为每个元素生成一行并为其关联一个 id。 Qlik 有一个很好的函数可以将字符串拆分成多行 - SubField()

SubField() 接受两个参数(和一个可选的)

  • 字段名 - 包含字符串值的有效字段名
  • 定界符 - 应分割字符串的字符串
  • 位置(可选)- 该函数可以拆分字符串和 return 位置 N 上的值。指定此参数将 return 原始字符串中只有一个值

在这种情况下,字符串包含由 ; - 'Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec'

分隔的月份名称

当使用此字符串调用 SubField() 时,结果 table 将是:

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)
;