Zum Inhalt springen

Typologie-Referenz — Spaltentypen & Roll-up

Die Typologie ist die Art, wie eine Gold-Spalte deklariert, welche Art von Wert sie ist — eine Messgroesse, ein Identifikator, ein geordneter Rang, eine Kategorie. Jede Spalte traegt ihren Typ im column_types:-Block der Entity-YAML, Geschwister zur Rollenregistrierung columns:.

Eine Zahl ohne deklarierten Typ ist undeklariert — keine Lizenz zum Raten. Der Compiler (typologycheck.py) verifiziert jede Deklaration; der KLS traegt nur Daten. Typen sind Deklarationen, keine Laufzeitdaten.

Konzeptioneller Hintergrund: Sense 54 — The Typology und Sense 53 — The Codex.

# entities/<entity>.yaml
column_types:
material_id: { kind: identifier, subkind: foreign_key, references: materials.material_id }
quantity: { kind: quantity, standard: null, rollup: additive }
unit_price: { kind: quantity, standard: iso_4217, unit: CHF, rollup: non_additive }
level: { kind: ordinal } # eine Baumtiefe — geordnet, nicht summierbar
billing_status:{ kind: category }
billing_time: { kind: temporal, subkind: instant, standard: iso_8601 }

Jeder Eintrag deklariert genau ein kind, plus optionale Verfeinerungen.

Jede Spalte ist genau eine:

ArtWas es istBeispiele
quantityEin gemessener Wert mit Einheiten und (meist) Unsicherheitmass_g, temperature_c, unit_price
identifierEin Schluessel, der eine Entitaet identifiziert — primaer, fachlich, extern, Fremdschluesselsensor_id, serial_number, iso_country_code
categoryEin Wert aus einem begrenzten, ungeordneten Vokabularstatus, event_type, region_name
ordinalEin Wert aus einer geordneten Skala — Rang / Grad / Stufe. Ordnungsfaehig, aber nicht summierbarlevel (Hierarchietiefe), severity_rank
temporalEin zeitfoermiger Wert — Zeitpunkt, Intervall, Dauer, Periodephenomenon_time, deployment_window
booleanZweiwertige Wahrheit (optional ein dritter Zustand)is_active, has_calibration
narrativeUnkontrollierter Text zum Lesen durch Menschen, nicht zum Gruppieren oder Filternnotes, interpretation
geometryStrukturierte raeumliche Daten mit einem Koordinatenreferenzsystemboundary_geojson

Die Grenze zwischen category und ordinal ist die Ordnung: eine Kategorie ist eine schlichte Menge (Status, Ereignistypen); ein Ordinal ist eine gereihte Skala, in der min/max/median sinnvoll sind, eine Summe aber nicht (Rang 1 + Rang 2 ≠ Rang 3).

FeldGilt fuerBedeutung
kindalleEine der acht Arten oben (erforderlich)
subkindalleVerfeinert die Art — identifier.foreign_key, temporal.instant, geometry.polygon
standardquantity, temporal, geometryEine Codex-Standard-ID (ucum, iso_4217, iso_8601, rfc_7946_geojson). Der Pruefer erzwingt, dass sie die Art legal bindet
unitquantityStatische Einheit — UCUM fuer physikalische Groessen, ein ISO-4217-Code (CHF) fuer Waehrung
unit_columnquantityPolymorphe Einheit — pro Zeile in einer Geschwisterspalte getragen (log-foermige Daten)
referencesidentifier.foreign_keyFremdschluessel-Ziel als entity.column
derived_fromquantity{entity, column, standard} — eine typisierte Kante: diese Spalte wird aus einer anderen durch eine zitierte Umrechnung erzeugt
rollupquantityRoll-up-Richtlinie eine Hierarchie hinauf — siehe unten

Roll-up — wie eine Messgroesse eine Hierarchie hinauf aggregiert

Abschnitt betitelt „Roll-up — wie eine Messgroesse eine Hierarchie hinauf aggregiert“

rollup beantwortet: wenn diese Spalte ueber die Kinder eines Hierarchieknotens zusammengefasst wird (die Level Ladder — siehe Sense 42 — The Landscape), was ist das ehrliche Aggregat? Es ist eine Eigenschaft des Typs (intensiv vs. extensiv), keine Anzeige-Konfiguration — es kaskadiert nie und ueberschreibt nie.

WertAggregatVerwendung fuer
additiveSUMExtensive Groessen — Zaehlungen, Lasten, Geldsummen. Summieren ist ehrlich
averageableAVGIntensive Groessen, die sich mitteln lassen — eine bereits pro Einheit normalisierte Rate
non_additiverollt nichtPreise, Extrema (min/max), Verhaeltnisse, Prozentwerte, vorberechnete Mittelwerte. Weder Summe noch Mittel ist ehrlich
distinct_countCOUNT(DISTINCT …), neu berechnet ueber den TeilbaumGruppenwerte, die Neuberechnung statt Aggregation der Teile brauchen (distinct-einer-Vereinigung ≠ Summe-der-distinct-Werte)

Eine knoteuebergreifende Summe und ein Anteil in % sind nur fuer additive sinnvoll — die „Summe” einer Menge von Mittelwerten oder distinct-Zaehlungen ist nicht ihre Summe.

rollup an einer Messgroesse wegzulassen ist keine Anweisung zu summieren. Ein undeklariertes Rollup bedeutet, dass die Groesse ueberhaupt nicht hinaufrollt — denn Raten ist die falsche Handlung. Eine Deklaration heisst, ein Mensch hat entschieden, aktenkundig; ein stiller Standard heisst, die Engine hat entschieden, unsichtbar, wo eine falsche Zahl genau wie eine richtige aussieht. Siehe das Prinzip „keine stillen verhaltensbestimmenden Standards” (Sense 54 — The Typology). Die Typologie-Abdeckung zaehlt eine Messgroesse ohne Rollup als Luecke, sodass eine nicht rollende Groesse sichtbar ist, nicht nur still wirkungslos.

ordinal, category, identifier usw. tragen kein rollup — sie werden nicht eine Hierarchie hinauf summiert.

jin make baeckt eine reine Inspektor-Tabelle typology_coverage pro Entitaet: typisierte / untypisierte / Phantom-Spalten und einen Abdeckungsgrad in %. Vollstaendige Abdeckung — jede Gold-Spalte typisiert, jedes Rollup einer Messgroesse deklariert — ist eine Data-Engineering-Anforderung, keine zu optimierende Kennzahl. Den vollstaendigen Typ einer einzelnen Spalte am Einsatzpunkt inspizieren Sie ueber den Column Passport.

Terminal-Fenster
# Jede column_types-Deklaration validieren (kind + Codex-Bindung + Rollup-Vokabular)
python3 scripts/typologycheck.py
python3 scripts/typologycheck.py entities/cases.yaml # eine oder mehrere explizite Dateien
# Die Inspektor-Tabellen backen (laeuft in `jin make` als Post-dbt-Schritt)
python3 scripts/typologycompile.py --kls <kls> --tenant <t> --entities-root <afs>/entities
jazzisnow jinflow is a jazzisnow product
v0.64.7 · built 2026-09-20 19:48 UTC