Filters restrict which data rows are returned by a query. They’re the most fundamental building block — 98.5% of all HRM components have at least one filter. Without filters, you’d get the entire dataset; with them, you get exactly the slice you need.

📋 Filter Structure

filters:
- member: cube.fieldName
  operator: equals
  values:
  - "value1"
  - "value2"

⚖️ Filter Operators

Operator Description Example
equals Exact match (most common) values: ["Q-193"]
notEquals Exclusion values: ["excluded_value"]
gt Greater than values: ["100"]
gte Greater than or equal values: ["0"]
afterDate Date after values: ["1999"]
beforeDate Date before values: ["2025"]
set Value is not null (no values needed)

📌 Static Filters

Hardcoded values that don’t change with user interaction:

filters:
# Filter by question key — every chart has this
- member: hrmOptionDistributionAcademics.questionKey
  operator: equals
  values:
  - Q-193

# Filter by survey period
- member: hrmOptionDistributionAcademics.periodFilter
  operator: equals
  values:
  - Jan 25

# Filter by comparison period (for delta charts)
- member: hrmOptionDistributionAcademics.periodCompare
  operator: equals
  values:
  - Jul 24

# Filter specific answer options (for score components)
- member: hrmOptionDistributionAcademics.optionText
  operator: equals
  values:
  - ">>"
  - stimme zu

🔄 Dynamic Filters (Parameters)

Filters bound to user selections in the UI. The parameter field references a runtime variable:

filters:
- member: hrmOptionDistributionAcademics.geschlechtFilter
  operator: equals
  parameter: "$param_geschlecht_zielgruppe"

- member: hrmOptionDistributionAcademics.berufsgruppeFilter
  operator: equals
  parameter: "$param_berufsgruppe_zielgruppe"

- member: hrmOptionDistributionAcademics.berufserfahrungFilter
  operator: equals
  parameter: "$param_berufserfahrung_zielgruppe"

- member: hrmOptionDistributionAcademics.migrationFilter
  operator: equals
  parameter: "$param_migration_zielgruppe"

- member: hrmOptionDistributionAcademics.regionFilter
  operator: equals
  parameter: "$param_region_zielgruppe"

Standard HRM Filter Parameters

Every HRM chart with demographic filtering uses these 5 parameter pairs:

Parameter (Zielgruppe) Parameter (Vergleichsgruppe) UI Label
$param_geschlecht_zielgruppe $param_geschlecht_vergleichsgruppe Geschlecht
$param_berufsgruppe_zielgruppe $param_berufsgruppe_vergleichsgruppe Berufsgruppe
$param_berufserfahrung_zielgruppe $param_berufserfahrung_vergleichsgruppe Berufserfahrung
$param_migration_zielgruppe $param_migration_vergleichsgruppe Migrationshintergrund
$param_region_zielgruppe $param_region_vergleichsgruppe Region

When a parameter is empty/unset, the filter is effectively ignored (returns all values).

📅 Date Filters

Used for time-series data (e.g., Marktdaten in Schüler_innen):

filters:
- member: HrmScholarBundesland.stichtag
  operator: afterDate
  values:
  - '1999'
- member: HrmScholarBundesland.stichtag
  operator: beforeDate
  values:
  - '2024'

Filter + Parameter on same field

A filter can combine static values with a dynamic parameter. If the parameter is set, it overrides the static value:

- member: cube.periodFilter
  operator: equals
  values:
  - Jan 25  # Default
  parameter: "$param_period_filter_zielgruppe"  # Override if user selects