Tableau OCF Connector: Overview

The Tableau OCF Connector which can be used for Tableau Server or Tableau Online (Cloud) was developed by Alation and is available as a Zip file that can be uploaded and installed in Manage Connectors. Create a ticket with Alation Support about receiving the Tableau connector package.

This connector should be used to catalog Tableau as a BI source in Alation. It extracts Tableau objects such as sites, projects, workbooks, sheets (view, worksheet), dashboard), fields, datasource, datasource Fields, databases, and tables. Users will be able to search and find Tableau objects, curate Tableau object pages, and understand the business transformation (lineage) of their data from the Alation user interface.

Team

The following administrators are required to install this connector:

  • Alation Server Admin:

    • Installs the connector

    • Creates a Tableau BI source

    • Provisions Alation API tokens

  • Tableau administrator with the site administrator privilege:

    • Enables the Metadata API

Scope

The table below shows what features are covered by this connector:

Feature

Scope

Availability

Tableau online instance

Catalog a Tableau instance in the cloud environment

Yes

Tableau server

Catalog a Tableau server

Yes

Sites

Catalog sites in Tableau server and online

Yes

Filter sites

Ability to include or exclude specific sites

Yes *

Projects

Catalog projects in a site

Yes

Filter projects

Ability to include or exclude specific projects

Yes

Views

Catalog reports in a site

Yes

Reports - sheets and dashboards

Catalog sheets and dashboards in reports

Yes

Reports objects

Catalog report objects such as charts and tables

Yes

Report columns - dimensions, measures, measure expressions

Catalog dimensions, measures, and measure expressions of report objects

Yes

Report object data sources

Catalog data sources used by report objects

Yes

Report lineage

Catalog the lineage of a report object

Yes

Filter reports

Ability to include or exclude specific Reports

No

Report owner

Owners or authors who created a report

No

Workbook

Catalog workbooks in a site

Yes

Dashboards

Catalog dashboards in a site

Yes

Dashboard object Measures and dimensions

Catalog dimensions and measure of a dashboard object

No

Applications

Catalog applications

No

Filter applications

Ability to include or exclude specific application

No

Dataflows

Catalog dataflows

No

Datasets

Catalog datasets

Yes

Image Preview

Ability to show a thumbnail image of reports and workbooks

Yes

Datasource/Published datasources

Catalog datasources/published datasources

Yes

Embedded datasources/ Unpublished datasources

Catalog embedded datasources/unpublished datasources

Yes

Datasource columns and fields

Catalog columns and fields in datasource

Yes

Databases and tables

Catalog databases and tables

Yes

Popularity

Popularity of reports/views

Yes

Security replication

Replicate access control to reports and dashboards

Yes

Source Comments

Catalog source comments/description

Yes **

* This is not applicable for Tableau Server

** Descriptions/Source comments are supported for Project, Workbook, Published Data Sources, Report Columns, and Datasource Columns from version 2022.3.

Tableau Object Hierarchy

The following diagram shows the hierarchy of Tableau objects and how they are cataloged in Alation:

../../../_images/TableauOCF_01.png

Tableau API Methods

The table below lists the Tableau API methods used by this connector to extract metadata from the Tableau server:

Type

API Endpoint

Description

Authentication

POST /api/{api-version}/auth/signin POST /api/{api-version}/auth/signout

Signs you in as a user on the specified site on Tableau Server or Tableau Online. This call returns a credentials token that you use in subsequent calls to the server.

Sites Extraction

GET /api/{api-version}/sites GET /api/{api-version}/sites/site-id

  • Returns a list of the sites on the server that the caller of this method has access to. This method is not available for Tableau Online and alation users must supply the site IDs in an input field on the Settings page.

  • Returns information about the specified site.

Projects Extraction

GET /api/{api-version}/sites/{site-id}/ projects GET /api/{api-version}/sites/{site-id}/ projects?filter=name:eq:[names] GET /api/{api-version}/sites/{site-id}/ projects/{project-id}

  • Returns a list of projects on the specified site

  • Returns projects whose names match the list of names provided in the filter

  • Gets a specific project when getting original project while certifying the workbook

Preview Extraction

GET /api/{api-version}/sites/{site-id}/ workbooks/{workbook-id}/views/{view-id}/ previewImage GET /api/{api-version}/sites/{site-id}/ views/{view-id}/image?resolution=high

  • Returns the thumbnail image for the specified view

  • Returns an image of the specified view with high resolution

Extract Sample View Data

GET /api/{api-version}/sites/{site-id}/ views/{view-id}/data

Returns a specified view rendered as data in comma-separated-value (CSV) format

Groups and Users Extraction

GET api/{api-version}/sites/{site-id}/ groups?filter=domainName:in:[domain1, domain2] GET api/{api-version}/sites/{site-id}/ groups/{group-id}/users

  • Returns a list of groups on the specified site, whose domain matches the list of domains provided by the Alation user

  • Gets a list of users in the specified group

Permissions Extraction

GET /api/api-version/sites/site-id/ datasources/datasource-id/permissions GET /api/api-version/sites/site-id/ projects/project-id/permissions GET /api/api-version/sites/site-id/ views/view-id/permissions GET /api/api-version/sites/site-id/ workbooks/workbook-id/permissions

  • Returns a list of permissions for a specific data source

  • Returns information about the set of permissions allowed or denied for the groups and the users in a project

  • Returns a list of permissions for a specific view

  • Returns a list of permissions for a specific workbook

Certifying Workbook

GET /api/{api-version}/sites/{site-id}/ workbooks/{workbook-id} PUT /api/{api-version}/sites/{site-id}/ workbooks/{workbook-id}

  • Returns information about the specified workbook which is used in the certification process

  • Update the workbook by placing it in the Alation Certified post-fixed tableau project to indicate the workbook is certified

Certify Published Datasource

PUT /api/{api-version}/sites/{site-id}/ datasources/{datasource-id}

Update certification status of the specified data source.

Note

  • Only published datasources can be certified and not the embedded/unpublished datasources.

  • REST API version 3.4 is used to make sure that the certification does not fail on lower versions.

Create Project for Certified Datasource/Workbook

POST /api/{api-version}/sites/site-id/ projects PUT /api/{api-version}/sites/site-id/ projects/project-id

  • Create or update project housing the certified workbook.

  • Project is post-fixed with the Alation Certified or some other option as specified in the BI source Settings page.

Refer to API Reference - All Methods for more information.

Tableau Metadata API Queries

The table below lists the Tableau Metadata API Queries used by this connector to extract metadata from the Tableau server:

  1. Workbooks, Dashboards, Sheets, Embedded Datasource ViewFields (Report Columns), and Embeddded Datasource Columns (Datasource Columns).

    Query:

    query GetWorkbooksAfter($projectNames: [String]!, $first:Int!, $after: String){
        workbooksConnection (filter : {projectNameWithin : $projectNames}, first: $first, after: $after){
            pageInfo {
                hasNextPage
                endCursor
            }
    
            totalCount
    
            nodes{
                id
                luid
                projectName
                name
                description
                site {
                    id
                    luid
                    id
                    name
                }
                projectVizportalUrlId
                vizportalUrlId
                sheets {
                    id
                    name
                    luid
                    path
                    createdAt
                    updatedAt
                    sheetFieldInstances {
                        name
                        id
                        isHidden
                    }
                    upstreamDatasources {
                        name
                        id
                    }
                    containedInDashboards {
                        id
                        luid
                        name
                    }
                    tagsConnection {
                        nodes {
                            name
                        }
                    }
                }
                dashboards {
                    id
                    luid
                    name
                    createdAt
                    updatedAt
                    upstreamDatasources {
                        name
                        id
                    }
                    upstreamSheetFieldInstances {
                        id
                        isHidden
                        name
                    }
    
                    tagsConnection {
                        nodes {
                            name
                        }
                    }
                }
                embeddedDatasources {
                    id
                    name
                    hasExtracts
    
                    fields {
                        name
                        id
                        __typename
    
                        upstreamColumns {
                            id
                            name
                            luid
                        }
                    }
                }
                viewsConnection {
                    nodes {
                        name
                        id
                        path
                    }
                }
            }
        }
    }
    
  2. Published Datasources.

    Query:

    query GetPublishedDatasourcesAfter ($projectNames: [String]!, $first:Int!, $after:String) {
        publishedDatasourcesConnection (filter : {projectNameWithin : $projectNames}, first:$first, after:$after) {
            pageInfo {
                hasNextPage
                endCursor
            }
    
            totalCount
    
            nodes{
                id
                luid
                name
                isCertified
                projectName
                vizportalUrlId
                projectVizportalUrlId
                extractLastUpdateTime
                site {
                    id
                    name
                    luid
                }
                certificationNote
                certifierDisplayName
                description
                owner {
                    id
                    name
                    luid
                }
                fields {
                    name
                    id
                    __typename
    
                    upstreamColumns {
                        id
                        name
                        luid
                    }
                }
            }
        }
    }
    
  3. Database Servers (Enrich BI Connections)

    Query:

    query GetDatabaseServers ($first:Int!, $after: String){
        databaseServersConnection (first:$first, after:$after) {
            pageInfo {
                hasNextPage
                endCursor
            }
    
            totalCount
    
            nodes {
                id
                name
                connectionType
                isEmbedded
                extendedConnectionType
                hostName
                port
                description
                tables {
                    id
                    name
                    schema
                }
            }
    
        }
    }
    
  4. Database Tables (BI Connections)

    Query:

    query GetDatabaseTables($first:Int!, $after: String){
        databaseTablesConnection (first:$first, after:$after) {
        pageInfo {
                hasNextPage
                endCursor
            }
    
            totalCount
    
            nodes{
                id
                luid
                name
                schema
                database {
                    id
                    luid
                    name
                    connectionType
                    downstreamDatasources {
                        id
                        name
                    }
                    downstreamWorkbooks {
                        id
                        luid
                        name
                    }
                }
                columns {
                    id
                    luid
                    remoteType
                    name
                }
            }
        }
    }
    
  5. Calculated Fields

    Query:

    query GetCalculatedFields ($first:Int!, $after:String){
        calculatedFieldsConnection (first:$first, after:$after) {
            pageInfo {
                hasNextPage
                endCursor
            }
    
            totalCount
    
            nodes {
                name
                id
                formula
                dataType
                dataCategory
                role
                datasource {
                    name
                }
                fields {
                    id
                    name
                }
            }
        }
    }
    
  6. Column Fields

    Query:

    query GetColumnFields ($first:Int!, $after:String){
        columnFieldsConnection (first:$first, after:$after) {
            pageInfo {
                hasNextPage
                endCursor
            }
    
            totalCount
    
            nodes{
                name
                id
                dataCategory
                dataType
                role
                description
                datasource  {
                    id
                    name
                }
            }
        }
    }
    
  7. Group Fields

    Query:

    query GetGroupFields ($first:Int!, $after:String){
        groupFieldsConnection (first:$first, after:$after) {
            pageInfo {
                hasNextPage
                endCursor
            }
    
            totalCount
    
            nodes{
                id
                name
                dataType
                dataCategory
                role
                datasource  {
                    id
                    name
                }
            }
        }
    }
    
  8. Get Projects Info (used to map project names to workbook LUIDs)

    Query:

    query GetProjectInfoAfter ($projectNames: [String]!, $first: Int!, $after: String) {
        workbooksConnection (filter : {projectNameWithin : $projectNames}, first: $first, after: $after){
            pageInfo {
                hasNextPage
                endCursor
            }
    
            totalCount
    
            nodes{
                projectVizportalUrlId
                projectName
            }
        }
    }
    
  9. Get Sites (used to verify API availability)

    Query:

    query GetSites{
        tableauSites {
            id
            luid
            name
            uri
        }
    }