Skip to main content

patient

One row per person per source system. This is the demographic spine of the warehouse: every clinical and financial fact ultimately hangs off a person_id found here. Because the grain includes data_source, a single real-world individual appears once per contributing system until identity resolution collapses them; use person_id_crosswalk to trace how source identifiers were mapped onto a person_id.

At a glance

Schemadax_core
Tablepatient
LayerCore Data Model
Object typetable
Columns26
Grainperson_id, data_source
Tagscore

Columns

ColumnTypeKeyTerminologyConstraintsDescription
person_idvarcharPKnot nullDax identifier for the individual. Stable across refreshes and the join key used by every other table in the core layer.
sexvarcharSexNormalized administrative sex.
racevarcharRaceNormalized race value.
birth_datedateDate of birth, used to derive age and age_group.
death_datedateDate of death where reported by a source system.
death_flagintegerSet when any source reported the person as deceased. Check this rather than testing death_date for null, since some sources report the fact of death without a date.
name_suffixvarchar
first_namevarcharGiven name. Direct identifier.
middle_namevarchar
last_namevarcharFamily name. Direct identifier.
social_security_numbervarcharDirect identifier. Restrict access to this column; it is present to support identity resolution, not analytics.
addressvarchar
cityvarchar
statevarcharState or province of residence.
zip_codevarcharPostal code of residence, commonly used for geographic rollups.
countyvarcharCounty of residence.
latitudefloat
longitudefloat
phonevarchar
emailvarchar
ethnicityvarcharEthnicityNormalized ethnicity value.
ageintegerAge in years as of the most recent warehouse build.
age_groupvarcharBanded age, for cohorting and reporting without exposing exact age.
ingest_datetimetimestampWhen the source record was loaded into the input layer.
dax_last_runtimestampTimestamp of the warehouse build that produced this row. Present on every core table, so you can confirm you are reading current data.
data_sourcevarcharPKnot nullLabel for the contributing system. Part of the grain, so always include it when joining or de-duplicating across sources.

Querying

select *
from dax_core.patient
limit 100;