Skip to content

Parameter Reference

WONDER queries are XML documents with five parameter types: B (group-by), M (measures), F (filters), V (value lists), and O (options/mode selectors). The LLM builder handles these automatically, but understanding the structure helps when you need to hand-edit XML or debug unexpected results.

Parameter types overview

Prefix Full name Role
B_* Group-by Columns to group results by (dimensions)
M_* Measure Metrics to include (death count, crude rate, AAR)
F_* Filter Restrict to a subset (year range, state, race, ICD code)
V_* Value Multi-select list for a filter (used with F_*)
O_* Option / mode Mode selectors that must align with active filters

B — Group-by parameters

B_1 is the primary group-by; B_2, B_3, B_4 are additional dimensions.

D176/D157/D77 common group-by codes

Code Description
D176.V1-level1 Year
D176.V9-level1 State (2-letter FIPS label)
D176.V9-level2 County
D176.V10 Census Region (4 regions)
D176.V27-level1 HHS Region (10 regions)
D176.V5 Age group
D176.V6 Gender
D176.V7 Race (bridged, 5 groups)
D176.V8 Hispanic origin
D176.V17 Race × Hispanic origin
D176.V25 ICD-10 cause of death (chapter/section)

Tip

The LLM builder sets these automatically. To see what was generated, run wonder build and inspect the XML.


M — Measure parameters

Common measures (set to D176.M1, D176.M2, etc.):

Code Measure
D176.M1 Deaths
D176.M2 Population
D176.M3 Crude Rate
D176.M31 Standard Error (Crude Rate)
D176.M32 95% CI — Lower (Crude Rate)
D176.M33 95% CI — Upper (Crude Rate)
D176.M4 Age-Adjusted Rate
D176.M41 Standard Error (AAR)
D176.M42 95% CI — Lower (AAR)
D176.M43 95% CI — Upper (AAR)

F — Filter parameters

Filters restrict the query. The filter parameter specifies a dimension; its value is the selected option.

Year filter

<!-- Single year -->
<F_D176.V1 value="2023"/>

<!-- Year range -->
<F_D176.V1 value="2018" value2="2023"/>

<!-- List of years -->
<V_D176.V1 value="2020"/>
<V_D176.V1 value="2021"/>
<V_D176.V1 value="2022"/>

State filter

<!-- All states -->
<F_D176.V9 value="*All*"/>

<!-- Single state (FIPS code) -->
<F_D176.V9 value="48"/>  <!-- Texas -->

<!-- Multiple states -->
<V_D176.V9 value="06"/>  <!-- California -->
<V_D176.V9 value="36"/>  <!-- New York -->
<V_D176.V9 value="48"/>  <!-- Texas -->

Age filter

<!-- All ages -->
<F_D176.V5 value="*All*"/>

<!-- Specific age group -->
<F_D176.V5 value="25-34 years"/>

<!-- Custom: 25 to 64 requires listing individual bands -->
<V_D176.V5 value="25-34 years"/>
<V_D176.V5 value="35-44 years"/>
<V_D176.V5 value="45-54 years"/>
<V_D176.V5 value="55-64 years"/>

Gender filter

<F_D176.V6 value="*All*"/>     <!-- all -->
<F_D176.V6 value="M"/>          <!-- male only -->
<F_D176.V6 value="F"/>          <!-- female only -->

Race filter (D176/D77 bridged, 5 groups)

<F_D176.V7 value="*All*"/>
<F_D176.V7 value="1"/>   <!-- White -->
<F_D176.V7 value="2"/>   <!-- Black or African American -->
<F_D176.V7 value="3"/>   <!-- American Indian or Alaska Native -->
<F_D176.V7 value="4"/>   <!-- Asian or Pacific Islander -->

Hispanic origin filter

<F_D176.V8 value="*All*"/>
<F_D176.V8 value="2135-2"/>  <!-- Hispanic or Latino -->
<F_D176.V8 value="2186-5"/>  <!-- Not Hispanic or Latino -->

ICD-10 cause of death filter (MCD)

<!-- All causes -->
<F_D176.V25 value="*All*"/>

<!-- Drug overdose (all drug-induced) -->
<F_D176.V25 value="D1"/>

<!-- Opioids (T40.0-T40.6) — requires listing individual 3-char codes -->
<V_D176.V25 value="T400"/>
<V_D176.V25 value="T401"/>
<V_D176.V25 value="T402"/>
<V_D176.V25 value="T403"/>
<V_D176.V25 value="T404"/>
<V_D176.V25 value="T405"/>
<V_D176.V25 value="T406"/>

<!-- Firearms (W32-W34, X72-X74, X93-X95, Y22-Y24) -->
<V_D176.V25 value="W32"/>
<V_D176.V25 value="W33"/>
<V_D176.V25 value="W34"/>
<V_D176.V25 value="X72"/>
<!-- ... etc -->

O — Option / mode selectors

Options are metadata flags that must match your active filters. A mismatch causes WONDER to silently ignore the filter.

Most important O parameters

Parameter Values Must match
O_age D176.V5 (age enabled), *All* (no age filter) Active age filter
O_sex D176.V6, *All* Active gender filter
O_race D176.V7, *All* Active race filter
O_hispanicOrigin D176.V8, *All* Active Hispanic filter
O_ucd D176.V25 (UCD), D176.V24 (MCD), *All* ICD filter mode
O_aar D176.M4 (include AAR), *None* (exclude) Age-adjusted rate

AAR + age group conflict

Age-adjusted rates require WONDER to sum across age groups internally. If you group by age (B_1 = D176.V5), AAR cannot be computed:

<!-- WRONG: can't compute AAR when grouping by age -->
<B_1 value="D176.V5"/>
<M_D176.M4 value="D176.M4"/>  <!-- ← WONDER ignores this silently -->

<!-- RIGHT: either group by age (no AAR) or request AAR (no age grouping) -->
<B_1 value="D176.V1"/>        <!-- group by year instead -->
<M_D176.M4 value="D176.M4"/>  <!-- AAR works now -->

The LLM builder handles this automatically.


Full XML structure for D176

Minimal valid query XML for D176:

<?xml version="1.0" encoding="UTF-8"?>
<request-parameters>
  <!-- Dataset -->
  <parameter>
    <name>dataset_code</name>
    <value>D176</value>
  </parameter>

  <!-- Group by: year and state -->
  <parameter>
    <name>B_1</name>
    <value>D176.V1-level1</value>
  </parameter>
  <parameter>
    <name>B_2</name>
    <value>D176.V9-level1</value>
  </parameter>

  <!-- Measures: deaths and crude rate -->
  <parameter>
    <name>M_D176.M1</name>
    <value>D176.M1</value>
  </parameter>
  <parameter>
    <name>M_D176.M3</name>
    <value>D176.M3</value>
  </parameter>

  <!-- Filters -->
  <parameter>
    <name>F_D176.V1</name>
    <value>2018</value>
    <value2>2024</value2>
  </parameter>
  <parameter>
    <name>F_D176.V9</name>
    <value>*All*</value>
  </parameter>
  <parameter>
    <name>F_D176.V5</name>
    <value>*All*</value>
  </parameter>
  <parameter>
    <name>F_D176.V6</name>
    <value>*All*</value>
  </parameter>
  <parameter>
    <name>F_D176.V7</name>
    <value>*All*</value>
  </parameter>
  <parameter>
    <name>F_D176.V8</name>
    <value>*All*</value>
  </parameter>
  <parameter>
    <name>F_D176.V25</name>
    <value>*All*</value>
  </parameter>

  <!-- Options: must match active filters -->
  <parameter>
    <name>O_age</name>
    <value>*All*</value>
  </parameter>
  <parameter>
    <name>O_sex</name>
    <value>*All*</value>
  </parameter>
  <parameter>
    <name>O_race</name>
    <value>*All*</value>
  </parameter>
  <parameter>
    <name>O_hispanicOrigin</name>
    <value>*All*</value>
  </parameter>
  <parameter>
    <name>O_ucd</name>
    <value>*All*</value>
  </parameter>
  <parameter>
    <name>O_aar</name>
    <value>*None*</value>
  </parameter>
</request-parameters>

Inspecting LLM-generated XML

To see exactly what parameters the LLM generated for any query, use wonder build:

uv run python -m wonder build \
  "firearm deaths by state and year 2018-2024, age-adjusted rate" \
  | python -m xml.dom.minidom /dev/stdin

This shows the full parameter list without executing the query — useful for debugging or saving a query for later reuse.