【问题标题】:Load multiple dimensional tables in Qlikview, restricted to data in fact table在 Qlikview 中加载多维表,仅限于事实表中的数据
【发布时间】:2014-10-13 20:47:49
【问题描述】:

我有 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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多