在 Qlikview 的 LOAD / Section Access 中

While inside LOAD / Section Access in Qlikview

我有一个层次结构 Table,我尝试将其添加到 QlikView 中,以便对用户使用 RESTRICTION(部分访问)show/hide 数据。

在 Table 上,我有用户 REFERENCE,其 ID 链接到 IDPARENT 以便具有层次结构。

我希望叶用户(层次结构中的最后一个)的所有用户 "on top" 都可以访问他的数据。

为了做到这一点,我使用了这个 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;

它return :

VD254       0
 IG203      1
   GR203    2
VD255       0
 IG232      1
   GR258    2
 IG235      1
   GR259    2

-> 所以 IG203 和 GR203 可以访问 VD254 数据

并且IG232、GR258、IG235、GR259可以接入VD255

有了这个,我所有的参考资料都与级别相关联(这里底部的用户是级别“0”)。

我希望我的 AUTHENTIFICATE table 像 :

 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 级时,所有下一个用户将在 RESTRICTION 中拥有 0 级的参考,直到循环看到另一个 0 级:

但我做不到:

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

非常感谢您的帮助!

我终于找到了层次结构不平衡的解决方案,这是我针对相同情况的人的代码:

HIERARCHY:
HierarchyBelongsTo(IDNOEUD, IDNOEUDPARENT, REFERENCE, TreeID, TreeName)
LOAD
REFERENCE,
IDNOEUD,
IDNOEUDPARENT,
Select
REFERENCE,
IDNOEUD,
IDNOEUDPARENT,
from HIERARCHYTABLE;
Trees:
LOAD
*,
Upper(TreeName) as PERMISSION,
REFERENCE as MYPERMISSIONFIELD // Field which is the filter
Resident HIERARCHY;
Drop Table HIERARCHY;

Section Access;
AUTH:
LOAD * INLINE [
ACCESS, USERID, PASSWORD, PERMISSION
ADMIN, ADMIN, ADMIN, * // To add the ADMIN !
];

AUTH:
LOAD
'USER' as ACCESS,
REFERENCE as USERID,
REFERENCE as PASSWORD,
UPPER(REFERENCE) as PERMISSION;
SELECT
REFERENCE
FROM HIERARCHYTABLE;

Section Application;

然后权限链接到所有的MYPERMISSIONFIELD。