Compare a value to multiple value ranges

Hi all,

Should be a common problem to solve, yet struggling with it.

Collecting blood pressure values in a table named bloodPressure:

bloodPressureIddateTimesystolicdiastolicpulsebloodPressureClassification
2508000011/10/2023 06:30:001327677?
eb4189e711/10/2023 12:45:001337973?
8790783111/10/2023 19:45:001388475?

In order classify the measured systolic, diastolic, pulse values together, defined a reference table named bloodPressureRef:

bloodPressureRefIdsystolicMinsystolicMaxdiastolicMindiastolicMaxpulseMinpulseMaxclassification
a33697a6110120 8060100Normal
cbaaf608120129 8060100Elevated
8ff252ba130139808960100Hypertension (Stage 1)
2b2b8150140 90 60100Hypertension (Stage 1)
7abb0c4c180 120 60100Hypertension (Emergency)

I'd like add to the bloodPressure table a virtual column e.g. named bloodPressureClassification, which based on the value ranges defined by

  • systolicMin - systolicMax
  • diastolicMin - diastolicMax
  • pulseMin - pulseMax

matches the relevant bloodPresuresRef.classification value for each row in the bloodPressure table.

What would be your approach?

Many thanks,

Miklos

0 1 91
1 REPLY 1

Hi Miklos,

 

First thing is that you need to fill each blank space of your table with values (example). 

bloodPressureRefIdsystolicMinsystolicMaxdiastolicMindiastolicMaxpulseMinpulseMaxclassification
a33697a611011907960100Normal
cbaaf608120129808960100Elevated
8ff252ba130139909960100
Hypertension (Stage 1)
2b2b815014017910010960100
Hypertension (Stage 2)
7abb0c4c1801000110100060100
Hypertension (Emergency

___

That being said, there's something I don't understand, is that the blood pressure in the example don't match any class.

 

bloodPressureIddateTimesystolicdiastolicpulse
2508000011/10/2023 06:30:00132 (row of hyper tension S1)76 (row of normal)77 (row of everyclass)

What happens when your conditions match differents class ? For the example above, will it be hypertension S1 or normal ?

First thing is that you need to fill each blank space of your table with values (example). 

The formula I'm thinking of would be something like :

 

 

 

 

IF(
AND(

AND(
[systolic] >= LOOKUP("Normal", "bloodPressureRef", "classification", "systolicMin"),
[systolic] <= LOOKUP("Normal", "bloodPressureRef", "classification", "systolicMax")
),
AND(
[diastolic] >= LOOKUP("Normal", "bloodPressureRef", "classification", "diastolicMin"),
[diastolic] <= LOOKUP("Normal", "bloodPressureRef", "classification", "diastolicMax")
),
AND(
[pulse] >= LOOKUP("Normal", "bloodPressureRef", "classification", "pulseMin"),
[pulse] <= LOOKUP("Normal", "bloodPressureRef", "classification", "pulseMax")
)
),
"Normal",
IF(
AND(
AND(
[systolic] >= LOOKUP("Elevated", "bloodPressureRef", "classification", "systolicMin"),
[systolic] <= LOOKUP("Elevated", "bloodPressureRef", "classification", "systolicMax")
),
AND(
[diastolic] >= LOOKUP("Elevated", "bloodPressureRef", "classification", "diastolicMin"),
[diastolic] <= LOOKUP("Elevated", "bloodPressureRef", "classification", "diastolicMax")
),
AND(
[pulse] >= LOOKUP("Elevated", "bloodPressureRef", "classification", "pulseMin"),
[pulse] <= LOOKUP("Elevated", "bloodPressureRef", "classification", "pulseMax")
)
),
"Elevated",
IF(
AND(
AND(
[systolic] >= LOOKUP("Hypertension (Stage 1)", "bloodPressureRef", "classification", "systolicMin"),
[systolic] <= LOOKUP("Hypertension (Stage 1)", "bloodPressureRef", "classification", "systolicMax")
),
AND(
[diastolic] >= LOOKUP("Hypertension (Stage 1)", "bloodPressureRef", "classification", "diastolicMin"),
[diastolic] <= LOOKUP("Hypertension (Stage 1)", "bloodPressureRef", "classification", "diastolicMax")
),
AND(
[pulse] >= LOOKUP("Hypertension (Stage 1)", "bloodPressureRef", "classification", "pulseMin"),
[pulse] <= LOOKUP("Hypertension (Stage 1)", "bloodPressureRef", "classification", "pulseMax")
)
),
"Hypertension (Stage 1)",
IF(
AND(
[systolic] >= LOOKUP("Hypertension (Stage 2)", "bloodPressureRef", "classification", "systolicMin"),
[systolic] <= LOOKUP("Hypertension (Stage 2)", "bloodPressureRef", "classification", "systolicMax")
),
"Hypertension (Stage 2)",
IF(
AND(
[systolic] >= LOOKUP("Hypertension (Emergency)", "bloodPressureRef", "classification", "systolicMin"),
[systolic] <= LOOKUP("Hypertension (Emergency)", "bloodPressureRef", "classification", "systolicMax")
),
"Hypertension (Emergency)",
"Unknown Classification"
)
)
)
)
)

 

 

 

Adjustments need to be made, depending on your conditions. Maybe it's more like the class will always be the highest class between diastolic or systolic value of a bloodpressure ?

 

 

Top Labels in this Space