1 Reply Latest reply on Oct 29, 2018 2:21 PM by Egor Larin

    Как отобразить график, данные для которого зависят от текущего пользователя?

    Alexey Bedonik

      Добрый день!

       

      1. Используется trusted authentication для авторизации пользователей.

      2. Имеется Sheet1 c графиком, данные для которого бурется из MySQL базы.

      3. График отображается на стороннем сайте с помощью JavaScript API (GET ${server}/trusted/${trustedTicket}/views/MyWorkbook/Sheet1?embed:=y)

       

       

      Подскажите пожалуйста, как можно заполнить текущий график данными в зависимости от пользователя который его запрашивает?

        • 1. Re: Как отобразить график, данные для которого зависят от текущего пользователя?
          Egor Larin

          Привет,

           

          Способов несколько.

          В любом из них, пользователь будет авторизован на Tableau Server, что даст возможности спуститься на row-level security.

          1. Передавать пользователя в том же url через фильтр, например, по стране:
            1. Таблицу соответствий можно хранить на стороне приложения или же внутри БД
            2. Для авторизованного пользователя будет присваиваться фильтр в URL
              1. Проблема - можно расковырять html и увидеть параметры по изменению фильтров
              2. filter parameter Parameters for Embed Code
              3. Example How do I send parameters through an embedded URL to sort data on worksheet?
          2. Использовать встроенные функции Tableau Server - User Filters & User Functions
            1. User Functions
              1. Сложить, например, страны в список в БД, затем в другом столбце сгруппировать пользователей, которые могут видеть данную страну (user1,user2,...) = Permissions
              2. JOIN таблицу доступов к основной по стране
              3. Сделать фильтр на график CONTAINS(Permissions,USERNAME())
                1. Тут могут быть небольшие проблемы по производительности, так как поиск будет по string. Надо смотреть
            2. User Filters
              1. Требует большого кол-ва кликов
          3. Использовать Initial SQL для пре авторизации пользователя при Live запросе
            1. В этом случае нужна будет функция в БД, которая в зависимости от авторизованного пользователя будет выплевывать данные
            2. Можно также засунуть INNER JOIN с данными и таблицей доступов. По идее, должно быстро выдавать на выходе только те строчки, которые доступны для данного пользователя

           

          Как-то так