Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
igor-st80
Contributor III
Contributor III

Как разграничить доступ пользователя к данным?

Привет, коллеги!

Можно ли в QV разграничить доступ пользователей к данным подобным образом:

Например: есть данные о продажах товаров с показателями выручка и себестоимость.

Задача состоит в том что бы для определенных товаров пользователь мог видеть все показатели (выручка, себестоимость), а по всем остальным товарам ему была бы доступна только выручка.

у каждого пользователя свой набор товаров, для которых доступны все показатели.

Есть какие-либо решения или идеи?

Спасибо.

23 Replies
konkoviv
Partner - Contributor
Partner - Contributor

Много ли таких пользователей с группами товаров?  Имеется ли  Publisher  в поставке?  Вообще два варианта решения этой задачи:

1. Publisher( если имеется)

2.   Section Access

Если все данные тянутся из учетной системы где права уже распределены между менеджерами, можно попробовать подружить  Qlik с правами данной системы.

Sergey_Polekhin
Employee
Employee

1. Согласен, что выбранный подход будет зависеть от объема данных, количества пользователей и имеющихся компонентов в составе решения: Section Access, Publisher или обоих вместе.

2. Полагаю, что помимо вопроса "нарезки данных" средствами Section Access или Publisher, в приложении нужно учитывать некоторую специфику задачи:

а) Дело в том, что "нарезка данных" в QlikView выполняется не по таблицам, а в рамках всего множества данных во всей ассоциативной модели. В итоге, если "в лоб" указать список товарных групп, на которые у пользователя доступ должен отсутсвовать/присутствовать, то нужно учитывать, что QlikView вырежет из модели не только себестоимости по товарным группам, но и всю остальную информацию, связанную с этими группами.

б) С учетом предыдущего подпункта, средствами Publisher потребуется нарезка индивидуальных наборов данных для каждого пользователя, т.е. потребуется создание индивидуальных приложений

в) При использовании Section Access, потребуется загружать данные по себестоимостям в отдельную, несвязанную с другими данными таблицу в рамках одного приложения и применять секционирование доступа именно к этой таблице. А для отображения доступных для пользователя данных потребуется описание набора в виде функции Set-Analysis, отбирающей данные для визуализации в объекты QlikView (таблицы, диаграммы, текстовые объекты и т.п.) на основе какого-то выбранного критерия, например, идентификатора товарной группы.

Понимаю, что в моих объяснениях много текста который, возможно, сложно воспринять без конкретного примера. Поэтому если потребуется наглядный пример, то пришлите пример исходного набора данных. Попробуем сделать демонстрационный пример.

qlikviewaito
Contributor II
Contributor II

А если  через переменные? В таблицу с товарами и пользователями добавить доп. флаг для каждого показателя. А далее

set vCost = if(costFlag=1,себестоимость, 0), а в формулах использовать как  sum(vCost).

Sergey_Polekhin
Employee
Employee

Вопрос лишь в том, на каком уровне требуется обеспечить безопасность.

Если мы говорим о разграничении доступа только на уровне визуализации, то предложенный вариант с формулами подойдет. Если же мы говорим о реальной безопасности, когда пользователь не просто не видит в данный момент данных, а принципиально не может их увидеть, то их необходимо ограничивать средствами Publisher, Section Access или обоими инструментами сразу.

Eugeny_Ilyin
Creator II
Creator II

Пока непонятна схема данных, сложно сказать насколько реализуема эта задача на практике.
Если использовать флаг в таблице доступа и в файлах данных, то теоретически приложение должно обрезаться для каждого пользователя. Здесь возникнет сложность в генерации значений этих флагов.
Использование переменных может сказаться на производительности, та же обрезка только во всем массиве данных. И сокрытие идет только в объектах, что мешает сделать новую таблицу со всем данными?
Можно взять пример из хелпа и развить его:

load * inline [
ACCESS, USERID,REDUCTION, OMIT
ADMIN, ADMIN,*,
USER, A,1
USER, B, 2,NUM
USER, C, 3, ALPHA
];

section application;
T1:
load *,
NUM AS REDUCTION;
load
Chr(RecNo()+ord('A')-1) AS ALPHA,
RecNo() AS NUM
AUTOGENERATE 3;
qlikviewaito
Contributor II
Contributor II

OMIT скроет полностью поле себестоимость, а из описания нужно скрыть значения по некоторым позициям.

Поправьте меня, если я ошибаюсь.

igor-st80
Contributor III
Contributor III
Author

Всего 10 пользователей, для которых необходимы такие ограничения. и около 800 товаров.

Publisher не имеется

Eugeny_Ilyin
Creator II
Creator II

Наталья, в примере OMIT показан в комплексе с сокрытием по значению поля REDUCTION.
Идея такова, что для каждой записи справочника товара должен быть флаг доступа, по которому совершается очистка при открытии определенным юзером.

Как это будет работать в практике на разветвленной модели данных - интересно было бы посмотреть.

Поэтому предлагаю заинтересованному автору темы сделать простенький прототип на 10 товаров.

А что касается полей, то всегда можно создать поля-дубликаты по условиям, только это не совсем красиво.

igor-st80
Contributor III
Contributor III
Author

Спасибо всем за советы! Буду пробовать и тестировать предложенные варианты. По результатам отпишусь.