250 likes | 412 Views
Auswertung im GTDS. fixe Abläufe für Standard-Aufgaben Mamma-Auswertung Kolorekt-Auswertung vorgefertigte Berichte ( Leitstelle Berichtsauswahl ) Berichtsaufruf in der Auswertungs-Ansicht ( Funktion Druck/Ausg. ) Variable Auswertungen je nach Anforderung. Tabelle als Grundelement.
E N D
Auswertung im GTDS • fixe Abläufe für Standard-Aufgaben • Mamma-Auswertung • Kolorekt-Auswertung • vorgefertigte Berichte ( Leitstelle Berichtsauswahl ) • Berichtsaufruf in der Auswertungs-Ansicht( Funktion Druck/Ausg. ) • Variable Auswertungen je nach Anforderung
Tabelle als Grundelement Die Daten des GTDS werden in einer relationalen Datenbank gespeichert. Auswertung bedeutet nichts anderes, als daraus die gewünschten Daten in der gewünschten Form herauszuholen. Grundelement einer relationalen Datenbank ist die Tabelle, z.B. ergibt sich durch folgendes SQL : SQL> l 1 select Pat_ID, Name, Vorname, Geburtsdatum 2 from PATIENT 3 where ...... So eine Tabelle : PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1581 Abrechnungstest Hermine 31.12.1899 1602 Prostata Hans 11.11.1911 1622 B97test Fritz 11.11.1911 1623 B97test Fritz 11.11.1911
Tabelle als Grundelement (II) PATIENT PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1581 Abrechnungstest Hermine 31.12.1899 1602 Prostata Hans 11.11.1911 1622 B97test Fritz 11.11.1911 1623 B97test Fritz 11.11.1911 • Tabelle hat einen bestimmten Namen ( hier PATIENT ) • Spalten haben bestimmte Namen ( hier PAT_ID , NAME usw.) • Spalten haben Datentypen ( vereinfacht : Zahlen , Text oder Datum ) • Anzahl und Typ der Spalten ist für alle Zeilen konstant • Daten stehen in den einzelnen Zeilen (hier sind es 4)
Grundlagen SQL (I)nähere Einzelheiten siehe SQLKURS - Skript PATIENT PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1581 Abrechnungstest Hermine 31.12.1899 1602 Prostata Hans 11.11.1911 1622 B97test Fritz 11.11.1911 1623 B97test Fritz 11.11.1911 Wenn die Tabelle PATIENT nur diese vier Zeilen enthält, genügt zur Ausgabe folgendes : select Pat_ID, Name, Vorname, Geburtsdatum from PATIENT ;
Grundlagen SQL (II) PATIENT PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1581 Abrechnungstest Hermine 31.12.1899 1602 Prostata Hans 11.11.1911 1622 B97test Fritz 11.11.1911 1623 B97test Fritz 11.11.1911 Auswahl einzelner Spalten in der SELECT - Liste select Name, Vorname, Geburtsdatum from PATIENT ; NAME VORNAME GEBURTSDAT --------------- ---------- ---------- Abrechnungstest Hermine 31.12.1899 Prostata Hans 11.11.1911 ........
Grundlagen SQL (III) PATIENT PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1581 Abrechnungstest Hermine 31.12.1899 1602 Prostata Hans 11.11.1911 1622 B97test Fritz 11.11.1911 1623 B97test Fritz 11.11.1911 Auswahl einzelner ZEILEN mit der where – Klausel select Pat_ID, Name, Vorname, Geburtsdatum from PATIENT where Name = 'Prostata' ; PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1602 Prostata Hans 11.11.1911
Grundlagen SQL (IV) PATIENT PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1581 Abrechnungstest Hermine 31.12.1899 1602 Prostata Hans 11.11.1911 1622 B97test Fritz 11.11.1911 1623 B97test Fritz 11.11.1911 where – Klausel, mehrere Teile mit AND (oder OR) verbunden select Pat_ID, Name, Vorname, Geburtsdatum from PATIENT where Name = 'B97test' AND Vorname = 'Fritz'; PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1622 B97test Fritz 11.11.1911 1623 B97test Fritz 11.11.1911
Grundlagen SQL (V) PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1622B97test Fritz 11.11.1911 1623 B97test Fritz 11.11.1911 where – Klausel für Zahlen select Pat_ID, Name, Vorname, Geburtsdatum from PATIENT where Pat_ID = 1622 ; Die Spalte Pat_ID ist hier die einzige, welche es erlaubt, übereine where-Klausel eine bestimmte Zeile der beiden "B97test"herauszufinden. Nur mit Name, Vorname und Geburtsdatum wäre der Zugriff nur auf einen von beiden nicht möglich. Sie erfüllt hier die Funktion eines sog. Primärschlüssels
Grundlagen SQL (VI) Order by – Klausel ordnet die Daten nach den angegebenenFeldern : select Pat_ID, Name, Vorname, Geburtsdatum from PATIENT order by Name, Vorname ; PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1581 Abrechnungstest Hermine 31.12.1899 1622 B97test Fritz 11.11.1911 1623 B97test Fritz 11.11.1911 1602 Prostata Hans 11.11.1911
Tabellen verbinden (Join) • eine Datenbank besteht gewöhnlich aus zahlreichen Tabellen, bei GTDS z.B. ca. 200 • zwischen diesen Tabellen bestehen Beziehungen, einfaches Beispiel PATIENT TUMOR • die Zuordnung der einzelnen Datensätze erfolgt in einer relationalen Datenbank ausschließlich durch "normale", sichtbare Tabellenspalten, es gibt keine verdeckten "Pointer" usw.
Tabellen verbinden (Join) – Beispiel (a) PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1581 Abrechnungstest Hermine 31.12.1899 1622 B97test Fritz 11.11.1911 1623 B97test Fritz 11.11.1911 1602 Prostata Hans 11.11.1911 Zu den bereits bekannten Patienten existiert eine Tabelle mit deren Tumoren : Fk_Patient Tumor Diagnose Pat_ID ID datum ICD10 DIAGNOSETEXT ---------- ----- -------- ---------- ---------------- 1581 1 28.12.99 C50 Mammakarzinom li. 1581 2 01.02.03 C18 Kolonkarzinom 1602 1 01.07.97 C61 Prostatakarzinom 1622 1 19.08.96 C61 Prostatakarzinom
Tabellen verbinden (Join) – Beispiel (b) PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1581 Abrechnungstest Hermine 31.12.1899 1622 B97test Fritz 11.11.1911 1623 B97test Fritz 11.11.1911 1602 Prostata Hans 11.11.1911 Die Beziehung der Datensätze ist einfach zu sehen, begründet in der jeweils gleichen PAT_ID : Fk_Patient Tumor Diagnose Pat_ID ID datum ICD10 DIAGNOSETEXT ---------- ----- -------- ---------- ---------------- 1581 1 28.12.99 C50 Mammakarzinom li. 1581 2 01.02.03 C18 Kolonkarzinom 1602 1 01.07.97 C61 Prostatakarzinom 1622 1 19.08.96 C61 Prostatakarzinom
Tabellen verbinden (Join) – Beispiel (c) Realisierung in SQL : select PATIENT.Pat_ID, PATIENT.Name, PATIENT.Vorname,TUMOR.Fk_PatientPat_ID, TUMOR.Tumor_ID,TUMOR.Diagnosedatum, TUMOR.ICD10from PATIENT, TUMORwhere PATIENT.Pat_ID = TUMOR.Fk_PatientPat_ID ; Fk_Patient Tumor Diagnose PAT_ID NAME VORNAME Pat_ID ID datum ICD10 ------ --------------- ------- ---------- ----- -------- --- 1581 Abrechnungstest Hermine 1581 1 28.12.99 C50 1581 Abrechnungstest Hermine 1581 2 01.02.03 C18 1602 Prostata Hans 1602 1 01.07.97 C61 1622 B97test Fritz 1622 1 19.08.96 C61
Tabellen verbinden (Join) – Beispiel (d) vereinfachte Version in SQL : der Name der Tabelle muß nur dann vor den Spaltennamen stehen, wenn eine Spalte mitgleichem Namen in beiden Tabellen vorkommt (hier nicht) select Pat_ID, Name, Vorname, Fk_PatientPat_ID, Tumor_ID, Diagnosedatum, ICD10from PATIENT, TUMORwhere Pat_ID = Fk_PatientPat_ID ; Fk_Patient Tumor Diagnose PAT_ID NAME VORNAME Pat_ID ID datum ICD10 ------ --------------- ------- ---------- ----- -------- --- 1581 Abrechnungstest Hermine 1581 1 28.12.99 C50 1581 Abrechnungstest Hermine 1581 2 01.02.03 C18 1602 Prostata Hans 1602 1 01.07.97 C61 1622 B97test Fritz 1622 1 19.08.96 C61
Tabellen verbinden (Join) – Beispiel (e) vereinfachte Version in SQL II: in der from – Klausel kurze Aliasnamen angeben und bei select und where verwenden select P.Pat_ID, P.Name, P.Vorname,T.Fk_PatientPat_ID, T.Tumor_ID,T.Diagnosedatum, T.ICD10from PATIENT P, TUMOR Twhere P.Pat_ID = T.Fk_PatientPat_ID ; Fk_Patient Tumor Diagnose PAT_ID NAME VORNAME Pat_ID ID datum ICD10 ------ --------------- ------- ---------- ----- -------- --- 1581 Abrechnungstest Hermine 1581 1 28.12.99 C50 1581 Abrechnungstest Hermine 1581 2 01.02.03 C18 1602 Prostata Hans 1602 1 01.07.97 C61 1622 B97test Fritz 1622 1 19.08.96 C61
Tabellen verbinden (Join) – Beispiel (f) Join in Schreibweise Standard – SQL (bei Oracle ab ca. Version 9 verwendbar) select P.Pat_ID, P.Name, P.Vorname,T.Fk_PatientPat_ID, T.Tumor_ID,T.Diagnosedatum, T.ICD10from PATIENT P JOIN TUMOR T ON P.Pat_ID = T.Fk_PatientPat_ID ; Fk_Patient Tumor Diagnose PAT_ID NAME VORNAME Pat_ID ID datum ICD10 ------ --------------- ------- ---------- ----- -------- --- 1581 Abrechnungstest Hermine 1581 1 28.12.99 C50 1581 Abrechnungstest Hermine 1581 2 01.02.03 C18 1602 Prostata Hans 1602 1 01.07.97 C61 1622 B97test Fritz 1622 1 19.08.96 C61
Tabellen verbinden – (Outer) Join • Die einfache Join-Abfrage verlangt, daß in allen abgefragten Tabellen mindestens eine passende Datenzeile existiert. • Dabei werden immer alle Felder aus der Select-Liste im Ergebnis gezeigt, auch wenn dadurch Daten mehrfach ausgegeben werden (Beispiel : zweimal Stammdaten von "Hermine Abrechnungstest" ) • Sollen auch Daten angezeigt werden, bei denen die erste Bedingung nicht zutrifft, muß ein sog. Outer Join eingesetzt werden.
Tabellen verbinden – Beispiel Outer Join "klassische" Oracle – Syntax : hinter der Spalte der Tabelle, für die es evtl. keine Daten gibt, wird (+) gesetzt : select P.Pat_ID, P.Name, P.Vorname,T.Fk_PatientPat_ID, T.Tumor_ID,T.Diagnosedatum, T.ICD10from PATIENT P, TUMOR Twhere P.Pat_ID = T.Fk_PatientPat_ID(+) ; Fk_Patient Tumor Diagnose PAT_ID NAME VORNAME Pat_ID ID datum ICD10 ------ --------------- ------- ---------- ----- -------- --- 1581 Abrechnungstest Hermine 1581 1 28.12.99 C50 1581 Abrechnungstest Hermine 1581 2 01.02.03 C18 1602 Prostata Hans 1602 1 01.07.97 C61 1622 B97test Fritz 1622 1 19.08.96 C61 1623 B97test Fritz
Tabellen verbinden – Beispiel Outer Join Standard – Syntax (bei Oracle ab ca. Version 9 verwendbar) am Schluß könnte noch eine where-Klausel folgen : select P.Pat_ID, P.Name, P.Vorname,T.Fk_PatientPat_ID, T.Tumor_ID,T.Diagnosedatum, T.ICD10from PATIENT PLEFT OUTER JOINTUMOR T ON P.Pat_ID = T.Fk_PatientPat_ID ; Fk_Patient Tumor Diagnose PAT_ID NAME VORNAME Pat_ID ID datum ICD10 ------ --------------- ------- ---------- ----- -------- --- 1581 Abrechnungstest Hermine 1581 1 28.12.99 C50 1581 Abrechnungstest Hermine 1581 2 01.02.03 C18 1602 Prostata Hans 1602 1 01.07.97 C61 1622 B97test Fritz 1622 1 19.08.96 C61 1623 B97test Fritz
SQL : EXISTS - Unterabfrage PATIENT PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1581 Abrechnungstest Hermine 31.12.1899 1602 Prostata Hans 11.11.1911 1622 B97test Fritz 11.11.1911 1623 B97test Fritz 11.11.1911 Beispiel : Patienten, für die mindestens ein Tumor dokumentiert ist : select Pat_ID, Name, Vorname, Geburtsdatum from PATIENT P where EXISTS (select 'X' from TUMOR T where T.Fk_PatientPat_ID = P.Pat_ID)Der Vergleich mit vorigen Folien zeigt, daß Patient Nr. 1623 keinen Eintrag in der Tabelle TUMOR hat, er steht nicht mehr im Ergebnis (daher durchgestrichen).
SQL : NOT EXISTS PATIENT PAT_ID NAME VORNAME GEBURTSDAT ---------- --------------- ---------- ---------- 1623 B97test Fritz 11.11.1911 Beispiel : Patienten, für die kein Tumor dokumentiert ist : select Pat_ID, Name, Vorname, Geburtsdatum from PATIENT P where NOT EXISTS (select 'X' from TUMOR T where T.Fk_PatientPat_ID = P.Pat_ID)Der Vergleich mit vorigen Folien zeigt, daß Patient Nr. 1623 keinen Eintrag in der Tabelle TUMOR hat, er steht allein im Ergebnis .
.... usw. .... für die Texte zu den Schlüsseln (z.B. ICD) sind weitere Tabellen ab- zufragen Spezialdokumentation z.B. für Mamma , Untersuchungen und Vorgesehene Maßnahmen kommen noch extra dazu GTDS – Tabellen in der Diagnosedaten-Maske • TUMOR • VORHANDENE_DATEN • VORERKRANKUNGEN • GKR • TNM • ANN_ARBOR • SONSTIGE_KLASSIFIK • LOKALISATION • HISTOLOGIE • AA_DIAGNOSESICHERUNG Schlußfolgerung : Auswertung durch Abfragen auf die Originaltabellen des GTDS ist in den meisten Fällen zu schwierig und fehleranfällig
Alles in einem : Auswertungs-Tabelle • Alle Grund-Daten zum Tumor in einer Tabelle, eine Zeile pro TUMOR (nicht pro Patient) • Extrakt – Prinzip • Daten werden jeweils durch ein komplexes Programm zusammengestellt • Aktualität / Datenstand entspricht dem Zeitpunkt, zu dem der Extrakt erstellt wurde, siehe Feld DATUM_DER_AUSWERTUNG, es wird nicht automatisch nachgeführt. • Mehrere Extrakte (im GTDS Auswertungs-Läufe) können nebeneinander existieren, unterschieden durch ihre VORGANG_ID