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()