> ## Documentation Index
> Fetch the complete documentation index at: https://docs.open-metadata.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Tableau Connector | OpenMetadata Integration Guide

> Connect Tableau dashboards to OpenMetadata with our comprehensive connector guide. Setup instructions, configuration options, and metadata extraction steps.

export const MetadataIngestionUi = ({connector, selectServicePath, addNewServicePath, serviceConnectionPath}) => {
  return <Steps>
      <Step title="Visit the Services Page">
        Click `Settings` in the side navigation bar and then `Services`.

        The first step is to ingest the metadata from your sources. To do that, you first need to create a Service connection first.

        This Service will be the bridge between OpenMetadata and your source system.

        Once a Service is created, it can be used to configure your ingestion workflows.

        <img src="/public/images/connectors/visit-services-page.png" alt="Visit Services Page" />
      </Step>

      <Step title="Create a New Service">
        Click on _Add New Service_ to start the Service creation.

        <img src="/public/images/connectors/create-new-service.png" alt="Create a new Service" />
      </Step>

      <Step title="Select the Service Type">
        Select {connector} as the Service type and click _Next_.

        {selectServicePath && <img src={selectServicePath} alt="Select Service" />}
      </Step>

      <Step title="Name and Describe your Service">
        Provide a name and description for your Service.

        <h4>Service Name</h4>

        OpenMetadata uniquely identifies Services by their **Service Name**. Provide
        a name that distinguishes your deployment from other Services, including
        the other {connector} Services that you might be ingesting metadata
        from.

        Note that when the name is set, it cannot be changed.

        {addNewServicePath && <img src={addNewServicePath} alt="Add New Service" />}
      </Step>

      <Step title="Configure the Service Connection">
        In this step, we will configure the connection settings required for {connector}.

        Please follow the instructions below to properly configure the Service to read from your sources. You will also find
        helper documentation on the right-hand side panel in the UI.

        {serviceConnectionPath && <img src={serviceConnectionPath} alt="Configure Service connection" />}
      </Step>
    </Steps>;
};

export const ConnectorDetailsHeader = ({name, icon, stage, availableFeatures, unavailableFeatures = [], availableFeaturesCollate = []}) => {
  const showSubHeading = availableFeatures?.length > 0 || unavailableFeatures?.length > 0 || availableFeaturesCollate?.length > 0;
  const totalAvailableFeatures = [...availableFeatures || [], ...availableFeaturesCollate || []];
  return <div className="container">
      <div className="Heading">
        <div className="flex items-center gap-3">
          {icon && <div className="IconContainer">
              <img src={icon} alt={name} noZoom className="ConnectorIcon" />
            </div>}
          <h1 className="ConnectorName">{name}</h1>
          <span className={`StageBadge ${stage === 'PROD' ? 'prod' : 'beta'}`}>
            {stage}
          </span>
        </div>
      </div>
      {showSubHeading && <div className="SubHeading">
          <div className="FeaturesHeading">Feature List</div>
          <div className="FeaturesList">
            {totalAvailableFeatures.map(feature => <div className="FeatureTag AvailableFeature" key={feature}>
                ✓ {feature}
              </div>)}
            {unavailableFeatures.map(feature => <div className="FeatureTag UnavailableFeature" key={feature}>
                ✕ {feature}
              </div>)}
          </div>
        </div>}
    </div>;
};

<ConnectorDetailsHeader icon="/public/images/connectors/tableau.webp" name="Tableau" stage="PROD" availableFeatures={["Dashboards", "Charts", "Lineage", "Owners", "Datamodels", "Tags", "Projects", "Column Lineage", "Usage"]} unavailableFeatures={[]} />

In this section, we provide guides and references to use the Tableau connector.

<Info>
  **Supported Authentication Types:**

  * **Basic Auth** — Username and password authentication
  * **Access Token Auth** — Personal access token name and secret for token-based authentication
</Info>

Configure and schedule Tableau metadata and profiler workflows from the OpenMetadata UI:

* [Requirements](#requirements)
* [Entity Mapping](#entity-mapping)
* [Metadata Ingestion](#metadata-ingestion)
* [Enable Security](#securing-tableau-connection-with-ssl-in-openmetadata)
* [Lineage](#lineage)
* [Troubleshooting](/v1.12.x/connectors/dashboard/tableau/troubleshooting)

## Requirements

To ingest tableau metadata, minimum `Site Role: Viewer` is required for the tableau user.
To create lineage between tableau dashboard and any database service via the queries provided from Tableau Metadata API, please enable the Tableau Metadata API for your tableau server.
For more information on enabling the Tableau Metadata APIs follow the link [here](https://help.tableau.com/current/api/metadata_api/en-us/docs/meta_api_start.html)

<Tip>
  * If using a **default site** on Tableau Server, leave the **Site URL** and **Site Name** fields **blank** in the ingestion configuration.
  * Ensure that the **Metadata API** is enabled for the user performing the ingestion. If it is not enabled, ingestion may fail. Follow the official Tableau documentation to [enable the Metadata API](https://help.tableau.com/current/api/metadata_api/en-us/docs/meta_api_start.html#enable-the-tableau-metadata-api-for-tableau-server).
  * The minimum required role to retrieve owners is Site Admin Explorer.
</Tip>

<Tip>
  * As of OpenMetadata versions `1.7.4` and `1.7.5`, the `siteUrl` field has been removed from the Tableau connector configuration. This change was intentional, as confirmed in the release commit.
  * To connect to a non-default Tableau site, use the `siteName` field instead. The Tableau Python SDK does not require `siteUrl` for authentication.
  * Ensure the `siteName` field is correctly populated (do not use `*`) to enable successful metadata ingestion for multi-site Tableau environments.
</Tip>

## Entity Mapping

The Tableau connector maps Tableau assets to OpenMetadata entities as follows:

| Tableau Asset                               | OpenMetadata Entity   | Description                                                                                                                      |
| ------------------------------------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **Dashboard Views** (sheetType="dashboard") | **Dashboard**         | Tableau dashboard views are mapped to OpenMetadata Dashboard entities. These are the actual interactive dashboards in Tableau.   |
| **Sheet Views** (worksheets, stories, etc.) | **Chart**             | Tableau worksheet views and other sheet types are mapped to OpenMetadata Chart entities.                                         |
| **Workbooks**                               | **Project Hierarchy** | Workbook information is preserved in the project field as `{ProjectName}/{WorkbookName}` to maintain the container relationship. |
| **Data Sources**                            | **Data Models**       | Tableau data sources are mapped to OpenMetadata Data Model entities.                                                             |

### Example Structure

**Tableau Structure:**

```
Project: Sales Team
└── Workbook: Sales Analysis
    ├── Dashboard: Revenue Overview (sheetType="dashboard")
    ├── Worksheet: Monthly Sales (sheetType="worksheet")
    └── Story: Sales Story (sheetType="story")
```

**OpenMetadata Structure:**

```
Dashboard: "Revenue Overview" (Project: "Sales Team/Sales Analysis")
├── Chart: "Monthly Sales"
└── Chart: "Sales Story"
```

This mapping ensures that:

* Tableau dashboards appear as OpenMetadata dashboards (not charts)
* Workbook context is preserved in the project hierarchy
* URLs point directly to the specific dashboard views
* Chrome Extension compatibility is maintained

## Metadata Ingestion

<MetadataIngestionUi connector={"Tableau"} selectServicePath={"/public/images/connectors/tableau/select-service.png"} addNewServicePath={"/public/images/connectors/tableau/add-new-service.png"} serviceConnectionPath={"/public/images/connectors/tableau/service-connection.png"} />

# Connection Details

<Steps>
  <Step title="Connection Details">
    <Tip>
      When using a **Hybrid Ingestion Runner**, any sensitive credential fields—such as passwords, API keys, or private keys—must reference secrets using the following format:

      ```
      password: secret:/my/database/password
      ```

      This applies **only to fields marked as secrets** in the connection form (these typically mask input and show a visibility toggle icon).
      For a complete guide on managing secrets in hybrid setups, see the [Hybrid Ingestion Runner Secret Management Guide](https://docs.getcollate.io/getting-started/day-1/hybrid-saas/hybrid-ingestion-runner#3.-manage-secrets-securely).
    </Tip>

    * **Host and Port**: URL or IP address of your installation of Tableau Server.
    * **Authentication Types**:
      1. Basic Authentication
      * Username: The name of the user whose credentials will be used to sign in.
      * Password: The password of the user.
      2. Access Token Authentication
      * Personal Access Token: The personal access token name. For more information to get a Personal Access Token please visit this [link](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm).
      * Personal Access Token Secret: The personal access token value. For more information to get a Personal Access Token please visit this [link](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm).
    * **API Version**: Tableau API version. If not provided, the version will be used from the Tableau server automatically. A list of versions can be found [here](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).
    * **Site Name**: This corresponds to the `contentUrl` attribute in the Tableau REST API. The `site_name` is the portion of the URL that follows the `/site/` in the URL.
    * **Pagination Limit**: The pagination limit will be used while querying the Tableau Graphql endpoint to get the data source information.
    * **Proxy URL**: Optional proxy URL for the Tableau server. If not provided, the hostPort will be used. This is used to generate the dashboard and chart URLs.

    ### Site Name

    #### 1. Service Connection for Tableau Cloud

    If you're connecting to a cloud Tableau instance, add the `Site Name` with your site name.

    #### 2. Service Connection for a default tableau site

    For a default tableau site the `Site Name` field should be kept empty.

    #### 3. Service Connection for a non-default tableau site

    For a non-default tableau site the `Site Name` field is required.

    <Tip>
      If `https://xxx.tableau.com/#/site/MarketingTeam/home` represents the homepage url for your tableau site, the `MarketingTeam` from the url should be entered in the `Site Name` field.
    </Tip>

    ### Authentication Type

    ### 1. Basic Authentication

    We need the name of the user whose credentials will be used to sign in and the password of the user.

    ### 2. Access Token Authentication

    In this case, the personal access token name and the personal access token value are required.
    For more information to get a Personal Access Token please visit this [link](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm).
  </Step>

  <Step title="Test the Connection">
    Once the credentials have been added, click on *Test Connection* and *Save* the changes.

    <img src="https://mintcdn.com/openmetadata/9G75p72jJKYgvFUQ/public/images/connectors/test-connection.png?fit=max&auto=format&n=9G75p72jJKYgvFUQ&q=85&s=4ac71a56e30fa3dd1be86f82c1f07068" alt="Test Connection" width="1494" height="310" data-path="public/images/connectors/test-connection.png" />
  </Step>

  <Step title="Configure Metadata Ingestion">
    In this step we will configure the metadata ingestion pipeline,
    Please follow the instructions below

    <img src="https://mintcdn.com/openmetadata/9SXjaLbGROaofLQU/public/images/connectors/configure-metadata-ingestion-dashboard.png?fit=max&auto=format&n=9SXjaLbGROaofLQU&q=85&s=3dc1805cdb65fa215d2de69382538b7c" alt="Configure Metadata Ingestion" width="1504" height="1756" data-path="public/images/connectors/configure-metadata-ingestion-dashboard.png" />

    #### Metadata Ingestion Options

    * **Name**: This field refers to the name of ingestion pipeline, you can customize the name or use the generated name.
    * **Dashboard Filter Pattern (Optional)**: Use it to control whether to include dashboard as part of metadata ingestion.
      * **Include**: Explicitly include dashboards by adding a list of comma-separated regular expressions to the 'Include' field. OpenMetadata will include all dashboards with names matching one or more of the supplied regular expressions. All other dashboards will be excluded.
      * **Exclude**: Explicitly exclude dashboards by adding a list of comma-separated regular expressions to the 'Exclude' field. OpenMetadata will exclude all dashboards with names matching one or more of the supplied regular expressions. All other dashboards will be included.
    * **projectFilterPattern**: Filter the dashboards, charts and data sources by projects. Note that all of them support regex as include or exclude. E.g., "My project, My proj.\*, .\*Project".

    <Tip>
      We filter the projects by concatenating the entire project hierarchy using dot notation
      (e.g., `Project1.NestedProjectA.OtherProject`).
      Make sure the regex filter pattern accounts for this fully-qualified format.
    </Tip>

    * **Chart Pattern (Optional)**: Use it to control whether to include charts as part of metadata ingestion.
      * **Include**: Explicitly include charts by adding a list of comma-separated regular expressions to the 'Include' field. OpenMetadata will include all charts with names matching one or more of the supplied regular expressions. All other charts will be excluded.
      * **Exclude**: Explicitly exclude charts by adding a list of comma-separated regular expressions to the 'Exclude' field. OpenMetadata will exclude all charts with names matching one or more of the supplied regular expressions. All other charts will be included.
    * **Data Model Pattern (Optional)**: Use it to control whether to include data modes as part of metadata ingestion.
      * **Include**: Explicitly include data models by adding a list of comma-separated regular expressions to the 'Include' field. OpenMetadata will include all data models with names matching one or more of the supplied regular expressions. All other data models will be excluded.
      * **Exclude**: Explicitly exclude data models by adding a list of comma-separated regular expressions to the 'Exclude' field. OpenMetadata will exclude all data models with names matching one or more of the supplied regular expressions. All other data models will be included.
    * **Database Service Name (Optional)**: Enter the name of Database Service which is already ingested in OpenMetadata to create lineage between dashboards and database tables.
    * **Enable Debug Log (toggle)**: Set the 'Enable Debug Log' toggle to set the default log level to debug.
    * **Include Owners (toggle)**: Set the 'Include Owners' toggle to control whether to include owners to the ingested entity if the owner email matches with a user stored in the OM server as part of metadata ingestion. If the ingested entity already exists and has an owner, the owner will not be overwritten.
    * **Include Tags (toggle)**: Set the 'Include Tags' toggle to control whether to include tags in metadata ingestion.
    * **Include Data Models (toggle)**: Set the 'Include Data Models' toggle to control whether to include tags as part of metadata ingestion.
    * **Mark Deleted Dashboards (toggle)**: Set the 'Mark Deleted Dashboards' toggle to flag dashboards as soft-deleted if they are not present anymore in the source system.
    * **Include Draft Dashboard (toogle)**: Set the 'Include Draft Dashboard' toggle to include draft dashboards. By default it will include draft dashboards.
  </Step>

  <Step title="Schedule the Ingestion and Deploy">
    Scheduling can be set up at an hourly, daily, weekly, or manual cadence. The
    timezone is in UTC. Select a Start Date to schedule for ingestion. It is
    optional to add an End Date.

    Review your configuration settings. If they match what you intended,
    click Deploy to create the service and schedule metadata ingestion.

    If something doesn't look right, click the Back button to return to the
    appropriate step and change the settings as needed.

    After configuring the workflow, you can click on Deploy to create the
    pipeline.

    <img src="https://mintcdn.com/openmetadata/j50Bw6ZBiFbbFFnF/public/images/connectors/schedule.png?fit=max&auto=format&n=j50Bw6ZBiFbbFFnF&q=85&s=24b0c2f55f803efde5fb3b3bc24ed3ae" alt="Schedule the Workflow" width="2733" height="1083" data-path="public/images/connectors/schedule.png" />
  </Step>

  <Step title="View the Ingestion Pipeline">
    Once the workflow has been successfully deployed, you can view the
    Ingestion Pipeline running from the Service Page.

    <img src="https://mintcdn.com/openmetadata/9G75p72jJKYgvFUQ/public/images/connectors/view-ingestion-pipeline.png?fit=max&auto=format&n=9G75p72jJKYgvFUQ&q=85&s=7c4e411977371617cb1312efb9f9bfee" alt="View Ingestion Pipeline" width="2733" height="1271" data-path="public/images/connectors/view-ingestion-pipeline.png" />

    <Tip>
      If AutoPilot is enabled, workflows like usage tracking, data lineage, and similar tasks will be handled automatically. Users don’t need to set up or manage them - AutoPilot takes care of everything in the system.
    </Tip>
  </Step>
</Steps>

## Securing Tableau Connection with SSL in OpenMetadata

To establish secure connections between OpenMetadata and Tableau, navigate to the `Advanced Config` section. Here, you can provide the CA certificate used for SSL validation by specifying the `caCertificate`. Alternatively, if both client and server require mutual authentication, you'll need to use all three parameters: `ssl key`, `ssl cert`, and `caCertificate`. In this case, `ssl_cert` is used for the client’s SSL certificate, `ssl_key` for the private key associated with the SSL certificate, and `caCertificate` for the CA certificate to validate the server’s certificate.

<img src="https://mintcdn.com/openmetadata/zq8wMYJ70mT1Pi3x/public/images/connectors/ssl_tableau.png?fit=max&auto=format&n=zq8wMYJ70mT1Pi3x&q=85&s=d3460fb5b2aa75b72dfdee004f5677b1" alt="SSL Configuration" height="450px" data-path="public/images/connectors/ssl_tableau.png" />

## Lineage

To establish lineage from your **database tables to dashboards**, you must add the corresponding **database service name**.

<img src="https://mintcdn.com/openmetadata/9SXjaLbGROaofLQU/public/images/connectors/dashboard-lineage.png?fit=max&auto=format&n=9SXjaLbGROaofLQU&q=85&s=e41db6665a46398ff36ff571ce7d5b06" alt="lineage in dashboard" width="2599" height="893" data-path="public/images/connectors/dashboard-lineage.png" />
