Postupné posúvanie dotazov FHIR

Postupné posúvanie doplnku Power Query predstavuje mechanizmus, ktorý používa konektor Power Query na premenu transformácií údajov na dotazy odosielané do zdroja údajov. Tento mechanizmus postupného posúvania umožňuje doplnku Power Query vypnúť zo zdroja údajov čo najviac výberu údajov, namiesto načítavania veľkého množstva nepotrených údajov, ktoré sa majú v klientovi zahodiť. Konektor Power Query pre FHIR obsahuje možnosti skladania dotazov, ale vzhľadom na povahu vyhľadávania FHIR je potrebné venovať osobitnú pozornosť výrazom Power Query, aby sa zabezpečilo, že postupné posúvanie dotazov sa vykonáva, ak je to možné. V tomto článku sa vysvetľujú základy postupného posúvania doplnku FHIR Power Query a uvádzajú sa pokyny a príklady.

FHIR a postupné posúvanie dotazov

Predpokladajme, že vytvárate dotaz na načítanie zdrojov pacient z FHIR servera a máte záujem o pacientov narodených pred rokom 1980. Takýto dotaz by mohol vyzerať takto:

let
    Source = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null),
    Patient1 = Source{[Name="Patient"]}[Data],
    #"Filtered Rows" = Table.SelectRows(Patient1, each [birthDate] < #date(1980, 1, 1))
in
    #"Filtered Rows"

Namiesto načítania všetkých prostriedkov pacienta zo servera FHIR a ich filtrovania v klientovi (Power BI) je efektívnejšie odoslať dotaz s parametrom vyhľadávania na server FHIR:

GET https://myfhirserver.azurehealthcareapis.com/Patient?birthdate=lt1980-01-01

Pri takomto dotaze by klient prijal len pacientov, o ktoré sa zaujímajú, a nemusel by zahodiť údaje v klientovi.

V príklade dátumu narodenia je postupné posúvanie dotazov jednoduché. Vo všeobecnosti je to však vo prvku FHIR náročné, pretože názvy vyhľadávacích parametrov nie vždy zodpovedajú názvom údajových polí a často viaceré údajové polia prispievajú k jednému vyhľadávaciemu parametru.

Zoberme do úvahy Observation napríklad prostriedok a category pole. Pole Observation.category je CodeableConcept in FHIR, ktorý obsahuje coding pole, ktoré obsahuje system polia a code (okrem iného polia). Predpokladajme, že by vás zaujímali iba dôležité značky. Mali by ste sa zaujímať o Pozorovania, kdeObservation.category.coding.code = "vital-signs", ale FHIR vyhľadávanie by vyzeralo asi tak.https://myfhirserver.azurehealthcareapis.com/Observation?category=vital-signs

Aby bolo možné dosiahnuť postupné posúvanie dotazov v zložitejších prípadoch, konektor Power Query for FHIR zodpovedá výrazom Power Query so zoznamom výrazových vzorov a preloží ich do vhodných parametrov vyhľadávania. Vzory výrazov sa vygenerujú zo špecifikácie FHIR.

Táto zhoda so vzormi výrazov funguje najlepšie, keď sa akékoľvek výrazy výberu (filtrovanie) vykonávajú čo najskôr v krokoch transformácie údajov pred akýmkoľvek iným tvarovaním údajov.

Poznámka

Ak chcete poskytnúť nástroju Power Query najlepšiu šancu na postupné posúvanie dotazov, mali by ste pred akýmkoľvek tvarovaním údajov vykonať všetky výrazy výberu údajov.

Príklad postupného posúvania dotazov

Na ilustráciu efektívneho postupného posúvania dotazov si prejdeme príklad získania všetkých dôležitých príznakov zo zdroja pozorovania. Intuitívnym spôsobom, ako to urobiť, by bolo najprv rozbaliť Observation.category pole a potom rozbaliť Observation.category.coding a potom filtrovať. Dotaz by vyzeral približne takto:

// Inefficient Power Query
let
    Source = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null),
    Observation = Source{[Name="Observation"]}[Data],
    ExpandCategory = Table.ExpandTableColumn(Observation, "category", {"coding"}, {"category.coding"}),
    ExpandCoding = Table.ExpandTableColumn(ExpandCategory, "category.coding", {"system", "code"}, {"category.coding.system", "category.coding.code"}),
    FilteredRows = Table.SelectRows(ExpandCoding, each ([category.coding.code] = "vital-signs"))
in
    FilteredRows

Nástroj Power Query žiaľ už nerozpozná, že ako vzor výberu, ktorý sa mapuje k parametru category vyhľadávania, ale pri zmeníte štruktúru dotazu na:

// Efficient Power Query allowing folding
let
    Source = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null),
    Observation = Source{[Name="Observation"]}[Data],
    FilteredObservations = Table.SelectRows(Observation, each Table.MatchesAnyRows([category], each Table.MatchesAnyRows([coding], each [code] = "vital-signs"))),
    ExpandCategory = Table.ExpandTableColumn(FilteredObservations, "category", {"coding"}, {"category.coding"}),
    ExpandCoding = Table.ExpandTableColumn(ExpandCategory, "category.coding", {"system", "code"}, {"category.coding.system", "category.coding.code"})
in
    ExpandCoding

Vyhľadávací dotaz /Observation?category=vital-signs sa odošle na server FHIR, čo znižuje množstvo údajov, ktoré klient dostáva zo servera.

Zatiaľ čo prvý a druhý výraz Power Query vedú k rovnakej množine údajov, druhý vo všeobecnosti vedie k lepšiemu výkonu dotazu. Je dôležité poznamenať, že druhú, efektívnejšiu verziu dotazu nie je možné získať čisto prostredníctvom tvarovania údajov pomocou grafického používateľského rozhrania (GUI). Dotaz je potrebné napísať v rozšírenom editore Power Query.

Počiatočné skúmanie údajov je možné vykonať pomocou editora dotazov grafického používateľského rozhrania, odporúča sa však opätovne spracovať dotaz s postupným posúvaním dotazov. Konkrétne by sa mali selektívne dotazy (filtrovanie) vykonávať čo najskôr.

Vyhľadanie vzorov postupného posúvania

Konektor Power Query pre FHIR bude môcť vykonávať skladanie dotazov iba v prípade, že sa výrazy Power Query primapujú k známym parametrom vyhľadávania podľa definície špecifikácie FHIR. Ak vás zaujíma, či je postupné posúvanie dotazov možné, odporúčame vám pozrieť si špecifikáciu FHIR. Každý zdroj uvádza množinu parametrov vyhľadávania v dolnej časti stránky so špecifikáciami. Môžete si tiež pozrieť stránku vzorov postupného posúvania dotazov , kde nájdete príklady, ako písať postupné výrazy doplnku Power Query for FHIR.

Ladenie postupného posúvania dotazov

Ak sa snažíte zistiť, či sa daný výraz Power Query posúva a čo je výsledný výraz vyhľadávania FHIR, môžete spustiť Fiddler pri tvarovaní dotazov v aplikácii Power BI Desktop.

Súhrn

Postupné posúvanie dotazov poskytuje efektívnejšie výrazy Power Query. Správne vytvorený doplnok Power Query umožňuje postupné posúvanie dotazov, a tým aj väčšinu záťaže pri filtrovaní údajov na zdroj údajov.

Ďalšie kroky

V tomto článku ste sa dozvedeli, ako používať postupné posúvanie dotazov v konektore Power Query for FHIR. V ďalšom kroku preskúmajte zoznam vzorov postupného posúvania doplnku FHIR Power Query.