Funnel Health Bullet Graph

Bullet layout transforms derive bands, measures, and target markers from raw thresholds.

Bullet Graph

Data Sources

6

Fields

19

Scales

2

Layers

8

Glyphs

37

line 16 / rect 12 / text 9

Conversion Poor: 0 to 0.4Conversion Satisfactory: 0.4 to 0.7Conversion Good: 0.7 to 0.9Retention Poor: 0 to 0.6Retention Satisfactory: 0.6 to 0.7Retention Good: 0.7 to 0.9Activation Poor: 0 to 0.4Activation Satisfactory: 0.4 to 0.6Activation Good: 0.6 to 0.80%20%40%60%80%100%Conversion: 0.7Retention: 0.7Activation: 0.6Conversion target: 0.8Retention target: 0.8Activation target: 0.7ConversionRetentionActivation

Data Flow Diagram

0/374 nodes
0/679 edges
374 hidden

Select a glyph to highlight its complete source path.

Scope

Roles

source
transform
field
scale
layer
param
glyph

No matching flow nodes

Adjust search, scope, or role filters.

Available Data

6 tables
3 transforms

Raw bullet metrics

raw-bullets
raw
8 columns
feeds bullet-range-layout
feeds bullet-measure-layout
feeds bullet-target-layout

ChartSpec

{
  "id": "gallery.bullet-graph",
  "data": [
    {
      "id": "raw-bullets",
      "rows": 3
    },
    {
      "id": "bullet-ranges",
      "rows": 9
    },
    {
      "id": "bullet-measures",
      "rows": 3
    },
    {
      "id": "bullet-targets",
      "rows": 3
    },
    {
      "id": "__guide.x-grid",
      "rows": 6
    },
    {
      "id": "__guide.x",
      "rows": 6
    }
  ],
  "transforms": [
    {
      "id": "bullet-range-layout",
      "type": "layout",
      "input": "raw-bullets",
      "output": "bullet-ranges",
      "options": {
        "layout": "plot",
        "layoutKind": "bulletRanges"
      }
    },
    {
      "id": "bullet-measure-layout",
      "type": "layout",
      "input": "raw-bullets",
      "output": "bullet-measures",
      "options": {
        "layout": "plot",
        "layoutKind": "bulletMeasure",
        "labelField": "metric",
        "value": "actual"
      }
    },
    {
      "id": "bullet-target-layout",
      "type": "layout",
      "input": "raw-bullets",
      "output": "bullet-targets",
      "options": {
        "layout": "plot",
        "layoutKind": "bulletTarget",
        "labelField": "metric",
        "value": "target"
      }
    }
  ],
  "axes": [
    {
      "id": "x",
      "scale": "x",
      "orientation": "bottom",
      "tickFormat": {
        "style": "percent",
        "maximumFractionDigits": 0
      }
    }
  ],
  "grids": [
    {
      "id": "x-grid",
      "scale": "x",
      "orientation": "x"
    }
  ],
  "fields": [
    "metric",
    "start",
    "end",
    "centerY",
    "rangeLabel",
    "y",
    "height",
    "target",
    "y1",
    "y2",
    "poor",
    "satisfactory",
    "good",
    "actual",
    "rangeIndex",
    "tooltip",
    "value",
    "labelX",
    "label"
  ],
  "scales": [
    {
      "id": "x",
      "type": "linear",
      "domain": {
        "source": "values",
        "values": [
          0,
          1
        ]
      }
    },
    {
      "id": "rangeFill",
      "type": "ordinal",
      "domain": {
        "source": "field",
        "data": "bullet-ranges",
        "field": "rangeLabel"
      }
    }
  ],
  "layers": [
    {
      "id": "x-grid",
      "mark": "line",
      "role": "guide"
    },
    {
      "id": "x-axis",
      "mark": "line",
      "role": "guide"
    },
    {
      "id": "x-tick-marks",
      "mark": "line",
      "role": "guide"
    },
    {
      "id": "x-labels",
      "mark": "text",
      "role": "guide"
    },
    {
      "id": "qualitative-ranges",
      "mark": "rect",
      "role": "context"
    },
    {
      "id": "actual-measures",
      "mark": "rect",
      "role": "data"
    },
    {
      "id": "target-markers",
      "mark": "line",
      "role": "data"
    },
    {
      "id": "metric-labels",
      "mark": "text",
      "role": "guide"
    }
  ]
}

Resolved SceneGraph

{
  "scene": "gallery.bullet-graph.scene",
  "scales": [
    {
      "id": "x",
      "type": "linear",
      "domain": [
        0,
        1
      ],
      "range": [
        152,
        778
      ],
      "ticks": [
        0,
        0.2,
        0.4,
        0.6000000000000001,
        0.8,
        1
      ]
    },
    {
      "id": "rangeFill",
      "type": "ordinal",
      "domain": [
        "Poor",
        "Satisfactory",
        "Good"
      ],
      "range": [
        "var(--colors-gray-3)",
        "var(--colors-gray-5)",
        "var(--colors-gray-7)"
      ]
    }
  ],
  "layers": [
    {
      "id": "x-grid",
      "role": "guide",
      "zIndex": 0,
      "glyphs": 6
    },
    {
      "id": "x-axis",
      "role": "guide",
      "zIndex": 0,
      "glyphs": 1
    },
    {
      "id": "x-tick-marks",
      "role": "guide",
      "zIndex": 5,
      "glyphs": 6
    },
    {
      "id": "qualitative-ranges",
      "role": "context",
      "zIndex": 5,
      "glyphs": 9
    },
    {
      "id": "x-labels",
      "role": "guide",
      "zIndex": 20,
      "glyphs": 6
    },
    {
      "id": "actual-measures",
      "role": "data",
      "zIndex": 20,
      "glyphs": 3
    },
    {
      "id": "target-markers",
      "role": "data",
      "zIndex": 30,
      "glyphs": 3
    },
    {
      "id": "metric-labels",
      "role": "guide",
      "zIndex": 40,
      "glyphs": 3
    }
  ]
}

Glyph Data Tree

8 layers

Full parameter lineage for the active compiler surface.

x-grid

6

x-axis

1

x-tick-marks

6

qualitative-ranges

9

x-labels

6

actual-measures

3

target-markers

3

metric-labels

3

Glyph Inspector

none

Select a glyph in the chart to inspect resolved params and lineage.