【问题标题】:While inside LOAD / Section Access in Qlikview在 Qlikview 的 LOAD/Section Access 内部时
【发布时间】: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


    【解决方案1】:

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

    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;
    

    那么PERMISSION就链接到所有的MYPERMISSIONFIELD了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多