Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
毎月開催しているQlikヘルスケア勉強会のフィードバックコーナーで取り上げた上記のテーマが反響が大きかったのでこちらでもご紹介しておきます。
院内でよく診療実績の調査依頼があります。例えば、「1年間で肺がんで外来を受診した患者数は?」のような内容です。必要なデータが複数のシステムにあり、また、対象とするデータも膨大なことから苦労しています。
外来の診療実績の把握は、入院とは異なり、電子カルテシステムから単純に実績を抽出できません。外来の診療実績の把握は、主に医事会計システムのデータを利用しますが、そこには病名データがありません。そのため、病名データを電子カルテシステムから抽出する必要がありますが、簡単に病名データと紐づけるキーがありません。
そこで今回は、不連続値と間隔値を結合させる Intervalmatch と、多対多のテーブルを関連付けるリンクテーブルの考え方を使って対応します。
Intervalmatchは、外来診療を受けた患者の診療日に近くにある電子カルテシステムの病名を取得するのに利用します。
リンクテーブルは、医事会計システムにある患者のデータ(同一患者で複数のデータ)と電子カルテシステムにある患者のデータ(同一患者で複数のデータ)を共通するキーでつなぎ、両システム間の患者データをつなぎ合わせます。
※2つのシステムにある患者のデータは多対多の関係にあります。
Intervalmatch の 基本構文は次の通りです。
IntervalMatch (不連続の数値が含まれた項目) ロード文 または Select 文
また、リンクテーブルは、複数のテーブルの関連付けのためのキーと共通項目のみ持つテーブルです。
これらを使って図のようなデータモデルを作ります。
一般的なリンクテーブルの考え方では双方のテーブルにあるすべてのキー(患者番号、診療年月日、開始日、終了日)を格納しますが、ここでは外来診療の病名を求めるという目的のみに対応するものとして、リンクテーブルには双方のテーブルのデータがマッチしたキーのみを含めることにします。
次のような手順でデータをロードしました。
1.診療データをロードする
※この時、診療キーを作っておくとよい
[患者番号] & '_' & [診療年月日] as 診療キー
2.病名データからintervalmatchに必要な項目(患者番号、開始日、終了日)のみロードして結合データ_tempを作る
3.結合データ_tempをもとにintervalmatchかつ、Inner joinを行い、診療年月日、開始日、終了日、患者番号を持つデータを作る
Inner Join(結合データ_temp) IntervalMatch(診療年月日,患者番号)
Load
[開始日],
[終了日],
[患者番号]
Resident 結合データ_temp;
4.結合データ_tempから患者番号、病名データ用キーと診療データ用キーのみロードして結合データとする
結合データ_tempは削除する
結合データ:
Load
[患者番号],
[患者番号] & '_' & [開始日] & '_' & [終了日] as 病名キー,
[患者番号] & '_' & [診療年月日] as 診療キー
Resident 結合データ_temp;
Drop tables [結合データ_temp];
※合成キーを防ぐため、ここには各日付は持たせません
5.病名データをロードする
6.合成キーを防ぐため、診療データ、病名データから患者番号を削除する
----------------------------------------------------------------------------------------------------------------------------
これで、病名を指定すると、該当する診療データを表示することができます。ただし、複数の病名を持つ患者の場合、どの診療日がどの病名のものかは判別できません。
診療データと病名データが別々で、1対1で関連付けるキーがなくても、Intervalmatchとリンクテーブルにより関連性を持たせてデータモデルを作り、病名別に診療した患者を調べることができるようになりました。
※Intervalmatchについての詳細は次を参照してください。
※リンクテーブルについての詳細は次を参照してください。