The MEASUREMENT table contains records of Measurements,
i.e. structured values (numerical or categorical) obtained through
systematic and standardized examination or testing of a Person or
Person’s sample. The MEASUREMENT table contains both orders and
results of such Measurements as laboratory tests, vital signs,
quantitative findings from pathology reports, etc. Measurements are
stored as attribute value pairs, with the attribute as the Measurement
Concept and the value representing the result. The value can be a
Concept (stored in VALUE_AS_CONCEPT), or a numerical value
(VALUE_AS_NUMBER) with a Unit (UNIT_CONCEPT_ID). The Procedure for
obtaining the sample is housed in the PROCEDURE_OCCURRENCE table,
though it is unnecessary to create a PROCEDURE_OCCURRENCE record for
each measurement if one does not exist in the source data.
Measurements differ from Observations in that they require a
standardized test or some other activity to generate a quantitative or
qualitative result. If there is no result, it is assumed that the lab
test was conducted but the result was not captured.
Measurements are predominately lab tests with a few exceptions, like
blood pressure or function tests. Results are given in the form of a
value and unit combination. When investigating measurements, look for
operator_concept_ids (<, >, etc.).
Only records where the source value maps to a Concept in the
measurement domain should be included in this table. Even though each
Measurement always has a result, the fields VALUE_AS_NUMBER and
VALUE_AS_CONCEPT_ID are not mandatory as often the result is not given
in the source data. When the result is not known, the Measurement
record represents just the fact that the corresponding Measurement was
carried out, which in itself is already useful information for some
use cases. For some Measurement Concepts, the result is included in
the test. For example, ICD10 CONCEPT_ID 45548980 ‘Abnormal
level of unspecified serum enzyme’ indicates a Measurement and the
result (abnormal). In those situations, the CONCEPT_RELATIONSHIP table
in addition to the ‘Maps to’ record contains a second record with the
relationship_id set to ‘Maps to value’. In this example, the ‘Maps to’
relationship directs to 4046263 ‘Enzyme
measurement’ as well as a ‘Maps to value’ record to 4135493 ‘Abnormal’.
CDM Field
|
User Guide
|
ETL Conventions
|
Datatype
|
Required
|
Primary Key
|
Foreign Key
|
FK Table
|
FK Domain
|
measurement_id
|
The unique key given to a Measurement record for a Person. Refer
to the ETL for how duplicate Measurements during the same Visit
were handled.
|
Each instance of a measurement present in the source data should
be assigned this unique key. In some cases, a person can have
multiple records of the same measurement within the same visit. It
is valid to keep these duplicates and assign them individual,
unique, MEASUREMENT_IDs, though it is up to the ETL how they
should be handled.
|
integer
|
Yes
|
Yes
|
No
|
|
|
person_id
|
The PERSON_ID of the Person for whom the Measurement is recorded.
This may be a system generated code.
|
|
integer
|
Yes
|
No
|
Yes
|
PERSON
|
|
measurement_concept_id
|
The MEASUREMENT_CONCEPT_ID field is recommended for primary use in
analyses, and must be used for network studies.
|
The CONCEPT_ID that the MEASUREMENT_SOURCE_CONCEPT_ID maps to.
Only records whose SOURCE_CONCEPT_IDs map to Standard Concepts
with a domain of “Measurement” should go in this table.
|
integer
|
Yes
|
No
|
Yes
|
CONCEPT
|
Measurement
|
measurement_date
|
Use this date to determine the date of the measurement.
|
If there are multiple dates in the source data associated with a
record such as order_date, draw_date, and result_date, choose the
one that is closest to the date the sample was drawn from the
patient.
|
date
|
Yes
|
No
|
No
|
|
|
measurement_datetime
|
|
This is not required, though it is in v6. If a source does not
specify datetime the convention is to set the time to midnight
(00:00:0000)
|
datetime
|
No
|
No
|
No
|
|
|
measurement_time
|
|
This is present for backwards compatibility and will be deprecated
in an upcoming version.
|
varchar(10)
|
No
|
No
|
No
|
|
|
measurement_type_concept_id
|
This field can be used to determine the provenance of the
Measurement record, as in whether the measurement was from an EHR
system, insurance claim, registry, or other sources.
|
Choose the MEASUREMENT_TYPE_CONCEPT_ID that best represents the
provenance of the record, for example whether it came from an EHR
record or billing claim. Accepted
Concepts. A more detailed explanation of each Type
Concept can be found on the vocabulary
wiki.
|
integer
|
Yes
|
No
|
Yes
|
CONCEPT
|
Type Concept
|
operator_concept_id
|
The meaning of Concept 4172703 for
‘=’ is identical to omission of a OPERATOR_CONCEPT_ID value. Since
the use of this field is rare, it’s important when devising
analyses to not to forget testing for the content of this field
for values different from =.
|
Operators are =, > and these concepts belong to the ‘Meas Value
Operator’ domain. Accepted
Concepts.
|
integer
|
No
|
No
|
Yes
|
CONCEPT
|
|
value_as_number
|
This is the numerical value of the Result of the Measurement, if
available. Note that measurements such as blood pressures will be
split into their component parts i.e. one record for systolic, one
record for diastolic.
|
If there is a negative value coming from the source, set the
VALUE_AS_NUMBER to NULL, with the exception of the following
Measurements (listed as LOINC codes): - 1925-7 Base
excess in Arterial blood by calculation - 1927-3 Base
excess in Venous blood by calculation - 8632-2 QRS-Axis
- 11555-0 Base
excess in Blood by calculation - 1926-5 Base
excess in Capillary blood by calculation - 28638-5 Base
excess in Arterial cord blood by calculation 28639-3 Base
excess in Venous cord blood by calculation
|
float
|
No
|
No
|
No
|
|
|
value_as_concept_id
|
If the raw data gives a categorial result for measurements those
values are captured and mapped to standard concepts in the ‘Meas
Value’ domain.
|
If the raw data provides categorial results as well as continuous
results for measurements, it is a valid ETL choice to preserve
both values. The continuous value should go in the VALUE_AS_NUMBER
field and the categorical value should be mapped to a standard
concept in the ‘Meas Value’ domain and put in the
VALUE_AS_CONCEPT_ID field. This is also the destination for the
‘Maps to value’ relationship.
|
integer
|
No
|
No
|
Yes
|
CONCEPT
|
|
unit_concept_id
|
There is currently no recommended unit for individual
measurements, i.e. it is not mandatory to represent Hemoglobin a1C
measurements as a percentage. UNIT_SOURCE_VALUES should be mapped
to a Standard Concept in the Unit domain that best represents the
unit as given in the source data.
|
There is no standardization requirement for units associated with
MEASUREMENT_CONCEPT_IDs, however, it is the responsibility of the
ETL to choose the most plausible unit.
|
integer
|
No
|
No
|
Yes
|
CONCEPT
|
Unit
|
range_low
|
Ranges have the same unit as the VALUE_AS_NUMBER. These ranges are
provided by the source and should remain NULL if not given.
|
If reference ranges for upper and lower limit of normal as
provided (typically by a laboratory) these are stored in the
RANGE_HIGH and RANGE_LOW fields. This should be set to NULL if not
provided.
|
float
|
No
|
No
|
No
|
|
|
range_high
|
Ranges have the same unit as the VALUE_AS_NUMBER. These ranges are
provided by the source and should remain NULL if not given.
|
If reference ranges for upper and lower limit of normal as
provided (typically by a laboratory) these are stored in the
RANGE_HIGH and RANGE_LOW fields. This should be set to NULL if not
provided.
|
float
|
No
|
No
|
No
|
|
|
provider_id
|
The provider associated with measurement record, e.g. the provider
who ordered the test or the provider who recorded the result.
|
The ETL may need to make a choice as to which PROVIDER_ID to put
here. Based on what is available this may or may not be different
than the provider associated with the overall VISIT_OCCURRENCE
record. For example the admitting vs attending physician on an EHR
record.
|
integer
|
No
|
No
|
Yes
|
PROVIDER
|
|
visit_occurrence_id
|
The visit during which the Measurement occurred.
|
Depending on the structure of the source data, this may have to be
determined based on dates. If a MEASUREMENT_DATE occurs within the
start and end date of a Visit it is a valid ETL choice to choose
the VISIT_OCCURRENCE_ID from the visit that subsumes it, even if
not explicitly stated in the data. While not required, an attempt
should be made to locate the VISIT_OCCURRENCE_ID of the
measurement record. If a measurement is related to a visit
explicitly in the source data, it is possible that the result date
of the Measurement falls outside of the bounds of the Visit dates.
|
integer
|
No
|
No
|
Yes
|
VISIT_OCCURRENCE
|
|
visit_detail_id
|
The VISIT_DETAIL record during which the Measurement occurred. For
example, if the Person was in the ICU at the time the
VISIT_OCCURRENCE record would reflect the overall hospital stay
and the VISIT_DETAIL record would reflect the ICU stay during the
hospital visit.
|
Same rules apply as for the VISIT_OCCURRENCE_ID.
|
integer
|
No
|
No
|
Yes
|
VISIT_DETAIL
|
|
measurement_source_value
|
This field houses the verbatim value from the source data
representing the Measurement that occurred. For example, this
could be an ICD10 or Read code.
|
This code is mapped to a Standard Measurement Concept in the
Standardized Vocabularies and the original code is stored here for
reference.
|
varchar(50)
|
No
|
No
|
No
|
|
|
measurement_source_concept_id
|
This is the concept representing the MEASUREMENT_SOURCE_VALUE and
may not necessarily be standard. This field is discouraged from
use in analysis because it is not required to contain Standard
Concepts that are used across the OHDSI community, and should only
be used when Standard Concepts do not adequately represent the
source detail for the Measurement necessary for a given analytic
use case. Consider using MEASUREMENT_CONCEPT_ID instead to enable
standardized analytics that can be consistent across the network.
|
If the MEASUREMENT_SOURCE_VALUE is coded in the source data using
an OMOP supported vocabulary put the concept id representing the
source value here.
|
integer
|
No
|
No
|
Yes
|
CONCEPT
|
|
unit_source_value
|
This field houses the verbatim value from the source data
representing the unit of the Measurement that occurred.
|
This code is mapped to a Standard Condition Concept in the
Standardized Vocabularies and the original code is stored here for
reference.
|
varchar(50)
|
No
|
No
|
No
|
|
|
unit_source_concept_id
|
“This is the concept representing the UNIT_SOURCE_VALUE and may
not necessarily be standard. This field is discouraged from use in
analysis because it is not required to contain Standard Concepts
that are used across the OHDSI community, and should only be used
when Standard Concepts do not adequately represent the source
detail for the Measurement necessary for a given analytic use
case. Consider using UNIT_CONCEPT_ID instead to enable
standardized analytics that can be consistent across the network.”
|
If the UNIT_SOURCE_VALUE is coded in the source data using an OMOP
supported vocabulary put the concept id representing the source
value here.
|
integer
|
No
|
No
|
Yes
|
CONCEPT
|
|
value_source_value
|
This field houses the verbatim result value of the Measurement
from the source data .
|
If both a continuous and categorical result are given in the
source data such that both VALUE_AS_NUMBER and VALUE_AS_CONCEPT_ID
are both included, store the verbatim value that was mapped to
VALUE_AS_CONCEPT_ID here.
|
varchar(50)
|
No
|
No
|
No
|
|
|
measurement_event_id
|
If the Measurement record is related to another record in the
database, this field is the primary key of the linked record.
|
Put the primary key of the linked record, if applicable, here.
|
integer
|
No
|
No
|
No
|
|
|
meas_event_field_concept_id
|
If the Measurement record is related to another record in the
database, this field is the CONCEPT_ID that identifies which table
the primary key of the linked record came from.
|
Put the CONCEPT_ID that identifies which table and field the
MEASUREMENT_EVENT_ID came from.
|
integer
|
No
|
No
|
Yes
|
CONCEPT
|
|