微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QlikSense的串联和连接是水平合并表而不是垂直合并表 问题解决方案

如何解决QlikSense的串联和连接是水平合并表而不是垂直合并表 问题解决方案

我有以下2张桌子:

[GP_BMI]:
LOAD
    gp_event_id as all_events_event_bmi,gp_dataElement as gp_height_bmi_de,gp_de_value as gp_height_bmi_value,'GP' as gp_height_bmi_stage
Resident GP
WHERE gp_dataElement='vOIPn23yOcr'
AND gp_status='COMPLETED';

LEFT JOIN (GP_BMI)
LOAD
    gp_event_id as all_events_event_bmi,gp_dataElement as gp_weight_bmi_de,gp_de_value as gp_weight_bmi_value
Resident GP
WHERE gp_dataElement='xNkRaZUG7fI'
AND gp_status='COMPLETED';

我之所以加入这里,是因为我需要同时具有ID为vOIPn23yOcrxNkRaZUG7fI的身高和体重字段在表中水平显示,因为它们是从数据库源以垂直方式出现的

第二张表如下:

[NUTRITION_BMI]:
LOAD
    nutrition_event_id as nutrition_all_events_event_bmi,nutrition_dataElement as nutrition_height_bmi_de,nutrition_de_value as nutrition_height_bmi_value,'Nutrition' as nutrition_height_bmi_stage
Resident Nutrition
WHERE nutrition_dataElement='vOIPn23yOcr'
AND nutrition_status='COMPLETED';

LEFT JOIN (NUTRITION_BMI)
LOAD
    nutrition_event_id as nutrition_all_events_event_bmi,nutrition_dataElement as nutrition_weight_bmi_de,nutrition_de_value as nutrition_weight_bmi_value
Resident Nutrition
WHERE nutrition_dataElement='xNkRaZUG7fI'
AND nutrition_status='COMPLETED';

现在,在这种情况下,我想联接这些表vertically以便在Qlik Sense表中显示它:

LOAD * Resident [PEDIATRIC_BMI];
JOIN(GP_BMI)
LOAD * Resident [NUTRITION_BMI];

但是结果是水平显示

我尝试过:

LOAD * Resident [PEDIATRIC_BMI];
Concatenate(GP_BMI)
LOAD * Resident [NUTRITION_BMI];

并得到同一表,其中所有字段均水平显示。但是我在组合表时需要垂直,因为每个表都代表一个阶段。

解决方法

问题

Qlik中的表操作基于字段名称(您可以将其视为列名称)。

当您执行 JOIN 操作时,系统会查找两个表之间共有的字段/列名,并尝试根据这些表中的共享值来合并表中的行字段。

如果它是 OUTER JOIN (即您在此处使用的默认联接),则这可能会创建新行,但是它的目的是按照您所说的水平连接表。

正确执行操作的目的是-将行彼此叠置- CONCATENATE

CONCATENATE 操作将新行(垂直)添加到某些现有表上。为此,它将查看新行中的字段/列名称。对于与现有表中的字段/列名称匹配的任何内容,该值将放在该列中。否则,将自动创建一个新列来保存该值。

从上面的内容来看,我认为其意图是[NUTRITION_BMI]表中的每一列都应位于[GP_BMI]表中具有相似名称的列下方,即:

    all_events_event_bmi 下的
  • nutrition_all_events_event_bmi gp_height_bmi_de
  • 下的
  • nutrition_height_bmi_de

以此类推。问题在于,由于这些字段具有不同的名称,因此Qlik会为每个字段创建一个新的列。

解决方案

为了将表串联在一起,您需要字段名称相同。为了区分行的不同“类型”,您需要一个字段来指示“类型”。看来您已经使用 gp_height_bmi_stage 字段进行了此操作。

您可以执行几个不同的命令,其中一个看起来像这样(请注意,如果不同的命令之间的“ all_events_event_bmi”字段存在任何重叠,请在联接中包含“ stage”字段阶段):

[BMI]:
LOAD
    gp_event_id as all_events_event_bmi,gp_dataElement as height_bmi_de,gp_de_value as height_bmi_value,'GP' as stage
Resident GP
WHERE gp_dataElement='vOIPn23yOcr'
AND gp_status='COMPLETED';
CONCATENATE
LOAD
    nutrition_event_id as all_events_event_bmi,nutrition_dataElement as height_bmi_de,nutrition_de_value as height_bmi_value,'Nutrition' as stage
Resident Nutrition
WHERE nutrition_dataElement='vOIPn23yOcr'
AND nutrition_status='COMPLETED';

[TMP_BMI_WEIGHTS]:
LOAD
    gp_event_id as all_events_event_bmi,gp_dataElement as weight_bmi_de,gp_de_value as weight_bmi_value,'GP' as stage
Resident GP
WHERE gp_dataElement='xNkRaZUG7fI'
AND gp_status='COMPLETED';
CONCATENATE
LOAD
    nutrition_event_id as all_events_event_bmi,nutrition_dataElement as weight_bmi_de,nutrition_de_value as weight_bmi_value,'Nutrition' as stage
Resident Nutrition
WHERE nutrition_dataElement='xNkRaZUG7fI'
AND nutrition_status='COMPLETED';

LEFT JOIN(BMI)
LOAD * RESIDENT TMP_BMI_WEIGHTS;
DROP TABLE TMP_BMI_WEIGHTS;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。