How do you group Observations together in FHIR?
While an Observation should have meaning and value on its own, sometimes it makes sense to group them together.
Examples are a set of vital signs or a panel or battery of tests.
A “vital signs” panel might contain Observations with complete readings for:
- Blood pressure
- Heart rate
- Respiratory rate
- Body temperature
How do you structure this in FHIR?
The Observation hasMember element sets up a “top level” Observation as being a group that references or “has members” that make up the group. Normally it would be structured like this:
- An Observation with a code that identifies the group
- Ex: LOINC / 85353-1 for the “Vital signs panel” above
- The hasMember element populated with references to other Observations
- A number of Observations that capture each individual value
Our “vital signs” panel would contain 5 Observations. One for the group (without a value) and four more for the separate values, each with their own code and each referenced from the first Observation via the hasMember element.
Here’s a screenshot of some examples from the Firely test server.

You can search for these yourself with this simple query:
Observation?has-member:missing=false
To summarize, hasMember identifies the Observation as a group Observation. The reference links it contains point to separate Observations that make up the group.
Structuring Observations in this way makes it easier to see what is connected to what. A battery of tests or readings taken at the same time can be easily identified and distinguished from individual readings taken outside this context.
More: https://hl7.org/fhir/R4/observation-definitions.html#Observation.hasMember
---