|
|
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Добрый день. куб на основе табличной модели SQL 2016. в нем таблицы "Продажи" - ссылка/связь с таблицей торговых объектов, сумма продажи, "Торговые объекты" - код торгового объекта ID, название "ПользовательТорговыйОбъект" - код пользователя Olap_UserID, код торгового объекта SkdID (связан с торговыми объектами) код пользователя передается в строке подключения через CustomData, если бы пользователь имел доступ только к одному торговому объекту, то в роли можно прописать для таблицы "Торговые объекты" формулу DAX: ='Торговые объекты'[ID]=LOOKUPVALUE('ПользовательТорговыйОбъект'[SkdID];'ПользовательТорговыйОбъект'[Olap_UserID];CUSTOMDATA()) но, к сожалению, пользователь имеет доступ более чем к одному торговому объекту ... как в данном случае отфильтровать по пользователю в таблице 'Торговые объекты' пока не знаю. Может подскажете, какую функцию использовать можно? С уважением, Сергей Кургузов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2017, 18:02 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Доброе утро. Может сумбурно написал ... Чуть по-другому: в модели есть таблицы: продажи, торговые объекты, пользователи и таблица связи торговых объектов с пользователями (ключ пользователя, ключ объекта). В таблице продаж есть ссылка на торговые объекты. В модели есть связь по коду торгового объекта между продажами и торговыми объектами и между торговыми объектами и таблицей связи. Также связаны таблица пользователей и таблица связей по ключу пользователя. Реально ли по ключу пользователя через таблицу связи отфильтровать в таблице торговых объектов записи? С уважением, Сергей Кургузов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 07:35 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
кончено реально, в чем проблема поставить фильтр по пользователю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 11:08 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Замените функцию LOOKUPVALUE(..) на CONTAINS(..) шустрее работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 11:43 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
т.е. если в таблице пользователей поставлю фильтр по пользователю, то в продажах должен сработать фильтр по тем аптекам, которые к пользователю привязаны? Сейчас схема в модели такая: продажи связаны с торговыми объектами, торговые объекты связаны с пользователями через таблицу связей. Если я ставлю фильтр в таблице пользователей, то по этой цепочке сработает фильтр, даже если нет прямой связи продаж с пользователями? Задаю вопрос, потому что не получилось так сделать (может криво что у меня ...) С уважением, Сергей Кургузов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 11:52 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
картинку покажите, что и как у вас связано, какая связь используется, какой объект нужно фильтровать по пользователю? В вашем исходном примере, фильтрация накладывается на измерение 'Торговые объекты', но если пользователь не выберет атрибут из этого измерения, то он увидит все из таблицы фактов (если связь конечно между Фактами и 'Торговые объекты' не двунаправленная) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 11:58 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
в приложении картинка с таблицами и связями между ними. По этой схеме я хотел сделать так, чтобы на таблицу "Торговые объекты" накладывался фильтр в зависимости от того, какие торговые объекты связаны с конкретным пользователем. т.е. пользователь входит в систему, в строке подключения в CUSTOMDATA передается значение поля "Account". По этому значению нахожу все торговые объекты (Formacie_ID) в таблице Fact_OlapFarmFilter и по ним фильтрую таблицу "Торговые объекты". А в таблице продажи уже фильтр автоматом установится по ее связи с таблицей торговых объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 12:27 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
а это связи между таблицами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 12:28 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Нет в наличие подходящего проекта для теста... Фильтр измерения "Торговые объекты": Код: sql 1. 2. 3. 4. 5. отпишитесь по результату теста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 12:46 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
IDVT, спасибо за помощь. Поправил формулу согласно реальным названиям, ошибок в ней нет, но не фильтрует. В профайлере пишет: Произошла ошибка при вычислении выражения безопасности уровня строки, определенного в таблице "Торговые объекты". Сообщение об ошибке: Возникло непредвиденное исключение. С уважением, Сергей Кургузов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 15:20 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
CONTAINS возвращает true или false, а мне же нужен набор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 15:26 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
тут может как-то можно функцию Filter прикрутить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 15:31 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Таблицы "Fact_OlapFarmFilter" и "Торговые объекты" связаны по атрибуту [Formacie_ID]? Если все верно, тогда остается только: LookupValue() т.к. он не учитывает связи, в отличие от Contains или сделать двунаправленную связь между "Fact_OlapFarmFilter" и "Торговые объекты" (разумеется если это не противоречит Вашей модели) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 16:09 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Таблицы "Fact_OlapPharmFilter" и "Торговые объекты" связаны по атрибуту [Farmacie_ID] - в первой таблице и [ID] - во второй. Они по разному называются. Формулу я правильно переписал, поправил названия , как в модели LookupValue() вроде возвращает всего одно значение (из описания - "... если result_column возвращает различные значения, возвращается ошибка. ") или ошибаюсь? Просто один пользователь связан более чем с одним торговым объектом, ошибку вернет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 16:28 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Сергей КургузовLookupValue() вроде возвращает всего одно значение Да все верно. CONTAINS возвращает TRUE для тех строк, которые удовлетворяют условию (оно же выражение) В профайлере пишет: Произошла ошибка при вычислении выражения безопасности уровня строки, определенного в таблице "Торговые объекты". Сообщение об ошибке: Возникло непредвиденное исключение. У Вас типичная модель ManyToMany между тремя измерениями, сделайте двунапрвленную связь между измерением "Fact_OlapFarmFilter" и "Торговые объекты" и проверьте еще раз алгоритм с Contains. Хотя мне кажется где то в ключевых полях ошиблись (в самой формуле) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 16:55 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Сергей Кургузов, В вашей модели динамичекие права можно задать 2 способами: 1. Фильтр к таблице Торговые объекты Код: sql 1. 2. 3. 4. 5. 6. 7. В этом случае связь между 'Торговые объекты' и 'ПользовательТорговыйОбъект' не нужна 2. Фильр к таблице ПользовательТорговыйОбъект Код: sql 1. 2. 3. 4. 5. ну или если таблица 'ПользовательТорговыйОбъект' связана с таблицей Users можно просто сделать фильтр в таблице Users Код: sql 1. При этом между таблицами 'Торговые объекты' и 'ПользовательТорговыйОбъект' в связи должно быть: Filter Direction: To Both Tables И флаг "apply the filter direction when using row level" должен стоять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 17:51 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
mbabkin, Несколько запутался в ваших наименованиях полей Скрипты такие Код: sql 1. 2. 3. 4. 5. 6. 7. Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 17:56 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
mbabkin, спасибо попробую и такой вариант. IDVT спасибо сделал двунаправленную связь между торговыми объектами и таблицей связи, формула в фильтре строк такая: =Contains( 'Fact_OlapPharmFilter' , 'Fact_OlapPharmFilter'[Account] , CustomData() , 'Fact_OlapPharmFilter'[Farmacie_ID] , 'Торговые объекты'[ID] ) заработало. но медленнее гораздо выборка идет по сравнению с вариантом без этого фильтра ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2017, 18:20 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Разумеется будут потери в скорости, Вы же видите в Profiler что происходит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2017, 08:10 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Добрый день. В продолжение темы сделал в роли фильтр на таблице OlapUsers = OlapUsers[Account] = CUSTOMDATA() Работает. Решил немного прооптимизировать - для пользователей из предопределенной роли (у которых доступ ко всему) не делать фильтр. Вторую роль не получится сделать, так как с сайта все заходят под одной внутренней учеткой. В связи с этим вопрос - можно наложить фильтр в роли только при выполнении какого-то условия? Например, что можно написать в последнем аргументе формулы (где сейчас "не применять фильтр') для таблицы OlapUsers в роли, чтобы данный фильтр не применялся, как будто в поле фильтра пусто, если значение поля "RoleId" равно '4daa869e-9b24-4dbe-ac82-01b2a9373153': Код: sql 1. 2. С уважением, Сергей Кургузов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2017, 15:59 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
вроде функция ALL возвращает все строки таблицы, но как ее использовать в данном контексте, не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2017, 16:15 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Сергей Кургузов, TRUE() попробуйте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2017, 08:12 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Для таблицы 'OlapUsers'... Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2017, 09:09 |
|
||
|
Динамические права в табличной модели
|
|||
|---|---|---|---|
|
#18+
Что-то избыточно, утро, поспешил... =) Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2017, 12:37 |
|
||
|
|

start [/forum/topic.php?fid=49&fpage=32&tid=1858272]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 172ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...