AnswerService

AnswerService

AnswerService provides a simple way to work with ThoughtSpot Answers.

This service allows you to interact with ThoughtSpot Answers programmatically, making it easy to customize visualizations, filter data, and extract insights directly from your application.

You can use this service to:

  • Add or remove columns from Answers (addColumns, removeColumns, addColumnsByName)

  • Apply filters to Answers (addFilter)

  • Get data from Answers in different formats (JSON, CSV, PNG) (fetchData, fetchCSVBlob, fetchPNGBlob)

  • Get data for specific points in visualizations (getUnderlyingDataForPoint)

  • Run custom queries (executeQuery)

  • Add visualizations to Liveboards (addDisplayedVizToLiveboard)

Version : SDK: 1.25.0| ThoughtSpot: 9.10.0.cl

// Get the answer service
embed.on(EmbedEvent.Data, async (e) => {
    const service = await embed.getAnswerService();

    // Add columns to the answer
    await service.addColumnsByName(["Sales", "Region"]);

    // Get the data
    const data = await service.fetchData();
    console.log(data);
});
// Get data for a point in a visualization
embed.on(EmbedEvent.CustomAction, async (e) => {
    const underlying = await e.answerService.getUnderlyingDataForPoint([
      'Product Name',
      'Sales Amount'
    ]);

    const data = await underlying.fetchData(0, 100);
    console.log(data);
});

ConstructorsπŸ”—

Should not need to be called directly.

new AnswerService(session: SessionInterface , answer: any , thoughtSpotHost: string , selectedPoints?: VizPoint[] ) : AnswerService

Should not need to be called directly.

Function Parameters

session
answer
  • answer: any

thoughtSpotHost
  • thoughtSpotHost: string

selectedPoints

Optional

Returns

MethodsπŸ”—

addColumnsπŸ”—

addColumns(columnIds: string[] ) : Promise< any >

Add columnIds and return updated answer session.

Function Parameters

columnIds
  • columnIds: string[]

Returns

Promise< any >

addColumnsByNameπŸ”—

addColumnsByName(columnNames: string[] ) : Promise< any >

Add columns by names and return updated answer session.

Function Parameters

columnNames
  • columnNames: string[]

Returns

Promise< any >

embed.on(EmbedEvent.Data, async (e) => {
   const service = await embed.getAnswerService();
   await service.addColumnsByName([
     "col name 1",
     "col name 2"
   ]);
   console.log(await service.fetchData());
});





[definedInTag]#Defined in : link:https://github.com/thoughtspot/visual-embed-sdk/blob/main/src/utils/graphql/answerService/answerService.ts#L153[utils/graphql/answerService/answerService.ts, window=_blank]#

addDisplayedVizToLiveboardπŸ”—

addDisplayedVizToLiveboard(liveboardId: string ) : Promise< any >

Function Parameters

liveboardId
  • liveboardId: string

Returns

Promise< any >

addFilterπŸ”—

addFilter(columnName: string , operator: RuntimeFilterOp , values: string | number | bigint | boolean[] ) : Promise< any >

Add a filter to the answer.

Function Parameters

columnName
  • columnName: string

operator
values
  • values: string | number | bigint | boolean[]

Returns

Promise< any >

executeQueryπŸ”—

executeQuery(query: string , variables: any ) : Promise< any >

Execute a custom graphql query in the context of the answer.

Function Parameters

query
  • query: string

graphql query

variables
  • variables: any

graphql variables

Returns

Promise< any >

fetchCSVBlobπŸ”—

fetchCSVBlob(userLocale?: string = 'en-us', includeInfo?: boolean = false) : Promise< Response >

Fetch the data for the answer as a CSV blob. This might be quicker for larger data.

Function Parameters

userLocale
  • userLocale: string = 'en-us'

includeInfo
  • includeInfo: boolean = false

Include the CSV header in the output

Returns

Promise< Response >

fetchDataπŸ”—

fetchData(offset?: number = 0, size?: number = 1000) : Promise< {columns: any , data: any } >

Fetch data from the answer.

Function Parameters

offset
  • offset: number = 0

size
  • size: number = 1000

Returns

Promise< {columns: any , data: any } >

fetchPNGBlobπŸ”—

fetchPNGBlob(userLocale?: string = 'en-us', omitBackground?: boolean = false, deviceScaleFactor?: number = 2) : Promise< Response >

Fetch the data for the answer as a PNG blob. This might be quicker for larger data.

Function Parameters

userLocale
  • userLocale: string = 'en-us'

omitBackground
  • omitBackground: boolean = false

Omit the background in the PNG

deviceScaleFactor
  • deviceScaleFactor: number = 2

The scale factor for the PNG

Returns

Promise< Response >

getAnswerπŸ”—

getAnswer() : Promise< any >

Returns

Promise< any >

getFetchCSVBlobUrlπŸ”—

getFetchCSVBlobUrl(userLocale?: string = 'en-us', includeInfo?: boolean = false) : string

Just get the internal URL for this answer’s data as a CSV blob.

Function Parameters

userLocale
  • userLocale: string = 'en-us'

includeInfo
  • includeInfo: boolean = false

Returns

string

getFetchPNGBlobUrlπŸ”—

getFetchPNGBlobUrl(userLocale?: string = 'en-us', omitBackground?: boolean = false, deviceScaleFactor?: number = 2) : string

Just get the internal URL for this answer’s data as a PNG blob.

Function Parameters

userLocale
  • userLocale: string = 'en-us'

omitBackground
  • omitBackground: boolean = false

deviceScaleFactor
  • deviceScaleFactor: number = 2

Returns

string

getSQLQueryπŸ”—

getSQLQuery() : Promise< string >

Returns

Promise< string >

getSessionπŸ”—

getSession() : SessionInterface

Get the internal session details for the answer.

Returns

getSourceDetailπŸ”—

getSourceDetail() : Promise< any >

Get the details about the source used in the answer. This can be used to get the list of all columns in the data source for example.

Returns

Promise< any >

getTMLπŸ”—

getTML() : Promise< any >

Returns

Promise< any >

getUnderlyingDataForPointπŸ”—

getUnderlyingDataForPoint(outputColumnNames: string[] , selectedPoints?: UnderlyingDataPoint[] ) : Promise< AnswerService >

Get underlying data given a point and the output column names. In case of a context menu action, the selectedPoints are automatically passed.

Function Parameters

outputColumnNames
  • outputColumnNames: string[]

selectedPoints

Optional

Returns

Promise< AnswerService >

Version : SDK: 1.25.0| ThoughtSpot: 9.10.0.cl

 embed.on(EmbedEvent.CustomAction, e => {
    const underlying = await e.answerService.getUnderlyingDataForPoint([
      'col name 1' // The column should exist in the data source.
    ]);
    const data = await underlying.fetchData(0, 100);
 })

removeColumnsπŸ”—

removeColumns(columnIds: string[] ) : Promise< any >

Remove columnIds and return updated answer session.

Function Parameters

columnIds
  • columnIds: string[]

Returns

Promise< any >

setTMLOverrideπŸ”—

setTMLOverride(override: any ) : void

Function Parameters

override
  • override: any

Returns

void