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

我只想加载与该遭遇实际相关的患者和科室数据。编写时,脚本加载所有患者和科室数据。

有两种方法可以解释您的问题:下载整个表,但限制实际加载到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;

最新更新