【发布时间】:2015-06-24 15:41:30
【问题描述】:
我有一个层次结构表,我尝试将其添加到 QlikView 中,以便对用户使用 RESTRICTION(部分访问)来显示/隐藏数据。
在表格上,我有一个用户 REFERENCE,其 ID 链接到 IDPARENT 以便具有层次结构。
我希望叶用户(层次结构中的最后一个)“顶部”的所有用户都可以访问他的数据。
为了做到这一点,我使用了这个 SQL 查询:
Select
REFERENCE,
LEVEL-1 "LEVEL",
from HIERARCHYTABLE
start with TYPE='VD' //Start hierarchy with all the users with type='VD'
connect by ID = prior IDPARENT;
返回:
VD254 0
IG203 1
GR203 2
VD255 0
IG232 1
GR258 2
IG235 1
GR259 2
-> 所以IG203和GR203可以访问VD254的数据
并且IG232、GR258、IG235和GR259可以接入VD255
这样,我的所有 REFERENCE 都与 LEVEL 相关联(这里底部的用户是级别“0”)。
我希望我的 AUTHENTIFICATE 表是这样的:
ACCESS, REFERENCE, PASSWORD, RESTRICTION
ADMIN, ADMIN, ADMIN, *
USER, VD254, VD254, VD254
USER, VD254, VD254, VD255 // Here the user VD254 can access to his data and the VD255 user data
所以我在想,当我有一个 0 LEVEL 时,所有下一个用户都会在 RESTRICTION 中拥有 0 级别的 REFERENCE,直到循环看到另一个 0 LEVEL:
但我不能让它工作:
。 IterNo() 始终为“0”,因此 IF 条件始终为真,但值错误!
。它将无限数量的行添加到 AUTH,因此 LEVEL '0' 永远不会为真......
AUTHRESIDENT:
LOAD
REFERENCE,
LEVEL,
Select
REFERENCE,
LEVEL-1 "LEVEL",
from HIERARCHYTABLE
start with TYPE='VD' //Start hierarchy with all the users with type='VD'
connect by ID = prior IDPARENT;
Let vRowCount = NoOfRows('AUTHRESIDENT');
DO WHILE (IterNo() <> vRowCount)
IF peek('LEVEL', IterNo(), 'AUTHRESIDENT')='0' THEN
Let vNumVd = peek('REFERENCE', IterNo(), 'AUTHRESIDENT');
AUTH:
LOAD
'USER' as ACCESS,
'00211' as REFERENCE, // Only to test
'00211' as PASSWORD,
$(vNumVd) as RESTRICTION
RESIDENT AUTHRESIDENT
WHILE LEVEL <> '0';
ENDIF;
LOOP;
非常感谢您的帮助!
【问题讨论】:
标签: while-loop qlikview