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-Authheader 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) |
|
POST |
Sign in with the PAT on the configured site and obtain the token and the site id |
|
Tableau REST (authentication) |
|
POST |
Sign out and invalidate the token |
|
Tableau REST (sites) |
|
GET |
Retrieve the site configuration (site metadata) |
|
Tableau Metadata API (GraphQL) |
|
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
queryGraphqlproperty (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 (
personalAccessTokenNameandpersonalAccessTokenSecret). -
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 enablecommand 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
serverproperty, 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 |
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 |
|