在Qlikview中加载多维表,仅限于事实表中的数据

时间:2014-10-13 20:47:50

标签: qlikview

我有3个逻辑表:患者,遭遇和位置。

我当前的加载脚本:

encounter: 
SQL 
SELECT  PAT_ID, DEPT_ID, ENC_ID, ENC_DATE
FROM    encounter e
WHERE   enc_date >= '10/1/2014' AND enc_date < '10/14/2014'
;

patient:
SQL 
SELECT  PAT_ID, PAT_NAME, BIRTH_DATE, GENDER
FROM    patient p
;

location:
SQL
SELECT  DEPT_ID, DEPT_NAME, LOC_ID, LOC_NAME
FROM    department d
INNER JOIN location l on d.loc_id=l.loc_id
;

我只想加载与遭遇实际相关的患者和部门数据。在编写时,脚本会加载所有患者和部门数据。

1 个答案:

答案 0 :(得分:0)

有两种方法可以解释您的问题:下载整个表但限制实际加载到QlikView中的内容,或者在加载到QlikView之前限制从数据库请求的数据量(即不是每个都下载整个表时间)。

在第一种情况下,有两种方法,您可以将表连接在一起或限制加载到每个表中。

<强>加入

如果您不介意所有数据都在一个表中,您只需在SQL语句之间添加QlikView JOIN语句,如下所示:

encounter: 
SQL 
SELECT  PAT_ID, DEPT_ID, ENC_ID, ENC_DATE
FROM    encounter e
WHERE   enc_date >= '10/1/2014' AND enc_date < '10/14/2014'
;

LEFT JOIN (encounter)

patient:
SQL 
SELECT  PAT_ID, PAT_NAME, BIRTH_DATE, GENDER
FROM    patient p
;

LEFT JOIN (encounter)

location:
SQL
SELECT  DEPT_ID, DEPT_NAME, LOC_ID, LOC_NAME
FROM    department d
INNER JOIN location l on d.loc_id=l.loc_id
;

然后,这会移除patientlocation中与之无关的所有值。

限制加载到每个表格

此方法稍微复杂一些,但会使表保持独立,但会减少其中的数据量。但是,它仍然从数据源查询整个表。您可以使用QlikView exists函数检查已加载PAT_IDDEPT_ID的数据,并相应地限制其他表格,如下所示:

encounter: 
SQL 
SELECT  PAT_ID, DEPT_ID, ENC_ID, ENC_DATE
FROM    encounter e
WHERE   enc_date >= '10/1/2014' AND enc_date < '10/14/2014'
;

patient_dis:
LOAD DISTINCT
    PAT_ID as PAT_ID_DIS
RESIDENT encounter;

dept_dis:
LOAD DISTINCT
    DEPT_ID as DEPT_ID_DIS
RESIDENT encounter;

patient:
LOAD
    *
WHERE exists(PAT_ID_DIS,PAT_ID);
SQL 
SELECT  PAT_ID, PAT_NAME, BIRTH_DATE, GENDER
FROM    patient p
;

location:
LOAD
    *
WHERE exists(DEPT_ID_DIS, DEPT_ID);
SQL
SELECT  DEPT_ID, DEPT_NAME, LOC_ID, LOC_NAME
FROM    department d
INNER JOIN location l on d.loc_id=l.loc_id
;

DROP TABLES patient_dis, dept_dis;