首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qlik感官连接和连接是水平而不是垂直合并表。

Qlik感官连接和连接是水平而不是垂直合并表。
EN

Stack Overflow用户
提问于 2020-08-26 09:09:35
回答 1查看 2.2K关注 0票数 1

我有以下两张表:

代码语言:javascript
复制
[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';

我之所以加入这里,是因为我需要分别具有vOIPn23yOcrxNkRaZUG7fI in的身高和权重字段在表中水平显示,因为它们是从数据库源以垂直方式显示的。

第二个表如下:

代码语言:javascript
复制
[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表中显示它:

代码语言:javascript
复制
LOAD * Resident [PEDIATRIC_BMI];
JOIN(GP_BMI)
LOAD * Resident [NUTRITION_BMI];

但结果是水平显示。

我试过:

代码语言:javascript
复制
LOAD * Resident [PEDIATRIC_BMI];
Concatenate(GP_BMI)
LOAD * Resident [NUTRITION_BMI];

并得到所有字段水平显示的表。但是,当组合表格时,我需要它们的垂直,因为每个表代表一个阶段。

EN

回答 1

Stack Overflow用户

发布于 2020-09-19 05:03:14

问题

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

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

这可能会创建新行,如果它是外部联接(即。默认联接,您在这里使用过),但是它的目的是像您所说的那样水平地连接表。

正确的操作是连接,以完成您要做的事情--将行放在彼此的上面。

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

通过查看上面的内容,我假设NUTRITION_BMI表中的每个列都应该位于GP_BMI表的列下面,名称类似,即:

  • nutrition_all_events_event_bmi在all_events_event_bmi
  • nutrition_height_bmi_de下gp_height_bmi_de

下的应用

诸若此类。问题是,由于字段有不同的名称,所以以上的Qlik将为每个字段创建一个新列。

解决方案

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

您可以在几个不同的命令中这样做,其中一个如下所示(注意,我已经在join中包含了'stage‘字段,以防'all_events_event_bmi’字段在不同阶段之间有任何重叠):

代码语言:javascript
复制
[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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63594292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档