TABLEAU REST API: РУКОВОДСТВА ПО TABLEAU-API-LIB

Создание подписок Tableau для всех пользователей в группе с вызовами REST API

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

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

Проблема сводится к следующему: когда вы создаете подписку на группу в интерфейсе Tableau Server, она подписывается на всех членов группы как она существовала на тот момент. Если завтра в группу добавится новый пользователь, этот пользователь не будет подписан на контент. Таким образом, когда вы подписываете группу на визуализацию, вы действительно отправляете одноразовый запрос на подписку всех лиц, принадлежащих к группе на момент запроса.

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

В этом руководстве рассматривается использование пакета Python tableau-api-lib и является частью серии статей о том, как использовать Tableau Server как бочонок, предоставляя вам контроль над REST API Tableau Server.

В этих руководствах предполагается, что у вас уже установлен Python 3. Если у вас еще нет Python 3, это поможет вам начать: руководство по установке Python.

Установка сцены

По умолчанию Tableau Server позволяет создать подписку для всей группы. Однако при этом создаются подписки для каждого человека, принадлежащего к группе в данный момент времени, а не автоматически подписываются новички в группу.

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

Общая цель здесь — устранить необходимость вручную создавать подписки для новых пользователей. Конечным результатом того, что мы создаем здесь, является то, что всякий раз, когда код запускается, процесс идентифицирует всех пользователей в группе, которые еще не подписаны на наш целевой контент. Затем процесс создаст подписку для этих пользователей.

В конце статьи предоставляется сводный код шаблона, поэтому вам не нужно копировать и вставлять отдельные фрагменты по всей статье.

Шаг 1: убедитесь, что у вас установлена ​​tableau-api-lib

Даже если вы профессионал в этих руководствах, сделайте себе одолжение и скачайте последнюю версию библиотеки. Он регулярно обновляется.

pip install --upgrade tableau-api-lib

Новичок в этом Python? Не парься, быстро соберешься. Следуйте этой инструкции по началу работы. В этом руководстве вы узнаете, как подключиться к серверу Tableau с помощью tableau-api-lib.

Шаг 2: подключитесь к среде Tableau Server

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

from tableau_api_lib import TableauServerConnection
from tableau_api_lib.utils.querying import get_groups_dataframe,  get_users_dataframe, get_schedules_dataframe, get_subscriptions_dataframe

tableau_server_config = {
        'my_env': {
                'server': 'https://YourTableauServer.com',
                'api_version': '<YOUR_API_VERSION>',
                'username': '<YOUR_USERNAME>',
                'password': '<YOUR_PASSWORD>',
                'site_name': '<YOUR_SITE_NAME>',
                'site_url': '<YOUR_SITE_CONTENT_URL>'
        }
}

conn = TableauServerConnection(tableau_server_config, env='my_env')
conn.sign_in()

Забавный факт: вы также можете использовать токены личного доступа, если вы используете Tableau Server 2019.4 или новее. Если вы все о токенах доступа, ознакомьтесь с моей статьей для получения подробной информации о том, как их использовать.

Шаг 3: получите идентификатор группы, на которую вы будете подписываться

Добавляя к приведенному выше коду, теперь, когда мы установили соединение с сервером Tableau, давайте воспользуемся tableau-api-lib, чтобы предоставить нам удобный Pandas DataFrame, заполненный информацией о наших группах.

Если вам нужно взглянуть на свои группы, используйте эту строку кода:

groups_df = get_groups_dataframe(conn)
print(groups_df)

Вы можете использовать groups_df для извлечения идентификатора группы, для которой вы будете создавать подписки. Вот как выглядит мой:

Шаг 4: соберите другие данные для желаемой подписки

При создании подписки необходимо знать:

  1. Контент, на который вы подписываете людей (тип контента и идентификатор контента).
  2. Тема, на которую вы дадите подписку; это будет предоставляться вашим получателям каждый раз, когда они получают подписку.
  3. Расписание Tableau Server для запуска подписки.
  4. Пользователь/группа, на которую вы подписаны.

Если вам нужна помощь в определении используемого расписания, ознакомьтесь с учебным пособием получение сведений о расписании с помощью tableau-api-lib.

Шаг 4: получить пользователей, принадлежащих к выбранной группе

Теперь, когда мы знаем идентификатор группы, на которую хотим подписаться, давайте получим некоторые сведения о пользователях, принадлежащих к этой группе.

group_users_df = get_group_users_dataframe(conn, group_id=YOUR_GROUP_ID))

Для этого урока я создал группу под названием «Учебник по подписке». Вот как выглядит group_users_df с моей стороны:

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

Шаг 5: получите все существующие подписки

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

Чтобы определить, кому нужна подписка, а кому нет, нам понадобится информация о наших существующих подписках. Строка кода ниже будет получать информацию обо всех подписках на нашем сайте Tableau Server.

subscriptions_df = get_subscriptions_dataframe(conn)

В моей тестовой среде у меня не так много активных подписок. Вот как выглядит мой первоначальный subscriptions_df:

Хотите узнать больше о своих подписках? Погрузитесь в это руководство по получению сведений о подписке с сервера Tableau.

Шаг 6: определите функцию, которая может помечать повторяющиеся подписки

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

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

Вот функция, которую вы можете использовать в качестве шаблона для пометки, если подписка уже существует для пользователя. Не стесняйтесь адаптировать это, как вы считаете нужным. Если этот блок кода выглядит некрасиво, не связывайтесь с ним. Просто используйте суть GitHub в конце статьи.

def get_duplicate_subscriptions(subscriptions_df, subject, content_id, user_id):
    duplicates_query = f"subject == '{subject}' & content_id == '{content_id}' & user_id == '{user_id}'"
    duplicate_subscriptions = subscriptions_df.query(duplicates_query)
    return duplicate_subscriptions

Эта функция возвращает DataFrame, содержащий любые повторяющиеся подписки. В этом случае дублирующейся подпиской является любая подписка, удовлетворяющая следующим условиям:

  1. Тема та же, что и тема желаемой подписки.
  2. Идентификатор контента совпадает с идентификатором контента для нашей желаемой подписки.
  3. Идентификатор пользователя совпадает с идентификатором пользователя для нашей желаемой подписки.

Шаг 7: определите функцию, которая создает подписки

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

Эта функция возвращает список ответов, полученных от сервера Tableau после вызова API для создания каждой подписки.

Шаг 8: нажмите кнопку запуска

Теперь у нас есть все ингредиенты, необходимые для создания наших подписок. Давайте отправим эти подписки в духовку:

Если подписка успешно создана, вы получите код состояния 201 в своем ответе от сервера Tableau. Вот что я вижу, когда распечатываю список ответов, возвращаемых функцией create_unique_subscriptions:

Шаг 9: давайте добавим нового пользователя в группу, чтобы убедиться, что процесс работает

Я собираюсь добавить нового пользователя в группу, получающую эту подписку, а затем запустить все заново. Это смоделирует ситуацию, когда у нас есть сценарий, автоматически выполняющийся через регулярные промежутки времени. Ожидаемое поведение здесь заключается в том, что каждый раз, когда мы запускаем код, подписки будут создаваться только для пользователей, которые еще не подписаны.

Вот как выглядит моя группа сейчас (Fake User C — новичок):

После запуска кода вот мой список ответов сервера:

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

Завершение

Это делает это. Теперь у нас есть код, который позволит вам автоматически поддерживать подписку всех членов определенной группы на определенный контент.

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

Я надеюсь, что вы нашли это руководство полезным. Если у вас есть какие-либо вопросы об автоматизации вашей среды Tableau Server, свяжитесь с нами!

Как всегда, спасибо, что заглянули.

Сводный код

Используйте суть этого GitHub в качестве отправной точки для адаптации этого кода к вашим собственным рабочим процессам.