TABLEAU REST API: Учебники по TABLEAU-API-LIB

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

Создание таблицы статистики использования Tableau с помощью Pandas DataFrames

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

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

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

Подготовка сцены

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

Объединение этой информации в действенный набор данных может быть утомительным. Есть способы получить эту информацию с помощью внутренней базы данных PostgreSQL Tableau, но она часто не так легко доступна, как REST API Tableau Server.

Дополнительная причина для использования REST API заключается в том, что если вы установили соединение с REST API, вы также можете использовать API метаданных Tableau. Имея небольшое ноу-хау, вы можете объединить возможности обоих и создать чрезвычайно ценные наборы данных для анализа среды Tableau Server.

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

Тогда перейдем к делу.

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

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

В противном случае, если вы хорошо разбираетесь в Python, вы можете

pip install --upgrade tableau-api-lib

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

Шаг 2: (необязательно)

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

Следующие шаги проведут вас через процесс, по одному небольшому блоку кода за раз, с пояснениями.

Шаг 3: установите соединение с вашим Tableau Server

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

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

Служебные функции запросов get_xyz_dataframe предоставят нам Pandas DataFrames для наших представлений, рабочих книг и проектов. Служебная функция «flatten_dict_column» предоставляет простой метод распаковки вложенных словарных статей в этих объектах DataFrame.

from tableau_api_lib import TableauServerConnection
from tableau_api_lib.utils.querying import get_views_dataframe, get_workbooks_dataframe, get_projects_dataframe
from tableau_api_lib.utils import flatten_dict_column
tableau_server_config = {
        'tableau_prod': {
                '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)
conn.sign_in()

Объект «conn» - это ваше соединение с Tableau Server. На следующих этапах мы будем использовать его для взаимодействия с Tableau Server, и он будет средством, с помощью которого мы извлекаем различные фрагменты информации, которые нам нужны.

Шаг 4. Получите данные для всех просмотров на вашем сайте

Пришло время получить данные для всех представлений на вашем сайте и сохранить их в Pandas DataFrame.

views_df = get_views_dataframe(conn)

В «views_df» есть столбец с именем «workbook», который представляет собой dict, содержащий некоторую информацию о книге, к которой принадлежит каждое представление. Мы хотим распаковать это, потому что он предоставит нам идентификаторы книг, связанные с каждой книгой. Получив эту информацию, мы сможем объединить данные наших представлений и книг на более позднем этапе. Запустите следующую строку кода.

views_df = flatten_dict_column(df=views_df, keys=['tags', 'id'], col_name='workbook')

Теперь у нас есть все данные, необходимые для нашего представления DataFrame. Давайте подрежем часть жира, оставив только те столбцы, которые нам действительно нужны. Мы будем хранить эти данные в новом фрейме данных с именем «simple_views_df».

Мы также собираемся переименовать столбцы, потому что все наши представления, книги и проекты DataFrames будут иметь совпадающие имена: «id» и «name». Мы собираемся указать новые имена столбцов, чтобы упорядочить их по мере прохождения каждого шага.

simple_views_df = views_df[['name', 'id', 'workbook_id', 'usage_totalViewCount']]
simple_views_df.columns = ['view_name', 'view_id', 'workbook_id', 'usage_totalViewCount']

Ваш файл "simpleified_views_df" теперь будет выглядеть так, как показано на изображении ниже.

Шаг 5: извлеките данные для всех книг на вашем сайте

Затем мы извлекаем данные для всех книг на вашем сайте и сохраняем их в Pandas DataFrame. Этот процесс очень похож на то, что мы только что сделали для просмотров. Позже мы объединим оба DataFrames, что даст нам возможность анализировать общую статистику использования наших представлений и рабочих книг (и, в качестве бонуса, наших проектов!).

workbooks_df = get_workbooks_dataframe(conn)[['project', 'name', 'id']]
workbooks_df = flatten_dict_column(workbooks_df, keys=['name', 'id'], col_name='project')
workbooks_df.columns = ['workbook_name', 'workbook_id', 'project_name', 'project_id']

Обратите внимание, что для DataFrame наших рабочих книг мы распаковываем столбец с именем «проект». Этот столбец представляет собой указатель, содержащий имена проектов и идентификаторы проектов, которые являются двумя важными частями информации, к которым мы хотим получить доступ, чтобы легко идентифицировать проекты, в которых существуют наши рабочие книги и представления.

«Workbooks_df» будет выглядеть примерно так, как показано на изображении ниже.

Давайте возьмем мрачный момент, чтобы полюбоваться тем, насколько прекрасны (вы слышите мой сарказм?) Моя рабочая тетрадь и имена представлений. Кто-нибудь, пожалуйста, отправьте мысли и молитвы любому производственному серверу - и пользователям Tableau - если он заполнен такими именами.

Шаг 6: объедините DataFrames представлений и книг

Теперь, когда у нас есть данные для наших представлений и книг, давайте объединим их вместе. Здесь очень пригодятся Pandas DataFrames - к ним очень легко присоединиться. Я предпочитаю использовать метод «слияния», как вы увидите в блоке кода ниже.

views_and_workbooks_df = simple_views_df.merge(workbooks_df, how='left', left_on='workbook_id', right_on='workbook_id')

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

Шаг 7: выведите табличные данные в файл

Теперь вы можете вывести объединенные данные в файл. Это просто, потому что наши данные хранятся в Pandas DataFrames.

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

col_order = ['project_name', 'project_id', 'workbook_name', 'workbook_id', 'view_name', 'view_id', 'usage_totalViewCount']

Для файла CSV:

views_and_workbooks_df[col_order].to_csv('view_and_workbook_viewCounts.csv', index=False)

Файл будет размещен в любом вашем рабочем каталоге. Если вы используете записную книжку Jupyter, файл будет помещен в тот же каталог, в котором находится ваша записная книжка. Вы можете использовать легендарную библиотеку ОС, чтобы настроить расположение файла.

Обратите внимание, что «index = False» означает, что в итоговом файле не будет столбца с числовым индексом. Это личное предпочтение.

Для любого другого формата файла / вывода ознакомьтесь с различными типами файлов, которые Pandas может выводить в документации Pandas DataFrame. Если вы хотите вставить эти данные в виде таблицы в базу данных, есть способы сделать это. Я рекомендую изучить SQLAlchemy, если вы пойдете по этому пути.

На изображении ниже показан мой последний CSV-файл.

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

Шаг 8: закройте цикл подключения к серверу Tableau

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

conn.sign_out()

Вот и все, готово!

Обращайтесь, если у вас есть какие-либо вопросы об автоматизации REST API Tableau Server.

Консолидированные блоки кода (для удобного копирования / вставки)

from tableau_api_lib import TableauServerConnection
from tableau_api_lib.utils.querying import get_views_dataframe, get_workbooks_dataframe, get_projects_dataframe
from tableau_api_lib.utils import flatten_dict_column
tableau_server_config = {
        'tableau_prod': {
                '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)
conn.sign_in()
views_df = get_views_dataframe(conn)
views_df = flatten_dict_column(df=views_df, keys=['tags', 'id'], col_name='workbook')
simple_views_df = views_df[['name', 'id', 'workbook_id', 'usage_totalViewCount']]
simple_views_df.columns = ['view_name', 'view_id', 'workbook_id', 'usage_totalViewCount']
workbooks_df = get_workbooks_dataframe(conn)[['project', 'name', 'id']]
workbooks_df = flatten_dict_column(workbooks_df, keys=['name', 'id'], col_name='project')
workbooks_df.columns = ['workbook_name', 'workbook_id', 'project_name', 'project_id']
views_and_workbooks_df = simple_views_df.merge(workbooks_df, how='left', left_on='workbook_id', right_on='workbook_id')
col_order = ['project_name', 'project_id', 'workbook_name', 'workbook_id', 'view_name', 'view_id', 'usage_totalViewCount']
views_and_workbooks_df[col_order].to_csv('view_and_workbook_viewCounts.csv', index=False)
conn.sign_out()