Integrations
26.1 25.2
26.1 25.2 Spanish English

Tableau

1. Introduction

The Tableau connector allows Anjana to discover and catalog the workbooks of a Tableau site, organized in the site → projects → workbooks hierarchy. Each connection configured in the plugin works on a single Tableau site.

  • Discovery: the plugin presents the user with the configured site and, within it, the projects with the workbooks they contain. Only workbooks that belong to a project are listed.

  • Metadata extraction: when a workbook is selected, the plugin retrieves its metadata (identifiers, project, container, owner, description, creation and modification dates, and tags) along with the configuration of the site it belongs to.

The connector is compatible with Tableau Server and Tableau Cloud; the steps specific to each are indicated in the Technical and Connectivity sections.

The plugin is read-only: it does not create, modify or delete content in Tableau.

2. Integration with Anjana

The plugin generates the following metadata for each workbook. The attributes must be created in Anjana with the same name shown in the «Field name» column so that they appear in the object template. It is recommended to create a specific WORKBOOK entity subtype, and to group the site metadata in its own section of the template.

2.1 Internal metadata

Fields whose value comes from the extraction request or from the plugin configuration, not from the Tableau API.

Field name

Description

Attribute type

infrastructure

Infrastructure selected during extraction

SELECT

technology

Technology selected during extraction

SELECT

zone

Zone selected during extraction

SELECT

path

Workbook path as received in the input body, in the format siteContentUrl/project/workbook

INPUT_TEXT

2.2 Site metadata

Field name

Description

Attribute type

siteName

Site name

INPUT_TEXT

siteId

Site identifier

INPUT_TEXT

siteContentUrl

Site content URL

INPUT_TEXT

siteAdminMode

Site content administration mode

INPUT_TEXT

siteRevisionHistoryEnabled

Revision history enabled

INPUT_CHECKBOX

siteDisableSubscriptions

Subscriptions disabled

INPUT_CHECKBOX

siteState

Site state

INPUT_TEXT

siteRevisionLimit

Maximum number of revisions retained

INPUT_NUMBER

siteSubscribeOthersEnabled

Allows subscribing other users

INPUT_CHECKBOX

siteAllowSubscriptionAttachments

Allows attachments in subscriptions

INPUT_CHECKBOX

siteGuestAccessEnabled

Guest access enabled

INPUT_CHECKBOX

siteCacheWarmupEnabled

Cache warmup enabled

INPUT_CHECKBOX

siteDataAlertsEnabled

Data alerts enabled

INPUT_CHECKBOX

siteCommentingEnabled

Commenting enabled

INPUT_CHECKBOX

siteCommentingMentionsEnabled

Mentions in comments enabled

INPUT_CHECKBOX

siteFlowsEnabled

Flows enabled

INPUT_CHECKBOX

siteEditingFlowsEnabled

Flow editing enabled

INPUT_CHECKBOX

siteSchedulingFlowsEnabled

Flow scheduling enabled

INPUT_CHECKBOX

siteExplainDataEnabled

Explain Data enabled

INPUT_CHECKBOX

siteExtractEncryptionMode

Extract encryption mode

INPUT_TEXT

siteCatalogingEnabled

Cataloging enabled

INPUT_CHECKBOX

siteDerivedPermissionsEnabled

Derived permissions enabled

INPUT_CHECKBOX

siteWebExtractionEnabled

Web extraction enabled

INPUT_CHECKBOX

siteAskDataMode

Ask Data mode

INPUT_TEXT

siteRunNowEnabled

Immediate execution (Run Now) enabled

INPUT_CHECKBOX

siteUserVisibilityMode

User visibility mode

INPUT_TEXT

siteRequestAccessEnabled

Access requests enabled

INPUT_CHECKBOX

siteAuthoringEnabled

Web editing (authoring) enabled

INPUT_CHECKBOX

siteCustomSubscriptionEmailEnabled

Custom subscription email enabled

INPUT_CHECKBOX

siteCustomSubscriptionFooterEnabled

Custom subscription footer enabled

INPUT_CHECKBOX

siteNamedSharingEnabled

Named sharing enabled

INPUT_CHECKBOX

siteUseDefaultTimeZone

Site default time zone

INPUT_CHECKBOX

siteSelfServiceScheduleForRefreshEnabled

Self-service refresh scheduling enabled

INPUT_CHECKBOX

siteAutoSuspendRefreshEnabled

Automatic refresh suspension enabled

INPUT_CHECKBOX

siteAutoSuspendRefreshInactivityWindow

Inactivity window for automatic refresh suspension

INPUT_NUMBER

sitePersonalSpaceEnabled

Personal space enabled

INPUT_CHECKBOX

sitePersonalSpaceStorageQuota

Personal space storage quota

INPUT_NUMBER

siteDqwSubscriptionsEnabled

DQW subscriptions enabled

INPUT_CHECKBOX

2.3 Project metadata

Data of the project the workbook belongs to, retrieved together with the workbook itself.

Field name

Description

Attribute type

workbookProjectName

Name of the workbook's project

INPUT_TEXT

workbookProjectLuid

Identifier (LUID) of the workbook's project

INPUT_TEXT

workbookProjectVizportalUrlId

Project identifier in the Tableau web portal URLs

INPUT_NUMBER

2.4 Workbook metadata

Field name

Description

Attribute type

name

Workbook name

INPUT_TEXT

physicalName

Physical name of the workbook (same value as name)

INPUT_TEXT

workbookLuid

Workbook identifier (LUID)

INPUT_TEXT

workbookId

Internal workbook identifier

INPUT_TEXT

workbookContainsUnsupportedCustomSql

Indicates whether the workbook contains unsupported custom SQL

INPUT_CHECKBOX

workbookContainerType

Workbook container type

INPUT_TEXT

workbookContainerName

Workbook container name

INPUT_TEXT

workbookOwnerId

Workbook owner identifier

INPUT_TEXT

workbookOwnerUserName

Workbook owner username

INPUT_TEXT

workbookDescription

Workbook description

INPUT_TEXT

workbookUri

Workbook URI

INPUT_TEXT

workbookVizportalUrlId

Workbook identifier in the Tableau web portal URLs

INPUT_TEXT

workbookCreatedAt

Workbook creation date

INPUT_DATE

workbookUpdatedAt

Workbook last modification date

INPUT_DATE

workbookTags

Workbook tags concatenated into a single text using the separator configured in totplugin.anjana.tagsSeparator

INPUT_TEXT

3. Technical

3.1 Authentication

  • The plugin authenticates against Tableau using a personal access token (PAT): it sends the PAT name and secret, together with the contentUrl of the configured site, through a sign-in POST request.

  • Tableau returns a session token that the plugin sends in the X-Tableau-Auth header in subsequent calls.

  • The session is neither reused nor stored: the plugin signs in for each operation and signs out after using the token. Extracting a workbook's metadata involves two sign-ins (one to query the site and another for the GraphQL query), each with its own sign-out. Listing projects and workbooks involves a single sign-in.

  • The PAT secret is read from the plugin configuration.

3.2 APIs used

API

Endpoint

Method

Purpose

Tableau REST (authentication)

{server}/api/{version}/auth/signin

POST

Sign in with the PAT on the configured site and obtain the token and the site id

Tableau REST (authentication)

{server}/api/{version}/auth/signout

POST

Sign out and invalidate the token

Tableau REST (sites)

{server}/api/{version}/sites/{siteId}

GET

Retrieve the site configuration (site metadata)

Tableau Metadata API (GraphQL)

{server}/relationship-service-war/graphql, with the GraphQL query in the query parameter

GET

Retrieve the site's projects and workbooks, with their metadata, owner and tags

Notes:

  • The default GraphQL query requests, for the site, the workbooks with the fields id, luid, name, containsUnsupportedCustomSql, projectVizportalUrlId, projectName, projectLuid, containerType, containerName, owner, description, uri, vizportalUrlId, createdAt, updatedAt, tags and views. It can be replaced using the queryGraphql property (see the Configuration section). Views are queried but not loaded into Anjana.

3.3 API version

The REST API version is not fixed in the plugin: it is taken from the connection's version property and included in the URL (/api/{version}/...). The plugin's sample configuration uses version 3.17. The Metadata API (GraphQL) does not include a version in the URL.

4. Connectivity

4.1 Service user credentials

  • A personal access token (PAT) with its name and secret, created in Tableau by the service user. Both values are included in the plugin configuration (personalAccessTokenName and personalAccessTokenSecret).

  • The site contentUrl being worked on (siteContentURL). The PAT must be valid on that site.

  • The PAT expires: it is the customer's responsibility to renew it before it expires.

4.2 Role and permissions

  • Site role: Site Administrator (Creator or Explorer), or Server Administrator. The plugin queries the site configuration, an operation that Tableau's documentation restricts to server and site administrators.

  • Projects and workbooks: read (View) permission on all projects and workbooks to be cataloged. The Metadata API only returns content on which the user has permissions. A site administrator has access to all content on the site.

  • The plugin does not write to Tableau: no modify, publish or delete permissions are required.

  • Tableau Server: the Metadata API must be enabled before using the plugin, by running the tsm maintenance metadata-services enable command on the TSM initial node. This must be done by the customer. In Tableau Cloud the Metadata API is always enabled.

4.3 Network requirements

  • Outbound connectivity from the plugin to the Tableau server configured in the server property, using the protocol and port contained in that URL. All calls (REST and GraphQL) go to the same host.

  • In Tableau Cloud the server URL must include the pod name.

  • The plugin does not configure a proxy or timeouts for calls to Tableau, so the runtime environment's default values apply.

5. Configuration

Plugin-specific properties. Properties defined in application.yaml, which are generic to all plugins, are excluded. The technology properties are defined within each element of the totplugin.connection list.

Property

Description

Required

Default value

totplugin.connection[].name

Name of the Tableau connection. It must be unique among connections, because it is used to associate each connection with its technology configuration.

Yes

—

totplugin.connection[].aris[].ari

ARIs indicating the services available on the connection. For extraction it must start with anja:totplugin:extract: and end with /{infrastructure}/{technology}/{zone} (with or without a trailing slash) of the triplet selected in Anjana.

Yes

—

totplugin.connection[].technology.server

Base URL of the Tableau server (Tableau Server or Tableau Cloud), without a trailing slash.

Yes

—

totplugin.connection[].technology.version

Tableau REST API version included in the call URLs (for example 3.17).

Yes

—

totplugin.connection[].technology.personalAccessTokenName

Name of the service user's personal access token.

Yes

—

totplugin.connection[].technology.personalAccessTokenSecret

Secret of the service user's personal access token.

Yes

—

totplugin.connection[].technology.siteContentURL

contentUrl of the Tableau site the connection works on. The plugin fails if it is empty (the default site with an empty contentUrl is not supported) and, during extraction, the first part of the workbook path must match this value exactly.

Yes

—

totplugin.pathSeparator

Character that separates site, project and workbook in the path. The path must have exactly three parts; with more or fewer, the plugin returns an error.

No

/

totplugin.anjana.tagsSeparator

Separator used to concatenate the workbook tags in the workbookTags field. If left empty, the default value is used.

No

_-

totplugin.pagination.pageSize

Number of items per page in the paginated Tableau sites query. Maximum 1000: if a higher value is configured, the plugin uses 1000. The plugin's current flows (listing and extraction) do not perform that query.

No

100

totplugin.connection[].technology.queryGraphql

GraphQL query sent to the Metadata API to retrieve the site's workbooks. The fields loaded into Anjana are those described in the Integration with Anjana section; if the query is replaced, it must still return all of them.

No

query getSitesWorkbooksProjects {tableauSites{id luid name workbooks {id luid name containsUnsupportedCustomSql projectVizportalUrlId projectName projectLuid containerType containerName owner {id username} description uri vizportalUrlId createdAt updatedAt tags {id name} views{id luid name createdAt updatedAt}}}}