论坛上都是一些简单的hard code,不推荐在项目上使用。
Qlikview的官方文档也没有说的太清楚,这里总结一下。
1. 假设主表为data,当客户进入报表时需要限制data数据,例如维度限制(限制看到某个时间段,某个地区数据),则必须设置桥接字段和主表进行关联。
注意,桥接字段最好设置成复合键,不要利用已有的维度,否则qilkview可能会将多个维度同时作为关联键和Access表关联,导致关联失效。
复合键例如:ACCESS&'|'&NTNAME2 as SECKEY
2. 假设主表为data,客户进入不需要限制data数据,只需要看到不同的tab页,则不需要设置桥接字段和主表关联。
首先设置Security File.xlsx如下结构:
ACCESS | NTNAME | TAB_A_ACCESS | TAB_B_ACCESS | TAB_C_ACCESS | TAB_D_ACCESS | TAB_E_ACCESS | TAB_F_ACCESS |
ADMIN | test1 | ||||||
ADMIN | test2 | ||||||
ADMIN | test3 | ||||||
ADMIN | test4 | ||||||
ADMIN | test5 | ||||||
ADMIN | test6 | ||||||
ADMIN | test7 | ||||||
USER | test8 | Yes | Yes | Yes | No | Yes | Yes |
USER | test9 | No | No | No | No | Yes | Yes |
USER | test10 | No | No | No | No | Yes | Yes |
USER | test11 | Yes | Yes | Yes | Yes | Yes | Yes |
USER | test12 | No | No | No | Yes | Yes | Yes |
USER | test13 | Yes | Yes | Yes | Yes | Yes | Yes |
USER | test14 | Yes | Yes | Yes | Yes | Yes | Yes |
//Accecc table load
Accesstemp:
NoConcatenate
LOAD ACCESS,
'DIR\'&upper(NTNAME) as NTNAME2,
1 as TAB_A_ACCESS,
1 as TAB_B_ACCESS,
1 as TAB_C_ACCESS,
1 as TAB_D_ACCESS,
1 as TAB_E_ACCESS,
1 as TAB_F_ACCESS
FROM
[..\1_Resources\Excel\Security File.xlsx]
(ooxml, embedded labels, table is Security)
WHERE(ACCESS = 'ADMIN');
Concatenate
LOAD ACCESS,
'DIR\'&upper(NTNAME) as NTNAME2,
if(Upper(TAB_A_ACCESS)='YES',1,0) as TAB_A_ACCESS,
if(Upper(TAB_B_ACCESS)='YES',1,0) as TAB_B_ACCESS,
if(Upper(TAB_C_ACCESS)='YES',1,0) as TAB_C_ACCESS,
if(Upper(TAB_D_ACCESS)='YES',1,0) as TAB_D_ACCESS,
if(Upper(TAB_E_ACCESS)='YES',1,0) as TAB_E_ACCESS,
if(Upper(TAB_F_ACCESS)='YES',1,0) as TAB_F_ACCESS
FROM
[..\1_Resources\Excel\Security File.xlsx]
(ooxml, embedded labels, table is Security)
WHERE(ACCESS = 'USER');
AccessLevel:
LOAD
NTNAME2,
ACCESS&'|'&NTNAME2 as SECKEY,
TAB_A_ACCESS,
TAB_B_ACCESS,
TAB_C_ACCESS,
TAB_D_ACCESS,
TAB_E_ACCESS,
TAB_F_ACCESS
Resident Accesstemp WHERE 1=1;
//Set Access
Section Access;
AccessFinal:
LOAD
ACCESS,
NTNAME2 AS NTNAME,
ACCESS&'|'&NTNAME2 as SECKEY
Resident Accesstemp WHERE 1=1;
Section Application;
DROP Table Accesstemp;
之后把每个tab加上条件:max(TAB_A_ACCESS)=1 即可