有两种方法可以解释您的问题:下载整个表格,但限制实际加载到 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
;
这将删除patient 和location 中所有不相关的值。
限制加载到每个表中
这种方法稍微复杂一些,但可以将表分开,但减少了其中的数据量。但是,它仍然从数据源查询整个表。您可以使用 QlikView exists 函数检查已为 PAT_ID 和 DEPT_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;