Qlikview - 在脚本中计算和使用计算变量

时间:2014-05-01 20:05:58

标签: sql qlikview calculated-field

作为新的Qlikview用户,我正在寻找在我的数据中创建计算变量和基于计算变量的变量的最佳方法,并在显示中使用它们。我的数据通过ODBC连接。

例如,让我们说我想要一个基于"风险"的变量评级。我的数据集中的变量。原始数据包含一个风险变量,即" L"或" H"。我想创建一个指标,如Risk_H,即0或1(如果风险=' H')。然后我想创建评级,如"评级= 1 +风险_H * 2"。我可以在脚本中完成所有这些并在我的数据集中使用变量Rating吗?

当我尝试上述操作时,我可以创建Risk_H变量,但后来我不确定如何在脚本中引用它来计算Rating变量。我已阅读其他使用load语句(Qlikview Calculated Fields with Load Script)解决的帖子,但使用计算变量创建新变量时未成功。

示例代码(有效):

SQL SELECT *,
case when (Risk = 'H') then 1
   else 0
   end as Risk_H
FROM [Data];

如何创建Risk_H以便在同一个脚本中使用它,如下所示?在其他设置中,我会使用"计算Risk_H"引用它。

SQL SELECT *,
case when (Risk = 'H') then 1
   else 0
   end as Risk_H,
(10 + Risk_H*2) as Rating   // Qlikview says it can't find Risk_H
FROM [Data];

我尝试在加载脚本中创建Risk_H,但Qlikview在以后的SQL语句中不识别Risk_H。我还尝试使用Risk_H创建一个表,并从该表中提取数据。实际上,我试图创建10个以上的指标,而不只是一个,因此嵌套的案例陈述不是答案。

编辑:我告诉居民表可能是执行计算的答案。如果您可以使用通过ODBC连接的表来提供此语法,可以回答问题。

1 个答案:

答案 0 :(得分:1)

看来您的第二个Select语句不是有效的SQL,因此QlikView会抱怨它无法找到Risk_H。您可以使用子查询尝试更复杂的SQL查询来解决此问题,或者您可以在QlikView中使用驻留加载,如下所示:

Source_Data:
SQL SELECT *,
case when (Risk = 'H') then 1
   else 0
   end as Risk_H
FROM [Data];

Calculated_Data:
NOCONCATENATE
LOAD
  *,
  (10 + Risk_H*2) as Rating
RESIDENT Source_Data;

DROP TABLE Source_Data;

您还提到您希望使用大约10个指标,所以我同意,case声明可能不是一个好主意。如果您想使用MAPPING加载和ApplyMap函数,也可以将此部分移动到QlikView中,如下所示:

Indicator_Map:
MAPPING
LOAD
  *
INLINE [
  Risk, Value
  H,    1
  I,    2
  J,    3
];


Source_Data:
SQL SELECT *,
case when (Risk = 'H') then 1
   else 0
   end as Risk_H
FROM [Data];

Calculated_Data:
NOCONCATENATE
LOAD
  *,
  (10 + (ApplyMap('Indicator_Map',Risk, 0) * 2)) as Rating
RESIDENT Source_Data;

DROP TABLE Source_Data;

我为您的风险“指标”添加了几个额外的条目,以便您了解。当然,表不需要内联,它可能来自另一个SQL语句,其他文件等。

在上面的示例中,会发生Risk字段的值作为参数提供给映射表Indicator_Map,然后返回关联的值。如果未找到风险值,则返回0(第三个参数)。