Skip to content

New Integration: Tableau #535

@AggManik

Description

@AggManik

Description

Add Tableau integration to sync workbooks, views, data sources, dashboard activity, and user analytics into CORE.

Reference Implementations

Existing Integrations (use as templates)

  • integrations/github-analytics/ - Similar analytics-focused integration
  • integrations/google-sheets/ - Similar data/visualization platform
  • integrations/slack/ - For reference

Required Files Structure

integrations/tableau/
├── src/
│   ├── index.ts          # Main entry, auth spec
│   ├── schedule.ts       # Sync logic
│   ├── utils.ts          # Tableau REST API utilities
│   ├── account-create.ts # Auth setup (PAT or JWT)
│   └── create-activity.ts # Activity formatting
├── package.json
├── tsup.config.ts
└── README.md

Tableau REST API Integration

Authentication Setup

  • Use Personal Access Token (PAT) authentication (recommended)
  • Alternative: JWT (JSON Web Token) for connected apps
  • Sign in via POST /api/{api-version}/auth/signin to get auth token
  • Auth token used in X-Tableau-Auth header for subsequent requests
  • Latest API version: 3.24+ (Tableau Cloud) / 3.27 (Server 2025.3)

Key Endpoints

  • Workbooks
    • GET /api/{version}/sites/{site-id}/workbooks - List workbooks
    • GET /api/{version}/sites/{site-id}/workbooks/{workbook-id} - Get workbook details
    • GET /api/{version}/sites/{site-id}/workbooks/{workbook-id}/views - Get workbook views
    • POST /api/{version}/sites/{site-id}/workbooks - Publish workbook
  • Views (Dashboards)
    • GET /api/{version}/sites/{site-id}/views - List views
    • GET /api/{version}/sites/{site-id}/views/{view-id}/image - Get view as image
    • GET /api/{version}/sites/{site-id}/views/{view-id}/data - Get view data
  • Data Sources
    • GET /api/{version}/sites/{site-id}/datasources - List data sources
    • GET /api/{version}/sites/{site-id}/datasources/{datasource-id} - Get data source details
    • POST /api/{version}/sites/{site-id}/datasources - Publish data source
  • Users & Groups
    • GET /api/{version}/sites/{site-id}/users - List site users
    • GET /api/{version}/sites/{site-id}/groups - List groups
  • Projects
    • GET /api/{version}/sites/{site-id}/projects - List projects
  • Flows (Prep Conductor)
    • GET /api/{version}/sites/{site-id}/flows - List flows
    • POST /api/{version}/sites/{site-id}/flows/{flow-id}/run - Run a flow

Events to Track

  1. Workbook Activity - Workbooks published, updated, downloaded, deleted
  2. View/Dashboard Access - Views accessed, images exported, data downloaded
  3. Data Source Updates - Data sources published, refreshed, connection changes
  4. User Activity - User logins, permission changes, group membership changes
  5. Flow Executions - Prep flows triggered, completed, or failed

Implementation Tasks

  • Set up basic integration structure following integrations/github/src/index.ts pattern
  • Implement PAT/JWT authentication flow in account-create.ts
  • Create API utilities in utils.ts with session management
  • Implement sync logic in schedule.ts for workbooks, views, and data sources
  • Convert Tableau events to CORE activity format
  • Add error handling and rate limiting
  • Create integration documentation
  • Add to integrations/README.md

Technical Notes

  • Tableau REST API requires signing in first to get an auth token, which expires after a configured period
  • API version is tied to Tableau Server/Cloud version (3.24 for Cloud Dec 2025, 3.27 for Server 2025.3)
  • OpenAPI endpoints are available for code generation
  • Supports both Tableau Server (on-premises) and Tableau Cloud
  • Multiple authentication types supported since Jan 2025
  • User credentials management endpoints added recently
  • Consider using the OpenAPI spec for client generation

Resources

Labels

enhancement, integration, new-feature

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions