Back to .md Directory

Data Dictionary and Semantic Layer for Tableau VizQL Data Service (VDS)

Defines JSON payload structure, endpoints, and query rules for LLMs to generate valid Tableau VizQL Data Service API requests.

May 2, 2026
0 downloads
6 views
ai llm
View source

What this file does

Defines JSON payload structure, endpoints, and query rules for LLMs to generate valid Tableau VizQL Data Service API requests.

When to use it

  • Building an LLM-based agent that queries Tableau datasources via REST
  • Standardising JSON request formats for Tableau VDS across multiple teams
  • Creating automated test fixtures for Tableau VizQL API integration
  • Onboarding new developers to Tableau's VizQL Data Service query patterns

Assumes this stack

TableauVizQL Data ServiceREST APIJSON

Data Dictionary and Semantic Layer for Tableau VizQL Data Service (VDS)

Purpose

This document serves as a Data Dictionary and Semantic Layer to guide Large Language Models (LLMs) in constructing valid JSON payloads for querying Tableau's VizQL Data Service (VDS) via the REST API. It provides structured definitions of API components, schema requirements, and query rules to ensure accurate and compliant request generation.

1. API Endpoints

1.1 Read Metadata

  • Endpoint: POST /read-metadata
  • Purpose: Retrieves metadata about a published datasource.
  • Request Structure:
    {
      "connection": {
        "tableauServerName": "string",
        "siteId": "string",
        "datasource": "string",
        "databaseUsername": "string",
        "databasePassword": "string"
      },
      "options": {
        "returnFormat": "OBJECTS",
        "debug": false
      }
    }
    
  • Response Structure:
    {
      "data": [{}]
    }
    

1.2 Query Datasource

  • Endpoint: POST /query-datasource
  • Purpose: Executes a structured query against a published datasource.
  • Request Structure:
    {
      "connection": {
        "tableauServerName": "string",
        "siteId": "string",
        "datasource": "string",
        "databaseUsername": "string",
        "databasePassword": "string"
      },
      "query": {
        "columns": [],
        "filters": []
      },
      "options": {
        "disaggregate": false,
        "returnFormat": "OBJECTS",
        "debug": false
      }
    }
    
  • Response Structure:
    {
      "data": [null]
    }
    

1.3 Simple Request

  • Endpoint: GET /simple-request
  • Purpose: Health check or basic request validation.
  • Response Structure:
    "string"
    

2. Data Model and Query Components

2.1 Connection Object

Defines authentication and datasource parameters.

ParameterTypeRequiredDescription
tableauServerNameStringYesTableau Cloud server name
siteIdStringYesTableau site identifier
datasourceStringYesName of the published datasource
databaseUsernameStringNoDatabase username (if applicable)
databasePasswordStringNoDatabase password (if applicable)

2.2 Query Object

Defines the request payload structure for querying data.

ParameterTypeRequiredDescription
columnsArrayYesDefines the output fields in the query. Must reference fields from the DATA_MODEL.
filtersArrayNoSpecifies conditions to filter query results.

2.3 Column Object

Each column object within the columns array represents a field in the dataset.

ParameterTypeRequiredDescription
columnNameStringYesName of the field to query.
functionStringNoAggregation function (e.g., SUM, AVG). Required for measures.
calculationStringNoCustom calculation formula (e.g., SUM([Profit])/SUM([Sales])).
sortPriorityNumberNoSorting priority (lower number = higher precedence).
sortDirectionStringNoSort order (ASC, DESC).
maxDecimalPlacesNumberNoNumber of decimal places for numeric outputs.

2.4 Filter Object

Filters refine query results by applying conditions.

ParameterTypeRequiredDescription
columnNameStringYesField being filtered.
filterTypeStringYesType of filter (QUANTITATIVE, SET, DATE, TOP).
howManyNumberNoUsed for TOP filters. Specifies number of results.
fieldToMeasureObjectNoRequired for TOP filters. Specifies column and function used to rank results.
minNumberNoUsed in QUANTITATIVE filters. Defines the lower limit.
maxNumberNoUsed in QUANTITATIVE filters. Defines the upper limit.
unitsStringNoUsed in DATE filters. Time units (DAYS, WEEKS, etc.).
pastCountNumberNoUsed in DATE filters. Defines lookback window.
futureCountNumberNoUsed in DATE filters. Defines lookahead window.

3. Query Examples

3.1 Basic Query: Sum of Sales by Segment

{
  "columns": [
    { "columnName": "Segment" },
    { "columnName": "Sales", "function": "SUM" }
  ]
}

3.2 Filtered Query: Top 10 States by Sales

{
  "columns": [
    { "columnName": "State/Province" },
    { "columnName": "Sales", "function": "SUM" }
  ],
  "filters": [
    {
      "columnName": "State/Province",
      "filterType": "TOP",
      "howMany": 10,
      "fieldToMeasure": { "columnName": "Sales", "function": "SUM" },
      "direction": "TOP"
    }
  ]
}

3.3 Date-Based Query: Sales from the Last 30 Days

{
  "columns": [
    { "columnName": "Sales", "function": "SUM" }
  ],
  "filters": [
    {
      "filterType": "DATE",
      "columnName": "Order Date",
      "units": "DAYS",
      "pastCount": 30,
      "futureCount": 0
    }
  ]
}

4. Error Handling and Compliance

  • If a malformed query is detected, return an error message.
    { "error": "Invalid query structure. Please refer to the VizQL documentation." }
    
  • If the query fails, reference the Vector Database (Tableau VizQL Reference Docs).

5. Final Considerations

This Data Dictionary and Semantic Layer ensures that LLMs generate accurate, compliant, and structured queries for Tableau's VizQL Data Service. It defines schema rules, API requirements, and structured examples to minimize query failures and enhance API interaction efficiency.

What's inside

3 endpoints, 4 data model objects, 3 query examples, 1 error handling section, 1 final considerations section

Change this for your project

  • Replace tableauServerName with your actual Tableau Cloud server name
  • Replace siteId with your Tableau site identifier
  • Replace datasource with the name of your published datasource
  • Replace databaseUsername and databasePassword with your credentials if required

Where it goes

Save in docs/ or the repository root. Gives agents and new contributors a map of the codebase.

Worth borrowing

  • Structuring a semantic layer document specifically for LLM consumption, with explicit JSON schemas and examples
  • Using a filter object with typed filter categories (QUANTITATIVE, SET, DATE, TOP) to constrain query generation

Related Documents