Skip to main content

Generate Insight Bundle

Generates an insight bundle for the current aggregated value for a Pulse metric.

APIs called​

Required arguments​

bundleRequest​

The request to generate a bundle for.

The datasource object under metric.definition requires an id (datasource LUID) and accepts an optional id_type:

  • Omit id_type for standard published datasources (default behavior).
  • Use "DATASOURCE_ID_TYPE_WORKBOOK_DATASOURCE" when the metric is based on an embedded workbook datasource rather than a published datasource.

Example:

{
"bundle_request": {
"version": 1,
"options": {
"output_format": "OUTPUT_FORMAT_HTML",
"time_zone": "UTC",
"language": "LANGUAGE_EN_US",
"locale": "LOCALE_EN_US"
},
"input": {
"metadata": {
"name": "Pulse Metric",
"metric_id": "fd6c4aa0-f6d3-469e-b75b-d597435ae199",
"definition_id": "9ad098f4-49cf-4e8a-bec0-0ca803091dd0"
},
"metric": {
"definition": {
"datasource": {
"id": "2d935df8-fe7e-4fd8-bb14-35eb4ba31d45"
},
"basic_specification": {
"measure": {
"field": "Sales",
"aggregation": "AGGREGATION_SUM"
},
"time_dimension": {
"field": "Order Date"
},
"filters": []
},
"is_running_total": false
},
"metric_specification": {
"filters": [],
"measurement_period": {
"granularity": "GRANULARITY_BY_QUARTER",
"range": "RANGE_LAST_COMPLETE"
},
"comparison": {
"comparison": "TIME_COMPARISON_PREVIOUS_PERIOD"
}
},
"extension_options": {
"allowed_dimensions": [],
"allowed_granularities": [],
"offset_from_today": 0
},
"representation_options": {
"type": "NUMBER_FORMAT_TYPE_NUMBER",
"number_units": {
"singular_noun": "unit",
"plural_noun": "units"
},
"sentiment_type": "SENTIMENT_TYPE_NONE",
"row_level_id_field": {
"identifier_col": "Order ID",
"identifier_label": ""
},
"row_level_entity_names": {
"entity_name_singular": "Order"
},
"row_level_name_field": {
"name_col": "Order Name"
},
"currency_code": "CURRENCY_CODE_USD"
},
"insights_options": {
"show_insights": true,
"settings": []
},
"goals": {
"target": {
"value": 100
}
}
}
}
}
}

Measurement period options​

These fields move the analysis window. All of them are inside the bundleRequest argument.

FieldWhereWhat it does
nowbundle_request.options.nowAnchors the analysis to a date instead of today. Format YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (24-hour). Leave it out or use an empty string for today-relative analysis. When set, time_zone is ignored.
specific_periodbundle_request.input.metric.metric_specification.measurement_period.specific_periodAn exact period or date range. date is required. end_date is optional and must not be before date. Both are YYYY-MM-DD.
last_x_periodbundle_request.input.metric.metric_specification.measurement_period.last_x_periodA rolling window the service supports (see below).

To analyze one past month, set now to the last day of that month, range to RANGE_CURRENT_PARTIAL and granularity to GRANULARITY_BY_MONTH. RANGE_LAST_COMPLETE targets the period before the anchor's period, not the anchor's own.

specific_period with only date covers the one period (at the chosen granularity) that contains that date. With end_date, it runs from the start of date's period to the end of end_date's period.

last_x_period accepts exactly two shapes:

  • Rolling days: period 7, 14, 30, 60 or 90, period_type GRANULARITY_BY_DAY, include_current_period true, and granularity GRANULARITY_BY_DAY.
  • Trailing year by month: period 1, period_type GRANULARITY_BY_YEAR, include_current_period false, and granularity GRANULARITY_BY_MONTH.

The tool checks the request before it calls Pulse. If a rule below is broken, the call fails with Payload validation failed before calling the Pulse Insights API and a numbered list of the problems. The RANGE_BY_CONFIG rules exist because the service ignores these fields under any other range and would return an insight for a different period. The tool rejects the now combinations because the service's behavior for them is not defined.

  • specific_period and last_x_period need range set to RANGE_BY_CONFIG.
  • specific_period and last_x_period cannot both be set.
  • A day-based last_x_period needs granularity GRANULARITY_BY_DAY.
  • The trailing-year last_x_period needs granularity GRANULARITY_BY_MONTH.
  • now cannot be combined with specific_period.
  • now cannot be combined with last_x_period.

A last_x_period shape outside the two above, or an end_date before date, is rejected when the arguments are parsed, before the checks above run.

Optional arguments​

bundleType​

The type of bundle to generate. The default is ban.

ValueDescription
banReturn a basic insight bundle with the current aggregated value for the Pulse Metric, period over period change, and the highest ranked insight for each filterable dimension of the metric.
basicReturn a basic insight bundle. Similar to a springboard insight, but data is focused on the dimensions of a metric that are low bandwidth because they have small value sets. It shows the current value, period over period change, and the highest ranked insight for the metric for that data.
springboardReturn a springboard insight bundle with the current value, period over period change, and the highest ranked insight for the metric.
detailShows insights on performance over time of the metric, a summary visualization of metric highs and lows and trends, breakdowns of top contributors for each filterable dimension of the metric, and followup insights based on the top ranked insights not already presented.
explorationReturn an exploration insight bundle focused on performance trends, with BAN, anchor, and follow-up insight groups. Available in API 3.26 (Tableau Cloud September 2025) and later. Not available for Tableau Server.

verbosity​

How much of the response to return. The default is full.

ValueDescription
fullReturns the response as Pulse sent it, including the viz chart specifications.
slimRemoves the large viz (Vega chart-spec) blobs from every insight and summary result.

Example result​

{
"bundle_response": {
"result": {
"insight_groups": [
{
"type": "ban",
"insights": [
{
"result": {
"type": "popc",
"version": 1,
"content": "",
"markup": "<span data-type=\"metric\">Pulse Metric</span> was 135.0K units (Q2 2025), <span data-type=\"insight-type-keyword\">up 7.7%</span> (9.7K units) compared to the prior quarter (Q1 2025).",
"viz": {
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"encoding": {
"y": {
"field": "entityName",
"type": "nominal",
"sort": {
"field": "index",
"order": "ascending"
},
"axis": {
"title": null,
"offset": {
"expr": "contributorAxisOffset"
},
"domain": false,
"labelPadding": {
"expr": "includesNegativeValues ? contributorAxisLabelMaxWidth + 16 : contributorAxisLabelPadding"
},
"labelFont": {
"expr": "contributorAxisLabelFontFace"
},
"labelFontSize": {
"expr": "contributorAxisLabelFontSize"
},
"labelColor": {
"expr": "contributorAxisLabelColor"
}
}
},
"x": {
"axis": {
"labelOpacity": 0,
"grid": true,
"gridOpacity": {
"expr": "datum.value === 0 ? 1 : 0"
},
"title": null,
"gridWidth": {
"expr": "contributorAxisDomainWidth"
},
"gridColor": {
"expr": "contributorAxisDomainColor"
},
"gridCap": {
"expr": "contributorAxisDomainCap"
},
"domain": false,
"zindex": 1
},
"stack": null,
"field": "value",
"type": "quantitative",
"scale": {
"padding": {
"expr": "xScalePadding"
}
}
}
},
"layer": [
{
"name": "bar-chart",
"description": "Layer for the bar chart",
"params": [
{
"name": "highlight",
"select": {
"type": "point",
"on": "pointerover"
}
},
{
"name": "select",
"select": "point"
}
],
"mark": {
"cornerRadiusTopLeft": {
"expr": "datum.value >= 0 ? 0 : barCornerRadius"
},
"cornerRadiusBottomLeft": {
"expr": "datum.value >= 0 ? 0 : barCornerRadius"
},
"binSpacing": 0,
"strokeWidth": 1,
"type": "bar",
"height": 24,
"cornerRadiusTopRight": {
"expr": "datum.value < 0 ? 0 : barCornerRadius"
},
"cornerRadiusBottomRight": {
"expr": "datum.value < 0 ? 0 : barCornerRadius"
}
},
"encoding": {
"color": {
"condition": [
{
"empty": false,
"value": {
"expr": "\n if(datum.average, contributorBarColorAverageActive,\n if(mode === 'favorable', contributorBarColorFavorableActive,\n if(mode === 'unfavorable', contributorBarColorUnfavorableActive,\n contributorBarColorUnspecifiedActive\n )\n )\n )"
},
"param": "select"
},
{
"param": "highlight",
"empty": false,
"value": {
"expr": "\n if(datum.average, contributorBarColorAverageHover,\n if(mode === 'favorable', contributorBarColorFavorableHover,\n if(mode === 'unfavorable', contributorBarColorUnfavorableHover,\n contributorBarColorUnspecifiedHover\n )\n )\n )"
}
}
],
"value": {
"expr": "\n if(datum.average, contributorBarColorAverage,\n if(mode === 'favorable', contributorBarColorFavorable,\n if(mode === 'unfavorable', contributorBarColorUnfavorable,\n contributorBarColorUnspecified\n )\n )\n )"
}
},
"stroke": {
"value": {
"expr": "\n if(datum.average, contributorBarBorderColorAverage,\n if(mode === 'favorable', contributorBarBorderColorFavorable,\n if(mode === 'unfavorable', contributorBarBorderColorUnfavorable,\n contributorBarBorderColorUnspecified\n )\n )\n )"
}
}
}
},
{
"name": "value-text-label",
"description": "Layer for the absolute value text labels",
"mark": {
"align": {
"expr": "datum.value < 0 ? 'right' : 'left'"
},
"text": {
"expr": "datum.formattedValue"
},
"color": {
"expr": "\n if(datum.average, barValueLabelColorAverage,\n if(mode === 'favorable', barValueLabelColorFavorable,\n if(mode === 'unfavorable', barValueLabelColorUnfavorable,\n barValueLabelColorUnspecified\n )\n )\n )"
},
"limit": {
"expr": "includesNegativeValues ? contributorAxisLabelMaxWidth : barValueLabelMaxWidth "
},
"baseline": "middle",
"fontWeight": {
"expr": "barValueLabelFontWeight"
},
"dx": {
"expr": "datum.value < 0 ? barValueLabelPadding * -1 : barValueLabelPadding"
},
"fontSize": {
"expr": "barValueLabelFontSize"
},
"type": "text",
"font": {
"expr": "barValueLabelFontFace"
}
}
}
],
"width": "container",
"config": {
"axis": {
"ticks": false
}
},
"height": "container",
"params": [
{
"name": "barCornerRadius",
"value": 4
},
{
"value": "#343A3F",
"name": "barValueLabelColorAverage"
},
{
"name": "barValueLabelColorFavorable",
"value": "#1EA562"
},
{
"name": "barValueLabelColorUnfavorable",
"value": "#C6154A"
},
{
"name": "barValueLabelColorUnspecified",
"value": "#1678CC"
},
{
"value": "'SF Pro Text', 'SF Pro Display', system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', roboto, ubuntu, 'Fire Sans', 'Helvetica Neue', sans-serif",
"name": "barValueLabelFontFace"
},
{
"name": "barValueLabelFontSize",
"value": 14
},
{
"name": "barValueLabelFontWeight",
"value": 500
},
{
"name": "barValueLabelMaxWidth",
"value": 72
},
{
"name": "barValueLabelPadding",
"value": 4
},
{
"name": "contributorAxisDomainCap",
"value": "round"
},
{
"name": "contributorAxisDomainColor",
"value": "#343A3F"
},
{
"name": "contributorAxisDomainWidth",
"value": 2
},
{
"value": "#343A3F",
"name": "contributorAxisLabelColor"
},
{
"name": "contributorAxisLabelPadding",
"value": 10
},
{
"name": "contributorAxisLabelMaxWidth",
"value": 72
},
{
"value": "'SF Pro Text', 'SF Pro Display', system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', roboto, ubuntu, 'Fire Sans', 'Helvetica Neue', sans-serif",
"name": "contributorAxisLabelFontFace"
},
{
"name": "contributorAxisLabelFontSize",
"value": 14
},
{
"name": "contributorAxisOffset",
"value": 2
},
{
"name": "contributorBarColorAverage",
"value": "#C8CED8"
},
{
"name": "contributorBarColorAverageHover",
"value": "#6B7280"
},
{
"value": "#4D555C",
"name": "contributorBarColorAverageActive"
},
{
"name": "contributorBarColorFavorable",
"value": "#66DDA3"
},
{
"name": "contributorBarColorFavorableHover",
"value": "#1C9B5C"
},
{
"value": "#157445",
"name": "contributorBarColorFavorableActive"
},
{
"name": "contributorBarColorUnfavorable",
"value": "#FA5F8D"
},
{
"name": "contributorBarColorUnfavorableHover",
"value": "#F9437A"
},
{
"name": "contributorBarColorUnfavorableActive",
"value": "#C6154A"
},
{
"name": "contributorBarColorUnspecified",
"value": "#5FB5FF"
},
{
"name": "contributorBarColorUnspecifiedHover",
"value": "#058AFF"
},
{
"name": "contributorBarColorUnspecifiedActive",
"value": "#146EBD"
},
{
"name": "contributorBarBorderColorAverage",
"value": "#6B7280"
},
{
"name": "contributorBarBorderColorFavorable",
"value": "#1C9B5C"
},
{
"name": "contributorBarBorderColorUnfavorable",
"value": "#F9437A"
},
{
"name": "contributorBarBorderColorUnspecified",
"value": "#058AFF"
},
{
"name": "xScalePadding",
"value": 0
},
{
"name": "mode",
"value": "unspecified"
},
{
"name": "includesNegativeValues",
"value": false
},
{
"name": "xDomain",
"value": [0, 134990.59600000002]
}
],
"data": {
"values": [
{
"entityName": "Q1 2025",
"value": 125288.82819999992,
"formattedValue": "125.3K",
"average": true,
"index": 0
},
{
"formattedValue": "135.0K (+7.7%)",
"average": false,
"index": 1,
"entityName": "Q2 2025",
"value": 134990.59600000002
}
]
},
"view": {
"stroke": null
}
},
"facts": {
"sentiment": "neutral",
"is_custom_comparison": false,
"result_hash": "+lA+/F4el3Q7+N5E3ERLYSwJ1fnexyT/ISrrAXrGcxY=",
"target_period_value": {
"raw": 134990.59600000002,
"formatted": "135.0K"
},
"comparison_period_value": {
"raw": 125288.82819999992,
"formatted": "125.3K"
},
"target_time_period": {
"range": "Q2 2025",
"label": "Q2 2025",
"granularity": "quarter",
"start_timestamp": "2025-04-01T00:00:00Z",
"end_timestamp": "2025-07-01T00:00:00Z"
},
"comparison_time_period": {
"granularity": "quarter",
"start_timestamp": "2025-01-01T00:00:00Z",
"end_timestamp": "2025-04-01T00:00:00Z",
"range": "Q1 2025",
"label": "Q1 2025"
},
"difference": {
"absolute": {
"raw": 9701.767800000103,
"formatted": "9.7K"
},
"relative": {
"raw": 0.07743521860155853,
"formatted": "7.7%"
},
"direction": "up"
}
},
"characterization": "CHARACTERIZATION_UNSPECIFIED",
"question": "How did Pulse Metric change from Q1 2025 to Q2 2025?",
"score": 0
},
"insight_type": "popc"
}
],
"summaries": [
{
"result": {
"id": "",
"markup": "",
"viz": {
"params": [
{
"name": "axisLabelFontFace",
"value": "'SF Pro Text', 'SF Pro Display', system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', roboto, ubuntu, 'Fire Sans', 'Helvetica Neue', sans-serif"
},
{
"name": "axisLabelFontSize",
"value": 13
},
{
"name": "axisLabelAngle",
"value": 0
},
{
"name": "axisLabelPadding",
"value": 0
},
{
"name": "axisLabelOffset",
"value": 0
},
{
"value": "#4D555C",
"name": "axisLabelColorDefault"
},
{
"name": "axisLabelColorActive",
"value": "#040507"
},
{
"value": "#058AFF",
"name": "currentValueCircleColor1"
},
{
"name": "currentValueCircleColor2",
"value": "#fff"
},
{
"name": "currentValueCircleSize",
"value": 120
},
{
"name": "currentValueCircleStrokeWidth",
"value": 3
},
{
"name": "currentValueFontFace",
"value": "'SF Pro Text', 'SF Pro Display', system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', roboto, ubuntu, 'Fire Sans', 'Helvetica Neue', sans-serif"
},
{
"name": "currentValueFontSize",
"value": 13
},
{
"name": "currentValueFontWeight",
"value": 600
},
{
"name": "currentValuePadding",
"value": 12
},
{
"value": 12,
"name": "leftYAxisOffset"
},
{
"name": "lineColor",
"value": "#058AFF"
},
{
"name": "lineStrokeWidth",
"value": 3
},
{
"name": "lineStrokeDash",
"value": [6, 3]
},
{
"name": "normalRangeColor",
"value": "#E3F2FF"
},
{
"name": "normalRangeOpacity",
"value": 1
},
{
"name": "xAxisScalePadding",
"value": -20
},
{
"name": "xAxisOffset",
"value": 20
},
{
"value": "#6B7280",
"name": "xAxisGridColorDefault"
},
{
"name": "xAxisGridColorActive",
"value": "#040507"
},
{
"name": "xAxisLabelFontWeightDefault",
"value": "normal"
},
{
"name": "xAxisLabelFontWeightActive",
"value": 600
},
{
"name": "mode",
"value": "LastComplete"
},
{
"value": ["2025-04-01T00:00:00Z", "2023-07-01T00:00:00Z"],
"name": "xAxisLabelsDataValues"
},
{
"name": "yAxisLabelsDataValues",
"value": ["130449.3752"]
},
{
"name": "lastPointCircleMode",
"value": "filled"
},
{
"name": "activeLabelAndGridDate",
"value": "2025-04-01T00:00:00Z"
}
],
"encoding": {
"x": {
"axis": {
"grid": true,
"labelAlign": {
"condition": [
{
"test": "datum.index === 0",
"value": "left"
},
{
"test": "datum.index === 1",
"value": "right"
}
],
"value": "center"
},
"values": {
"expr": "xAxisLabelsDataValues"
},
"labelColor": {
"condition": [
{
"test": "activeLabelAndGridDate === datum.value",
"expr": "axisLabelColorActive"
}
],
"expr": "axisLabelColorDefault"
},
"offset": {
"expr": "xAxisOffset"
},
"gridOpacity": {
"expr": "datum.index === 0 ? 0 : 1"
},
"labelOverlap": true,
"gridColor": {
"condition": [
{
"test": "activeLabelAndGridDate === datum.value",
"expr": "xAxisGridColorActive"
}
],
"expr": "xAxisGridColorDefault"
},
"labelFontWeight": {
"condition": [
{
"test": "activeLabelAndGridDate === datum.value",
"expr": "xAxisLabelFontWeightActive"
}
],
"expr": "xAxisLabelFontWeightDefault"
},
"format": {
"custom": true,
"mapName": "xAxis"
}
},
"scale": {
"type": "point",
"padding": {
"expr": "xAxisScalePadding"
}
},
"field": "truncDate",
"type": "ordinal"
}
},
"resolve": {
"axis": {
"y": "independent"
}
},
"customFormatterMaps": {
"yAxis": {
"130449.3752": "130.4K"
},
"xAxis": {
"2023-07-01T00:00:00Z": "Q3 23",
"2025-04-01T00:00:00Z": "Q2 25"
}
},
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"height": "container",
"config": {
"customFormatTypes": true,
"axis": {
"domain": false,
"title": null,
"labelFontSize": {
"expr": "axisLabelFontSize"
},
"ticks": false,
"labelLineHeight": {
"expr": "axisLabelFontSize"
},
"labelFont": {
"expr": "axisLabelFontFace"
},
"labelAngle": {
"expr": "axisLabelAngle"
},
"labelPadding": {
"expr": "axisLabelPadding"
},
"labelOffset": {
"expr": "axisLabelOffset"
}
}
},
"view": {
"stroke": null
},
"data": {
"values": [
{
"tooltipMarkup": "<span data-type=\"period\">Q2 2025</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">135.0K (134,990.60)</span>",
"ci0": "109561.9349",
"truncDate": "2025-04-01T00:00:00Z",
"tooltipText": "",
"showIsolatedPoint": 0,
"formattedRawValue": "135.0K",
"point": 1,
"formattedTruncDate": "Q2 2025",
"changeSentiment": "neutral",
"segment": "1",
"ci1": "175722.7311",
"dashed": false,
"rawValue": "134990.5960"
},
{
"tooltipMarkup": "<span data-type=\"period\">Q1 2025</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">125.3K (125,288.83)</span>",
"changeSentiment": "neutral",
"tooltipText": "",
"segment": "1",
"ci0": "85415.8193",
"formattedRawValue": "125.3K",
"formattedTruncDate": "Q1 2025",
"ci1": "149951.9070",
"point": 0,
"dashed": false,
"rawValue": "125288.8282",
"truncDate": "2025-01-01T00:00:00Z",
"showIsolatedPoint": 0
},
{
"formattedRawValue": "236.7K",
"formattedTruncDate": "Q4 2024",
"showIsolatedPoint": 0,
"dashed": false,
"changeSentiment": "neutral",
"ci0": "168285.6908",
"point": 0,
"tooltipText": "",
"tooltipMarkup": "<span data-type=\"period\">Q4 2024</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">236.7K (236,745.24)</span>",
"segment": "1",
"ci1": "237625.9108",
"rawValue": "236745.2438",
"truncDate": "2024-10-01T00:00:00Z"
},
{
"formattedRawValue": "145.5K",
"tooltipText": "",
"rawValue": "145538.9762",
"showIsolatedPoint": 0,
"changeSentiment": "neutral",
"ci1": "181915.0816",
"ci0": "120216.6475",
"point": 0,
"truncDate": "2024-07-01T00:00:00Z",
"formattedTruncDate": "Q3 2024",
"dashed": false,
"tooltipMarkup": "<span data-type=\"period\">Q3 2024</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">145.5K (145,538.98)</span>",
"segment": "1"
},
{
"point": 0,
"tooltipMarkup": "<span data-type=\"period\">Q2 2024</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">136.8K (136,809.14)</span>",
"ci1": "147232.4450",
"changeSentiment": "neutral",
"ci0": "90096.1571",
"formattedRawValue": "136.8K",
"truncDate": "2024-04-01T00:00:00Z",
"rawValue": "136809.1450",
"formattedTruncDate": "Q2 2024",
"dashed": false,
"segment": "1",
"showIsolatedPoint": 0,
"tooltipText": ""
},
{
"formattedRawValue": "94.8K",
"showIsolatedPoint": 0,
"segment": "1",
"rawValue": "94840.2150",
"ci0": "66542.0564",
"dashed": false,
"point": 0,
"tooltipText": "",
"tooltipMarkup": "<span data-type=\"period\">Q1 2024</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">94.8K (94,840.21)</span>",
"truncDate": "2024-01-01T00:00:00Z",
"formattedTruncDate": "Q1 2024",
"changeSentiment": "neutral",
"ci1": "124277.9977"
},
{
"tooltipText": "",
"rawValue": "182912.2542",
"formattedTruncDate": "Q4 2023",
"changeSentiment": "neutral",
"tooltipMarkup": "<span data-type=\"period\">Q4 2023</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">182.9K (182,912.25)</span>",
"segment": "1",
"truncDate": "2023-10-01T00:00:00Z",
"point": 0,
"formattedRawValue": "182.9K",
"dashed": false,
"ci1": "217804.5577",
"ci0": "156012.2328",
"showIsolatedPoint": 0
},
{
"changeSentiment": "neutral",
"formattedTruncDate": "Q3 2023",
"point": 0,
"formattedRawValue": "130.4K",
"dashed": false,
"ci1": "155769.5390",
"tooltipText": "",
"segment": "1",
"truncDate": "2023-07-01T00:00:00Z",
"showIsolatedPoint": 0,
"tooltipMarkup": "<span data-type=\"period\">Q3 2023</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">130.4K (130,449.38)</span>",
"ci0": "93831.3645",
"rawValue": "130449.3752"
}
],
"name": "series"
},
"layer": [
{
"name": "normal-range",
"description": "The normal range band around the line",
"mark": {
"color": {
"expr": "normalRangeColor"
},
"opacity": {
"expr": "normalRangeOpacity"
},
"type": "errorband"
},
"encoding": {
"y": {
"field": "ci1",
"type": "quantitative",
"scale": {
"zero": false
},
"title": "Normal range",
"axis": null
},
"y2": {
"field": "ci0"
}
}
},
{
"name": "line",
"description": "The line based of time series data",
"mark": {
"clip": true,
"type": "line",
"stroke": {
"expr": "lineColor"
},
"strokeWidth": {
"expr": "lineStrokeWidth"
},
"opacity": 1
},
"encoding": {
"strokeDash": {
"field": "dashed",
"type": "nominal",
"legend": null,
"condition": {
"value": {
"expr": "lineStrokeDash"
},
"test": "datum.dashed"
}
},
"y": {
"field": "rawValue",
"type": "quantitative",
"axis": null
}
},
"detail": {
"field": "segment",
"type": "nominal"
}
},
{
"description": "Manual left x-axis grid line to overlay the errorband that occludes the real axis grid line",
"mark": {
"type": "rule",
"color": {
"expr": "xAxisGridColorDefault"
},
"opacity": {
"expr": "length(data('series')) > 0 && datum.truncDate === peek(data('series')).truncDate ? 1 : 0"
}
},
"name": "left-x-axis-overlay"
},
{
"name": "isolated-point-value-circle",
"description": "Circle for isolated points in data series",
"mark": {
"filled": true,
"fill": {
"expr": "currentValueCircleColor1"
},
"size": {
"expr": "datum.showIsolatedPoint*currentValueCircleSize"
},
"opacity": 1,
"strokeWidth": {
"expr": "currentValueCircleStrokeWidth"
},
"type": "point"
},
"encoding": {
"y": {
"axis": null,
"field": "rawValue",
"type": "quantitative"
}
}
},
{
"encoding": {
"y": {
"field": "rawValue",
"type": "quantitative",
"axis": {
"labelAlign": "right",
"labelBaseline": {
"condition": {
"test": "datum.value === 0",
"value": "bottom"
},
"value": "middle"
},
"labelColor": {
"expr": "datum.index === 1 ? axisLabelColorActive : axisLabelColorDefault"
},
"offset": {
"expr": "leftYAxisOffset"
},
"values": {
"expr": "yAxisLabelsDataValues"
},
"grid": false,
"format": {
"custom": true,
"mapName": "yAxis"
}
}
}
},
"name": "current-value-circle",
"description": "Circle at the end of the line on the current data point",
"mark": {
"filled": true,
"fill": {
"expr": "lastPointCircleMode === 'empty' ? currentValueCircleColor2 : currentValueCircleColor1"
},
"size": {
"expr": "datum.point*currentValueCircleSize"
},
"opacity": 1,
"stroke": {
"expr": "lastPointCircleMode === 'empty' ? currentValueCircleColor1 : currentValueCircleColor2 "
},
"strokeWidth": {
"expr": "currentValueCircleStrokeWidth"
},
"type": "point"
}
},
{
"mark": {
"fontSize": {
"expr": "currentValueFontSize"
},
"font": {
"expr": "currentValueFontFace"
},
"fontWeight": {
"expr": "currentValueFontWeight"
},
"align": "left",
"text": {
"expr": "datum.point === 1 ? datum.formattedRawValue : \"\""
},
"dx": {
"expr": "currentValuePadding"
},
"type": "text"
},
"encoding": {
"y": {
"axis": null,
"field": "rawValue",
"type": "quantitative"
}
},
"name": "current-value-text",
"description": "The current value text after the end of the line"
}
],
"width": "container"
},
"generation_id": ""
}
}
]
},
{
"type": "top",
"insights": [
{
"result": {
"type": "unusualchange",
"version": 1,
"content": "",
"markup": "<span data-type=\"metric\">Pulse Metric</span> in Q2 2025 was 135.0K units and was <span data-type=\"insight-type-keyword\">within the expected range</span> of 109.6K units to 175.7K units considering seasonal patterns.",
"viz": {
"layer": [
{
"mark": {
"color": {
"expr": "normalRangeColor"
},
"opacity": {
"expr": "normalRangeOpacity"
},
"borders": {
"color": {
"expr": "lineColor"
},
"opacity": {
"expr": "normalRangeOpacity"
},
"strokeWidth": {
"expr": "normalRangeStrokeWidth"
}
},
"type": "errorband"
},
"encoding": {
"y": {
"field": "ci1",
"type": "quantitative",
"scale": {
"zero": false
},
"title": "Normal range",
"axis": null
},
"y2": {
"field": "ci0"
}
},
"name": "normal-range",
"description": "The normal range band around the line"
},
{
"encoding": {
"detail": {
"field": "segment",
"type": "nominal"
},
"color": {
"field": "changeSentiment",
"type": "ordinal",
"legend": null
},
"strokeDash": {
"condition": {
"test": "datum.dashed",
"value": {
"expr": "lineStrokeDash"
}
},
"field": "dashed",
"type": "nominal",
"legend": null
},
"y": {
"field": "rawValue",
"type": "quantitative",
"axis": null
}
},
"name": "line",
"description": "The line based of time series data",
"mark": {
"type": "line",
"clip": true,
"stroke": {
"expr": "\n if(datum.changeSentiment === 'positive', colorDesiredChange,\n if(datum.changeSentiment === 'negative', colorUndesiredChange, lineColor)\n )\n "
},
"strokeWidth": {
"expr": "lineStrokeWidth"
},
"opacity": 1
}
},
{
"name": "left-x-axis-overlay",
"description": "Manual left x-axis grid line to overlay the errorband that occludes the real axis grid line",
"mark": {
"color": {
"expr": "xAxisGridColorDefault"
},
"opacity": {
"expr": "length(data('series')) > 0 && datum.truncDate === peek(data('series')).truncDate ? 1 : 0"
},
"type": "rule"
}
},
{
"description": "Circle for isolated points in data series",
"mark": {
"filled": true,
"fill": {
"expr": "currentValueCircleColor1"
},
"size": {
"expr": "datum.showIsolatedPoint*currentValueCircleSize"
},
"opacity": 1,
"strokeWidth": {
"expr": "currentValueCircleStrokeWidth"
},
"type": "point"
},
"encoding": {
"y": {
"field": "rawValue",
"type": "quantitative",
"axis": null
}
},
"name": "isolated-point-value-circle"
},
{
"encoding": {
"y": {
"field": "rawValue",
"type": "quantitative",
"axis": {
"labelBaseline": {
"condition": {
"test": "datum.value === 0",
"value": "bottom"
},
"value": "middle"
},
"offset": {
"expr": "leftYAxisOffset"
},
"values": {
"expr": "yAxisLabelsDataValues"
},
"grid": false,
"format": {
"custom": true,
"mapName": "yAxis"
},
"labelAlign": "right"
}
}
},
"name": "current-value-circle",
"description": "Circle at the end of the line on the current data point",
"mark": {
"stroke": {
"expr": "lastPointCircleMode === 'empty' ? currentValueCircleColor1 : currentValueCircleColor2 "
},
"strokeWidth": {
"expr": "currentValueCircleStrokeWidth"
},
"type": "point",
"filled": true,
"fill": {
"expr": "\n if(lastPointCircleMode === 'empty', currentValueCircleColor2,\n if(datum.changeSentiment === 'positive', colorDesiredChange,\n if(datum.changeSentiment === 'negative', colorUndesiredChange, currentValueCircleColor1)\n )\n )\n "
},
"size": {
"expr": "datum.point*currentValueCircleSize"
},
"opacity": 1
}
},
{
"description": "The current value text after the end of the line",
"mark": {
"align": "left",
"text": {
"expr": "datum.point === 1 ? datum.formattedRawValue : \"\""
},
"dx": {
"expr": "currentValuePadding"
},
"type": "text",
"color": {
"expr": "\n if(lastPointCircleMode === 'empty', currentValueColor,\n if(datum.changeSentiment === 'positive', colorDesiredChange,\n if(datum.changeSentiment === 'negative', colorUndesiredChange, currentValueColor)\n )\n )\n "
},
"fontSize": {
"expr": "currentValueFontSize"
},
"font": {
"expr": "currentValueFontFace"
},
"fontWeight": {
"expr": "currentValueFontWeight"
}
},
"encoding": {
"y": {
"field": "rawValue",
"type": "quantitative",
"axis": null
}
},
"name": "current-value-text"
},
{
"encoding": {
"opacity": {
"condition": {
"empty": false,
"value": {
"expr": "hoverVerticalLineOpacity"
},
"param": "hover"
},
"value": 0
},
"tooltip": [
{
"title": "Date",
"field": "formattedTruncDate",
"type": "ordinal"
},
{
"field": "formattedRawValue",
"type": "ordinal",
"title": "Value"
},
{
"field": "tooltipText",
"type": "nominal",
"title": "TooltipText"
},
{
"field": "tooltipMarkup",
"type": "nominal",
"title": "TooltipMarkup"
}
]
},
"params": [
{
"name": "hover",
"select": {
"on": "mouseover",
"clear": "mouseout",
"type": "point",
"fields": ["truncDate"],
"nearest": true
}
}
],
"name": "hover-tooltips",
"description": "Hover for tooltips containing a single time series data point",
"mark": {
"color": {
"expr": "hoverVerticalLineColor"
},
"type": "rule"
}
},
{
"description": "Hover dot on main line for a single time series data point",
"mark": {
"fill": {
"expr": "hoverDotColor"
},
"stroke": null,
"opacity": 1,
"type": "point",
"size": {
"expr": "hoverDotSize"
}
},
"encoding": {
"y": {
"type": "quantitative",
"axis": null,
"field": "rawValue"
},
"opacity": {
"condition": {
"value": 1,
"param": "hover",
"empty": false
},
"value": 0
}
},
"name": "hover-dot"
}
],
"resolve": {
"axis": {
"y": "independent"
}
},
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"height": "container",
"data": {
"name": "series",
"values": [
{
"formattedRawValue": "135.0K",
"formattedTruncDate": "Q2 2025",
"point": 1,
"ci0": "109561.9349",
"rawValue": "134990.5960",
"dashed": false,
"tooltipText": "",
"ci1": "175722.7311",
"truncDate": "2025-04-01T00:00:00Z",
"showIsolatedPoint": 0,
"tooltipMarkup": "<span data-type=\"period\">Q2 2025</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">135.0K (134,990.60)</span>",
"changeSentiment": "neutral",
"segment": "1"
},
{
"rawValue": "125288.8282",
"formattedRawValue": "125.3K",
"showIsolatedPoint": 0,
"changeSentiment": "neutral",
"segment": "1",
"ci0": "85415.8193",
"tooltipText": "",
"tooltipMarkup": "<span data-type=\"period\">Q1 2025</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">125.3K (125,288.83)</span>",
"point": 0,
"truncDate": "2025-01-01T00:00:00Z",
"ci1": "149951.9070",
"dashed": false,
"formattedTruncDate": "Q1 2025"
},
{
"showIsolatedPoint": 0,
"tooltipMarkup": "<span data-type=\"period\">Q4 2024</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">236.7K (236,745.24)</span>",
"segment": "1",
"truncDate": "2024-10-01T00:00:00Z",
"formattedTruncDate": "Q4 2024",
"point": 0,
"ci0": "168285.6908",
"formattedRawValue": "236.7K",
"dashed": false,
"tooltipText": "",
"rawValue": "236745.2438",
"changeSentiment": "neutral",
"ci1": "237625.9108"
},
{
"showIsolatedPoint": 0,
"truncDate": "2024-07-01T00:00:00Z",
"formattedRawValue": "145.5K",
"formattedTruncDate": "Q3 2024",
"changeSentiment": "neutral",
"point": 0,
"dashed": false,
"tooltipMarkup": "<span data-type=\"period\">Q3 2024</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">145.5K (145,538.98)</span>",
"ci1": "181915.0816",
"tooltipText": "",
"segment": "1",
"ci0": "120216.6475",
"rawValue": "145538.9762"
},
{
"truncDate": "2024-04-01T00:00:00Z",
"segment": "1",
"ci0": "90096.1571",
"formattedRawValue": "136.8K",
"formattedTruncDate": "Q2 2024",
"changeSentiment": "neutral",
"rawValue": "136809.1450",
"point": 0,
"showIsolatedPoint": 0,
"dashed": false,
"tooltipText": "",
"tooltipMarkup": "<span data-type=\"period\">Q2 2024</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">136.8K (136,809.14)</span>",
"ci1": "147232.4450"
},
{
"formattedTruncDate": "Q1 2024",
"segment": "1",
"formattedRawValue": "94.8K",
"showIsolatedPoint": 0,
"tooltipText": "",
"truncDate": "2024-01-01T00:00:00Z",
"dashed": false,
"changeSentiment": "neutral",
"ci0": "66542.0564",
"rawValue": "94840.2150",
"tooltipMarkup": "<span data-type=\"period\">Q1 2024</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">94.8K (94,840.21)</span>",
"ci1": "124277.9977",
"point": 0
},
{
"showIsolatedPoint": 0,
"formattedTruncDate": "Q4 2023",
"point": 0,
"ci0": "156012.2328",
"changeSentiment": "neutral",
"tooltipMarkup": "<span data-type=\"period\">Q4 2023</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">182.9K (182,912.25)</span>",
"segment": "1",
"ci1": "217804.5577",
"dashed": false,
"tooltipText": "",
"rawValue": "182912.2542",
"formattedRawValue": "182.9K",
"truncDate": "2023-10-01T00:00:00Z"
},
{
"formattedTruncDate": "Q3 2023",
"dashed": false,
"showIsolatedPoint": 0,
"tooltipMarkup": "<span data-type=\"period\">Q3 2023</span><span data-type=\"actual-label\">Actual</span><span data-type=\"actual-value\">130.4K (130,449.38)</span>",
"truncDate": "2023-07-01T00:00:00Z",
"rawValue": "130449.3752",
"formattedRawValue": "130.4K",
"point": 0,
"changeSentiment": "neutral",
"segment": "1",
"ci1": "155769.5390",
"tooltipText": "",
"ci0": "93831.3645"
}
]
},
"config": {
"axis": {
"labelAngle": {
"expr": "axisLabelAngle"
},
"labelFont": {
"expr": "axisLabelFontFace"
},
"labelFontSize": {
"expr": "axisLabelFontSize"
},
"ticks": false,
"domain": false,
"labelPadding": {
"expr": "axisLabelPadding"
},
"title": null,
"labelColor": {
"expr": "axisLabelColor"
},
"labelLineHeight": {
"expr": "axisLabelFontSize"
},
"labelOffset": {
"expr": "axisLabelOffset"
}
},
"customFormatTypes": true
},
"encoding": {
"x": {
"scale": {
"type": "point",
"padding": {
"expr": "xAxisScalePadding"
}
},
"field": "truncDate",
"type": "ordinal",
"axis": {
"values": {
"expr": "xAxisLabelsDataValues"
},
"labelOverlap": true,
"offset": {
"expr": "xAxisOffset"
},
"gridColor": {
"expr": "xAxisGridColorDefault",
"condition": [
{
"expr": "xAxisGridColorActive",
"test": "activeLabelAndGridDate === datum.value"
}
]
},
"labelFontWeight": {
"condition": [
{
"test": "activeLabelAndGridDate === datum.value",
"expr": "xAxisLabelFontWeightActive"
}
],
"expr": "xAxisLabelFontWeightDefault"
},
"format": {
"mapName": "xAxis",
"custom": true
},
"gridOpacity": {
"expr": "datum.index === 0 ? 0 : 1"
},
"grid": true,
"labelAlign": {
"condition": [
{
"test": "datum.index === 0",
"value": "left"
},
{
"value": "right",
"test": "datum.index === 1"
}
],
"value": "center"
}
}
}
},
"view": {
"stroke": null
},
"params": [
{
"name": "axisLabelFontFace",
"value": "'SF Pro Text', 'SF Pro Display', system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', roboto, ubuntu, 'Fire Sans', 'Helvetica Neue', sans-serif"
},
{
"value": 14,
"name": "axisLabelFontSize"
},
{
"name": "axisLabelColor",
"value": "#343A3F"
},
{
"name": "axisLabelLineHeight",
"value": 14
},
{
"value": 0,
"name": "axisLabelAngle"
},
{
"name": "axisLabelPadding",
"value": 0
},
{
"name": "axisLabelOffset",
"value": 0
},
{
"name": "currentValueCircleColor1",
"value": "#058AFF"
},
{
"name": "currentValueCircleColor2",
"value": "#fff"
},
{
"name": "currentValueCircleSize",
"value": 160
},
{
"name": "currentValueCircleStrokeWidth",
"value": 3
},
{
"name": "currentValueColor",
"value": "#040507"
},
{
"name": "currentValueFontFace",
"value": "'SF Pro Text', 'SF Pro Display', system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', roboto, ubuntu, 'Fire Sans', 'Helvetica Neue', sans-serif"
},
{
"value": 14,
"name": "currentValueFontSize"
},
{
"value": 600,
"name": "currentValueFontWeight"
},
{
"value": 10,
"name": "currentValuePadding"
},
{
"name": "hoverVerticalLineColor",
"value": "#040507"
},
{
"name": "hoverVerticalLineOpacity",
"value": 0.3
},
{
"name": "hoverDotColor",
"value": "#040507"
},
{
"name": "hoverDotSize",
"value": 80
},
{
"name": "leftYAxisOffset",
"value": 10
},
{
"name": "lineColor",
"value": "#058AFF"
},
{
"name": "lineStrokeWidth",
"value": 4
},
{
"name": "lineStrokeDash",
"value": [6, 3]
},
{
"name": "normalRangeColor",
"value": "#E3F2FF"
},
{
"name": "normalRangeOpacity",
"value": 1
},
{
"name": "normalRangeStrokeWidth",
"value": 0.5
},
{
"name": "xAxisScalePadding",
"value": -20
},
{
"name": "xAxisOffset",
"value": 20
},
{
"value": "#c9c9c9",
"name": "xAxisGridColorDefault"
},
{
"value": "#040507",
"name": "xAxisGridColorActive"
},
{
"value": "normal",
"name": "xAxisLabelFontWeightDefault"
},
{
"name": "xAxisLabelFontWeightActive",
"value": 600
},
{
"name": "colorUndesiredChange",
"value": "#F9437A"
},
{
"name": "colorDesiredChange",
"value": "#1C9B5C"
},
{
"name": "mode",
"value": "LastComplete"
},
{
"name": "xAxisLabelsDataValues",
"value": ["2023-07-01T00:00:00Z", "2025-04-01T00:00:00Z"]
},
{
"name": "yAxisLabelsDataValues",
"value": ["0.0000", "237625.9108", "118812.9554"]
},
{
"name": "lastPointCircleMode",
"value": "filled"
},
{
"name": "activeLabelAndGridDate",
"value": "2025-04-01T00:00:00Z"
}
],
"customFormatterMaps": {
"xAxis": {
"2025-04-01T00:00:00Z": "Q2 2025",
"2023-07-01T00:00:00Z": "Q3 2023"
},
"yAxis": {
"237625.9108": "237.6K",
"118812.9554": "118.8K",
"0.0000": "0"
}
},
"width": "container"
},
"facts": {
"sentiment": "neutral",
"last_complete_period": {
"granularity": "quarter",
"start_timestamp": "2025-04-01T00:00:00Z",
"end_timestamp": "2025-07-01T00:00:00Z",
"range": "Q2 2025",
"label": "Q2 2025"
},
"unusual_change_type": "notunusual",
"result_hash": "F4hh0qhCnU+hQkqqWFAyzFKngGalVQDZdO7raxcDOnU=",
"direction": "flat",
"value": {
"raw": 134990.59600000002,
"formatted": "135.0K"
},
"value_change": {
"relative": {
"raw": 0.07743521860155853,
"formatted": "7.7%"
},
"direction": "up",
"absolute": {
"formatted": "9.7K",
"raw": 9701.767800000103
}
},
"expected_value_change": {
"raw": 17353.50481379211,
"formatted": "17.4K"
}
},
"characterization": "CHARACTERIZATION_UNSPECIFIED",
"question": "Is this change unexpected?",
"score": 0.4333333333333333
},
"insight_type": "unusualchange"
}
],
"summaries": []
},
{
"type": "timely",
"insights": [],
"summaries": []
}
],
"has_errors": false,
"characterization": "CHARACTERIZATION_UNSPECIFIED"
}
}
}