Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
snumric7
Contributor III
Contributor III

Организовать SECTION APPLICATION с условием или

В правах доступа для пользователя прописано
acc.PERIOD, acc.BRANCH и acc.CODE

В данных поля
dat.PERIOD, dat.SRC_BRANCH, dat.DEST_BRANCH, dat.SRC_CODE, dat.DEST_CODE

Как организовать SECTION APPLICATION доступ, чтобы был доступ ко всем записям
acc.PERIOD=dat.PERIOD and
(acc.BRANCH = dat.SRC_BRANCH or acc.BRANCH = dat.DEST_BRANCH)
and
(acc.CODE = dat.SRC_CODE or acc.CODE = DEST_CODE)

1 Solution

Accepted Solutions
snumric7
Contributor III
Contributor III
Author

Склеил поля прав Подразделение&'$'& ТовГруппа и дважды пробежался по фактам сначала с одной стороны, потому с другой. Получил для каждого пользователя список фактических ключей Подразделение1&'$'& ТовГруппа1&'$'&Подразделение2&'$'& ТовГруппа2. Затем склейку заменил autohash256 и mapping, чтобы покороче ключ был.

View solution in original post

5 Replies
stantrolav
Partner - Creator II
Partner - Creator II

Не очень понятно описано. Если вопрос ещё актуален, то напишите как-то иначе. Фишка таблицы, формируемой в секции доступа SECTION ACCESS в том, что поля должны называться (заголовки полей) в верхнем регистре. В секции приложения должно быть поле, которое будет загружено в секции доступа.

Тот есть, по этапам:

1. Формируем секцию доступа с полями USER, ACCESS и KEYFIELD. Поле KEYFIELD формируем из загружаемых данных.

2. Формируем массив данных в секции приложения, где так же будет поле KEYFIELD.

При проектировании можете в начале без секции доступа сформировать таблицу SectionAccess и убедиться через фильтрацию по ней, что данные фильтруются как задумано. Потом эту таблицу выносим в скрипте загрузки в Section Access и всё будет работать.

snumric7
Contributor III
Contributor III
Author

Попробую перефразировать

Есть в БД табличка с правами доступа

USER PERIOD BRANCH CODE

Иванов 2016.1  Подразделение3 ТовГруппа2

Петров 2016.1  Подразделение2 ТовГруппа1

Сидоров 2017.1  Подразделение3 ТовГруппа1

Есть таблица фактов

RMN PERIOD SRC_BRANCH SRC_CODE DEST_BRANCH DEST_CODE SUM

1   2016.1   Подразделение3   ТовГруппа2   Подразделение1   ТовГруппа3   100

2   2016.1   Подразделение2   ТовГруппа1   Подразделение3   ТовГруппа2   150

3   2016.1   Подразделение2   ТовГруппа2   Подразделение1   ТовГруппа3    50

4   2017.1   Подразделение1   ТовГруппа2   Подразделение2   ТовГруппа4   120

5   2017.1   Подразделение2   ТовГруппа1   Подразделение3   ТовГруппа2    110

6   2017.1   Подразделение2   ТовГруппа2   Подразделение3   ТовГруппа1    350

Соответственно на факты для пользователя должна наложиться маска прав

USER PERIOD BRANCH CODE

Иванов увидит строки 1, 2

Петров увидит строку 1

Сидоров увидит строку 6

Vasiliy_Beshentsev
Creator III
Creator III

Иван, привет.

Ты хочешь, чтобы у тебя пользователи получали доступ в зависимости от 2 полей.

Но section access, как я понимаю предоставляет доступ только по одному полю.

Если у тебя есть доступ к таблице фактов, и она у тебя загружается из sql-запроса, то я бы посоветовал воспользоваться оконными функциями, что позволит тебе для каждой комбинации Подразделение-ТовГруппа задать некое соответствие. Можно попробовать использовать rank() over (partition by Подразделение, ТовГруппа)  as КодДоступа (или как-то так, надо смотреть что на выходе получится). И потом по этому полю уже выдавать доступы.

snumric7
Contributor III
Contributor III
Author

Склеил поля прав Подразделение&'$'& ТовГруппа и дважды пробежался по фактам сначала с одной стороны, потому с другой. Получил для каждого пользователя список фактических ключей Подразделение1&'$'& ТовГруппа1&'$'&Подразделение2&'$'& ТовГруппа2. Затем склейку заменил autohash256 и mapping, чтобы покороче ключ был.

Vasiliy_Beshentsev
Creator III
Creator III

Иван, если задача решена, пометь один из постов в топике как правильный.