Как вы все знаете, Tableau предоставляет отличные возможности визуализации для бизнеса и операционных данных внутри компании.

Tableau также предоставляет возможности для естественного подключения к внешним службам, которые имеют строгий тип и управляются метаданными, например, XML-документы, службы OData и т. д.

Для REST API, которые не публикуют метаданные и определения типов, Tableau не знает, как интерпретировать типы данных (возможно, в будущем Tableau будет читать swagger, RAML или blueprint).

Прежде всего, у Tableau есть 2 проблемы, которые необходимо преодолеть, когда речь идет об общих REST API.

  1. Tableau не умеет интерпретировать типы данных
  2. Tableau не понимает иерархическую структуру (нужны внутренние типы данных таблицы)

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

Tableau предоставляет SDK, который по сути представляет собой SDK на основе javascript (typescript).

Беглый взгляд на модули узла, которые он загружает в производственном режиме, в первую очередь это Http-сервер, cors-сервер и реактивные компоненты для его симулятора (о которых мы поговорим чуть позже).

Вот что нам нужно сделать, чтобы REST API использовал Tableau:

  1. Создайте HTML-форму параметра (HTML) и обработчик формы (javascript)
  2. Реализовать 2 функции сценария Java (getSchema и getData)

Форма параметра

Форма параметров позволяет пользователям отчетов передавать фильтры или бизнес-параметры в конечную точку REST. Это здорово, потому что даже собственное соединение OData не поддерживает эту функцию (мы могли бы жестко закодировать URL-адрес сервера). Это одно из преимуществ использования WDC даже для API-интерфейсов OData вместо использования собственного подключения!

Это обеспечивает полную гибкость для пользователя отчета для сбора необходимых параметров. Образец формы параметра ниже (вы можете написать настолько сложную форму, насколько это необходимо). Пример HTML-формы ниже.

Обработчик формы

После того, как вы создадите форму со всеми параметрами, которые хотите захватить, напишите обработчик формы и сохраните данные во фрагменте JSON и прикрепите его к внутреннему объекту Tableau — tableau.connectiondata (это важный шаг) — см. строку 13 в этот код ниже.

Затем мы реализуем 2 метода (могут быть в одном файле) — примеры Tableau WDC реализуют весь код javascript в файле и форму в одном HTML-файле. Tableau рекомендует использовать аналогичную структуру.

Вот отличный ресурс Tableau с конференции 2018 года:

Вот и все!

Подводя итог, вам необходимо запустить Tableau WDC SDK, следуя инструкциям из — http://tableau.github.io/webdataconnector/docs/

Создайте 1 файл HTML-формы и 1 файл JavaScript с 2 функциями и 1 обработчиком действий формы.

Я использовал следующую веб-службу OData для этого https://services.odata.org/TripPinRESTierService/People.

Пожалуйста, найдите соответствующий код в моей папке git: https://github.com/sureshkvn/samplejson

Симулятор Tableau WDC

Это отличный инструмент, который поставляется с конечной точкой SDK и /simulator, когда вы запускаете SDK, следуя приведенным выше инструкциям.

Симулятор позволяет сделать следующее:

  1. Запустите форму HTML и код JavaScript, следуя жизненному циклу Tableau WDC (http://tableau.github.io/webdataconnector/assets/wdc_flow.png)
  2. Отладьте любые проблемы с помощью кодов ошибок симулятора, и вы также можете использовать инструменты Chrome Dev во время разработки (см. Ниже)

Хорошо, теперь, когда у нас есть WDC, доступный для списка сотрудников в моем примере, мы готовы использовать его в моем отчете Tableau и опубликовать его.

Один извлеченный урок:

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

Ниже я проверяю, имеет ли конкретный элемент массива значение Null в разделе AddressInfo ответа JSON.

if (feat[i].AddressInfo[0] == null) {
City = "N/A";
} else {
City = feat[i].AddressInfo[0].City.Name;
}

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

Другие интересные вещи, которые я нашел:

  1. Вы можете запросить API и зарегистрировать (getSchema) и заполнить (getData) несколько таблиц в Tableau — примерами могут быть иерархические данные JSON.
  2. Вы можете запросить 2 разные конечные точки и объединить данные в WDC, чтобы заполнить сводную таблицу для использования в отчете Tableau.
  3. Вы можете запросить REST API, OData API и любую комбинацию, чтобы создать свой набор данных таблицы.

Развертывание

Точка при развертывании. Поскольку вы собираетесь развернуть это на веб-сервере (за пределами ваших сервисов таблиц), вы можете сделать следующее:

  1. Отключить доступ к симулятору для конечных пользователей
  2. Используйте CORS по мере необходимости (он уже встроен) — я показал в своем примере, как прокси работает на порту: 8889.
  3. Разверните соединители WDC вместе с REST API (уменьшите задержку в сети) — если у вас есть контроль над развертыванием REST API.
  4. Рассмотрите дополнительные инструменты, отправляя запросы через смарт-прокси (посланник).

Удачных отчетов Tableau!