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

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

Преимущество использования библиотеки запросов Python и REST API Tableau Server заключается в том, что вы можете вводить новшества и создавать собственное приложение. Вы можете решить вывести поезд на шоссе, не попав в аварию.

В этой статье я научу вас, как использовать клиент Tableau Server для получения списка всех представлений рабочего листа Tableau. Я собираюсь использовать библиотеку Python сервер-клиент Tableau (TSC) для реализации этого решения.

Ниже приведен список вещей, которые мы собираемся сделать:

1. Аутентифицируйте наше приложение для подключения к серверу Tableau.

2. Получите список всех книг на сервере. Вы можете получить такую ​​информацию, как идентификатор, имя, идентификатор владельца книги сервера.

3. Получите все представления конкретной книги.

4. Заполните представления в виде файла CSV или PDF в зависимости от того, какой файл/формат вам нужен.

5. Сохраните эти представления как файл CSV/PDF.

Звучит круто, верно? Теперь приступим.

Прежде всего, нужно импортировать библиотеки Python, которые мы будем использовать. Нам нужен клиент Tableau Server (TSC) и Pandas. Давайте импортируем библиотеки в следующие две строки кода Python.

import tableauserverclient as TSC
import pandas as pd

Следующим шагом является предоставление наших учетных данных для подключения к серверу Tableau. Мы также предоставим конечную точку нашего сервера.

Шаг 1. Аутентифицируйте наше приложение для подключения к серверу Tableau.

tableau_auth = TSC.TableauAuth('EMAIL', 'Password', 'SiteName')
server = TSC.Server('https://prod-useast-a.online.tableau.com/')

Здесь мы пройдем аутентификацию на сервере таблицы и начнем работать с ресурсами рабочей книги.

request_options = TSC.RequestOptions(pagesize=1000)
with server.auth.sign_in(tableau_auth):

Шаг 2. Получите список всех книг на сервере.

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

all_workbooks_items, pagination_item = server.workbooks.get()
workbooks = [workbook.id for workbook in all_workbooks_items]

Следующие две строки кода выводят слово ________workbooks___________, а также выводят идентификатор всех рабочих книг.

print("________workbooks___________")
print(workbooks)

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

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

Шаг 3. Теперь давайте получим все представления конкретной книги.

for ids in workbooks:
workbookinfo = server.workbooks.get_by_id(ids)
print("\nThe views for {0}: ".format(workbookinfo.name))
viewsheets = [view.name for view in workbookinfo.views]
view_ids = [view.id for view in workbookinfo.views]
print(viewsheets)

Эта часть этого поста посвящена получению представлений книг в формате CSV. Мы собираемся заполнить представления как CSV; есть также возможность сделать это в формате PDF.

Давайте пройдемся по идентификаторам представлений и запишем представление в формате CSV; мы также можем проанализировать фильтр, используя req_options. Обратите внимание, что я установил значение «Нет».

Шаг 4. Следующим шагом является заполнение представлений в виде файлов CSV или PDF и сохранение файла в моем рабочем каталоге.

for view_id in view_ids:
#view_item = server.view.get_by_id('d79634e1-6063-4ec9-95ff-50acbf609ff5')
view_item = server.view.get_by_id(view_id)
server.views.populate_csv(view_item, req_options=None)
with open('./view_data.csv', 'wb') as f:
f.write(b''.join(view_item.csv))

Измените строки ниже, если вы хотите получить представление в формате pdf вместо CSV.

server.views.populate_pdf(view_item, req_options=None)
with open('./view_data.pdf', 'wb') as f:
f.write(view_item.pdf)

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

ViewItem будет списком всех представлений книг, и мы можем дополнительно заполнить представления в виде CSV-файла.

workbookview = server.workbooks.populate_views(workbookinfo)
print(workbookview)
server.auth.sign_out()

Обратите внимание, что заполнение представления в виде файла CSV хорошо работает, когда представление представляет собой кросс-таблицу, а заполнение представления в виде файла PDF в целом работает хорошо.

Ниже приведен полный код.

import tableauserverclient as TSC
import pandas as pd
tableau_auth = TSC.TableauAuth('XXXX', 'XXXXX', 'XXXXXX')
server = TSC.Server('https://prod-useast-a.online.tableau.com/')
request_options = TSC.RequestOptions(pagesize=1000)
with server.auth.sign_in(tableau_auth):
  all_workbooks_items, pagination_item = server.workbooks.get()
  workbooks = [workbook.id for workbook in all_workbooks_items]
  print("________workbooks___________")
  print(workbooks)
  for ids in workbooks:
    workbookinfo = server.workbooks.get_by_id(ids)
    print("\nThe views for {0}: ".format(workbookinfo.name))
    viewsheets = [view.name for view in workbookinfo.views]
    view_ids = [view.name for view in workbookinfo.views]
    print(viewsheets)
    for view_id in view_ids:
      #view_item = server.view.get_by_id('d79634e1-6063-4ec9-95ff-50acbf609ff5')
      view_item = server.view.get_by_id(view_id)
      server.views.populate_csv(view_item, req_options=None)
      with open('./view_data.csv', 'wb') as f:
       f.write(b''.join(view_item.csv))
  workbookview = server.workbooks.populate_views(workbookinfo)
  print(workbookview)
server.auth.sign_out()

И это обертка. Мы успешно загрузили представления рабочего листа Tableau в виде файла CSV с помощью REST API. Если вам понравился этот пост, хлопните в ладоши и поделитесь им с друзьями.