Chuyển đến nội dung chính

第 10 課:測量 — 測驗與測量

记录测试结果、生命体征和临床测量结果。 value_as_number / value_as_concept_id、operator_concept_id、unit_concept_id、range_low / range_high、LOINC 詞彙、measurement_event_id 新 CDM 5.4。

🏗️ 建築 — 第 10 課 測量 測試與測量 初學者的 OMOP CDM 5.4 — 從頭到尾了解 第 3 部分:關鍵臨床事件 亞洲開發網

醫學測試和測量儀表板

簡介

測量是所有實驗室結果、生命徵象和臨床測量的記錄-任何具有可測量值(數字或類別)的數據。這是大多數 OMOP 資料庫中最大的表,通常佔總記錄的 50% 以上,因為每次測試都會建立許多行(例如:具有 20 個指標的血液測試表 = 20 條記錄)。


1.表結構

專欄類型必填說明
measurement_id整數✅ PK唯一ID
person_id整數✅ FK病人
measurement_concept_id整數✅標準概念(LOINC)
measurement_date日期✅考試日期
measurement_datetime日期時間日期與時間
measurement_timeVARCHAR(10)現在(遺留)
measurement_type_concept_id整數✅資料來源
operator_concept_id整數運算子(<, >,=, <=, >=)
value_as_number浮動數值
value_as_concept_id整數類別值
unit_concept_id整數單位(UCUM)
range_low浮動正常下限
range_high浮動正常上限
provider_id整數氟克醫生囑咐
visit_occurrence_id整數氟克相關訪問
visit_detail_id整數氟克瀏覽詳情
measurement_source_valueVARCHAR(50)原始測試程式碼
measurement_source_concept_id整數原創概念
unit_source_valueVARCHAR(50)原單位
unit_source_concept_id整數原始單位概念
value_source_valueVARCHAR(50)原值
measurement_event_id大智⭐ 新CDM 5.4
meas_event_field_concept_id整數⭐ 新CDM 5.4

2. value_as_number 與 value_as_concept_id

2.1。 NUMBER 結果 → value_as_number

-- Glucose máu: 6.5 mmol/L
INSERT INTO measurement VALUES (
    110001, 100001, 3004501,         -- LOINC: Glucose [Mass/volume] in Blood
    '2024-06-15', NULL, NULL,
    32817,                            -- EHR
    4172703,                          -- = (equals)
    6.5,                              -- value_as_number
    NULL,                             -- no concept value
    8753,                             -- UCUM: mmol/L
    3.9, 6.1,                         -- range: 3.9-6.1
    5001, 50001, NULL,
    'GLU', 0, 'mmol/L', 0,
    '6.5', NULL, NULL
);

2.2。結果類別 → value_as_concept_id

-- Xét nghiệm nhóm máu: O
INSERT INTO measurement VALUES (
    110002, 100001, 3003694,         -- LOINC: ABO group [Type] in Blood
    '2024-06-15', NULL, NULL,
    32817,                            -- EHR
    NULL,                             -- no operator
    NULL,                             -- no numeric value
    36308332,                         -- Concept: Blood group O
    NULL,                             -- no unit
    NULL, NULL,                       -- no range
    5001, 50001, NULL,
    'BLOOD_TYPE', 0, NULL, 0,
    'O', NULL, NULL
);

2.3。評選規則

結果值作為數字value_as_concept_id
“6.5 毫摩爾/公升”6.56.5 空
「積極」空4181412(正)
「負」空4132135(負)
「O型血」空36308332
> 100"100100 NULL + 運算子 = >
「正常」空4069590(普通)

3.operator_concept_id — 比較運算子

當結果不正確時使用(例如:“< 0.5", "> 100”)。

概念 ID操作員意義
41717564171756 4171756 <降低
41717544171754 <=小於或等於
41727034172703 =等於(預設)
4172704>=高於或等於
41727024172702 >更高
-- Kết quả HBsAg: < 0.05 (dưới ngưỡng phát hiện)
INSERT INTO measurement (
    measurement_id, person_id, measurement_concept_id,
    measurement_date, measurement_type_concept_id,
    operator_concept_id, value_as_number,
    unit_concept_id, measurement_source_value
) VALUES (
    110003, 100001, 3013721,         -- LOINC: HBsAg
    '2024-06-15', 32817,
    4171756,                          -- operator: <
    0.05,                             -- value
    8647,                             -- IU/mL
    'HBSAG'
);

4. LOINC — 詞彙測試

4.1。 LOINC結構

LOINC Code = Component : Property : Time : System : Scale : Method
VD: 2345-7 = Glucose : MCnc : Pt : Ser/Plas : Qn

  Component  = Glucose         (đo gì)
  Property   = MCnc            (mass concentration)
  Time       = Pt              (point in time)
  System     = Ser/Plas        (huyết thanh/huyết tương)
  Scale      = Qn              (quantitative - số)

4.2。 LOINC很受歡迎

LOINC 代碼概念 ID姓名越南
2345-72345-7 3004501血清中的葡萄糖[質量/體積]血糖
4548-430346393034639糖化血紅素糖化血紅素
2160-02160-0 3016723血清肌酸酐血肌酸酐
6768-63006923血清中的 ALTSGPT
33914-333914-3 3027018GFR 估計值腎小球濾過率
718-7718-7 3000963血紅素血紅素
26515-726515-7 3010813血小板血小板
2093-32093-3 3027114總膽固醇總膽固醇

5.unit_concept_id — UCUM 單元

概念 IDUCUM 代碼單位
8840毫克/分升毫克每分升
8753毫摩爾/公升毫摩爾每公升
8647國際單位/毫升國際單位每毫升
8554%百分比
95299529公斤/平方公尺體重指數
8876毫米[汞]毫米汞柱
8582/uL每微升(血球)
8845毫克/公升毫克每公升

重要: 相同的測試但不同的單位 → 不同的值。例如:葡萄糖 100 mg/dL = 5.6 mmol/L。 ETL必須標準化單位!


6.measurement_event_id — CDM 5.4 的新增功能

允許將測量連結到任何其他事件。

  ┌──────────────────────────────┐
  │     MEASUREMENT              │
  │  "Lab: BUN = 35 mg/dL"      │
  │  measurement_event_id = 70001│
  │  meas_event_field_concept_id │
  │  = 1147127                   │──→ condition_occurrence
  │     (condition_occurrence_id)│     .condition_occurrence_id
  └──────────────────────────────┘     = 70001

應用:將測試與請求該測試的特定診斷或程序相關聯。

-- Xét nghiệm BUN liên quan đến chẩn đoán suy thận
INSERT INTO measurement (
    measurement_id, person_id, measurement_concept_id,
    measurement_date, measurement_type_concept_id,
    value_as_number, unit_concept_id,
    measurement_event_id,
    meas_event_field_concept_id
) VALUES (
    110010, 100001, 3013682,         -- LOINC: BUN
    '2024-06-15', 32817,
    35, 8840,                         -- 35 mg/dL
    70001,                            -- Liên kết condition_occurrence_id = 70001
    1147127                           -- Field = condition_occurrence.condition_occurrence_id
);

7. ETL 測試 VN

7.1。常見問題

問題解決方案
BV內部考試代碼透過 SOURCE_TO_CONCEPT_MAP → LOINC
文字結果「陽性」映射到 value_as_concept_id
結果"< 0.5"分割運算子 + value_as_number
非標機組UCUM 地圖
範圍因實驗室而異從機器/實驗室取得範圍,輸入 range_low/range_high
20個指標的測試表=1行分為20筆測量記錄

7.2. SQL ETL

-- Mỗi chỉ số xét nghiệm = 1 record MEASUREMENT
SELECT
    ROW_NUMBER() OVER() AS measurement_id,
    pm.person_id,
    COALESCE(stcm.target_concept_id, 0) AS measurement_concept_id,
    xn.ngay_xetnghiem AS measurement_date,
    32817 AS measurement_type_concept_id,
    -- Parse operator từ giá trị gốc
    CASE
        WHEN xn.gia_tri LIKE '<%' THEN 4171756    -- <
        WHEN xn.gia_tri LIKE '>%' 那麼 4172702 -->
        其他 4172703 -- =
    END AS 運算子_概念_id,
    -- 從值中解析數字
    案例
        當 xn.price ~ '^[<>]?[0-9.]+'
        則 REGEXP_REPLACE(xn.value, '[^0-9.]', '', 'g')::FLOAT
        否則為空
    END AS value_as_number,
    -- 類別結果
    CASE xn 值
        當「積極」時,那麼 4181412 -- 積極
        當「陰性」時,則 4132135 -- 陰性
        當「正常」時,則 4069590 -- 正常
        否則為空
    END AS value_as_concept_id,
    COALESCE(u.target_concept_id, 0) AS unit_concept_id,
    xn.gioi_han_duoi AS range_low,
    xn.gioi_han_tren AS range_high,
    xn.ma_xetnghiem AS 測量來源值,
    xn.don_vi_goc AS 單位來源值,
    xn.value AS value_source_value
來自 xetnghiem_his xn
JOIN person_mapping pm ON xn.ma_bn = pm.source_id
左連接 source_to_concept_map stcm
    ON xn.ma_xetnghiem = stcm.source_code
    AND stcm.source_vocabulary_id = 'VN_LAB'
左連接 source_to_concept_map u
    ON xn.don_vi_goc = u.source_code
    AND u.source_vocabulary_id = 'VN_UNIT';

8. 測量生命徵象

生命徵象洛因克概念 ID單位
收縮壓8480-68480-6 3004249毫米汞柱
舒張壓8462-43012888毫米汞柱
心率8867-43027018/分鐘
溫度8310-53020891℃
SpO259408-540762499%
重量29463-729463-7 3025315公斤
身高8302-230362773036277公分
BMI39156-53038553kg/m²
-- 記錄生命徵象:血壓 130/85、NT 80、體溫 37.2、SpO2 97%
插入測量(measurement_id、person_id、measurement_concept_id、
    測量日期、測量類型概念 ID、
    value_as_number、unit_concept_id、measurement_source_value)
價值觀
    (120001, 100001, 3004249, '2024-06-15', 32817, 130, 8876, 'SBP'),
    (120002, 100001, 3012888, '2024-06-15', 32817, 85, 8876, 'DBP'),
    (120003, 100001, 3027018, '2024-06-15', 32817, 80, 8541, '人力資源'),
    (120004, 100001, 3020891, '2024-06-15', 32817, 37.2, 586323, '暫時'),
    (120005, 100001, 40762499, '2024-06-15', 32817, 97, 8554, 'SPO2');

9. SQL分析

-- HbA1c 在人群中的分佈
選擇
    案例
        當 m.value_as_number 時 < 5.7 THEN 'Bình thường (<5.7%)'
        WHEN m.value_as_number BETWEEN 5.7 AND 6.4 THEN 'Tiền ĐTĐ (5.7-6.4%)'
        WHEN m.value_as_number >= 6.5 那麼“糖尿病 (>=6.5%)”
    結束為 hba1c_group,
    COUNT(DISTINCT m.person_id) AS 患者,
    ROUND(AVG(m.value_as_number), 2) AS avg_hba1c
FROM 測量 m
其中 m.measurement_concept_id = 3034639 -- HbA1c
  AND m.value_as_number 不為空
  AND m.value_as_number BETWEEN 2 AND 20 -- 輸入異常值
按 hba1c_group 分組
按 hba1c_group 排序;

-- HbA1c 隨時間變化的趨勢(1 名患者)
選擇
    m.測量日期,
    m.value_as_number AS hba1c,
    案例
        當 m.value_as_number 時 < 7.0 THEN '✅ Kiểm soát tốt'
        ELSE '⚠️ Cần cải thiện'
    END AS status
FROM measurement m
WHERE m.person_id = 100001
  AND m.measurement_concept_id = 3034639
ORDER BY m.measurement_date;

-- Xét nghiệm bất thường (ngoài range)
SELECT
    c.concept_name AS test_name,
    COUNT(*) AS abnormal_count,
    COUNT(DISTINCT m.person_id) AS patients
FROM measurement m
JOIN concept c ON m.measurement_concept_id = c.concept_id
WHERE m.value_as_number IS NOT NULL
  AND (m.value_as_number < m.range_low
       OR m.value_as_number > m.range_high)
  且 m.range_low 不為空
  AND m.range_high 不為空
按 c.concept_name 分組
ORDER BY異常計數 DESC
限制 10;

總結

  1. 測量 = 測試 + 生命徵象 + 所有測量值
  2. 兩種結果類型:value_as_number(數字)或value_as_concept_id(類別)
  3. operator_concept_id 給出結果“<”或“>”
  4. unit_concept_id 使用 UCUM,measurement_concept_id 使用 LOINC
  5. range_low / range_high 為正常參考值
  6. CDM 5.4:measurement_event_id 將測試與另一個事件相關聯

下一篇文章: 觀察—專門表格未涵蓋的臨床事件。


參考文獻