FHIR-query folding
Power Query Folding is het mechanisme dat door een Power Query-connector wordt gebruikt om gegevenstransformaties om te zetten in query's die naar de gegevensbron worden verzonden. Hierdoor Power Query zo veel mogelijk gegevensselectie uit laden in de gegevensbron in plaats van grote hoeveelheden onnodige gegevens op te halen om deze alleen in de client te verwijderen. De Power Query-connector voor FHIR bevat mogelijkheden voor het vouwen van query's, maar vanwege de aard van FHIR-zoekopdrachtenmoet er speciale aandacht worden besteed aan de Power Query-expressies om ervoor te zorgen dat query folding indien mogelijk wordt uitgevoerd. In dit artikel worden de basisbeginselen van FHIR Power Query folding en worden richtlijnen en voorbeelden gegeven.
FHIR en query folding
Stel dat u een query maakt om patiëntbronnen op te halen van een FHIR-server en dat u geïnteresseerd bent in patiënten die vóór het jaar 1980 zijn geboren. Een dergelijke query kan er als volgende uitzien:
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"
In plaats van alle patiëntresources op te vragen van de FHIR-server en deze te filteren in de client (Power BI), is het efficiënter om een query met een zoekparameter naar de FHIR-server te verzenden:
GET https://myfhirserver.azurehealthcareapis.com/Patient?birthdate=lt1980-01-01
Met een dergelijke query zou de client alleen de patiënten ontvangen die van belang zijn en hoeven ze geen gegevens in de client te verwijderen.
In het voorbeeld van een geboortedatum is het vouwen van query's eenvoudig, maar in het algemeen is het lastig in FHIR omdat de namen van zoekparameters niet altijd overeenkomen met de gegevensveldnamen en vaak meerdere gegevensvelden bijdragen aan één zoekparameter.
Laten we bijvoorbeeld eens kijken naar Observation de resource en het veld category . Het Observation.category veld is een in CodeableConcept FHIR, die een veld heeft, met velden coding en system code (onder andere velden). Stel dat u alleen geïnteresseerd bent in essentiële tekens. U bent geïnteresseerd in Waarnemingen, maar de FHIR-zoekopdracht ziet er dan uit Observation.category.coding.code = "vital-signs" als https://myfhirserver.azurehealthcareapis.com/Observation?category=vital-signs .
Om query's in complexere gevallen te vouwen, zoekt de Power Query-connector for FHIR naar Power Query-expressies met een lijst met expressiepatronen en worden deze omgezet in de juiste zoekparameters. De expressiepatronen worden gegenereerd op basis van de FHIR-specificatie.
Deze afstemming met expressiepatronen werkt het beste wanneer selectie-expressies (filteren) zo vroeg mogelijk worden uitgevoerd in stappen voor gegevenstransformatie vóór een andere vormgeving van de gegevens.
Notitie
Om de Power Query de beste kans te geven query folding uit te voeren, moet u alle expressies voor gegevensselectie uitvoeren voordat u de gegevens vorm gaat geven.
Voorbeeld van Query Folding
Om het efficiënt vouwen van query's te illustreren, doorloop we het voorbeeld van het opvragen van alle essentiële tekens uit de observatieresource. De intuïtieve manier om dit te doen, is door eerst het veld uit te Observation.category vouwen en vervolgens uit te vouwen Observation.category.coding en vervolgens te filteren. De query ziet er als de volgende uit:
// 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
Helaas herkende de Power Query-engine dat niet meer als een selectiepatroon dat is toe te passen aan de zoekparameter, maar als u de category query herstructureert naar:
// 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
De /Observation?category=vital-signs zoekquery wordt verzonden naar de FHIR-server, waardoor de hoeveelheid gegevens wordt beperkt die de client van de server ontvangt.
Hoewel de eerste en tweede Power Query resulteren in dezelfde gegevensset, leidt de tweede expressie over het algemeen tot betere queryprestaties. Het is belangrijk te weten dat de tweede, efficiëntere versie van de query niet uitsluitend kan worden verkregen via het vormgeven van gegevens met de grafische gebruikersinterface (GUI). Het is nodig om de query te schrijven in de Geavanceerde editor.
De eerste gegevensverkenning kan worden uitgevoerd met de GUI-queryeditor, maar het wordt aanbevolen om de query te herverken met het oog op het vouwen van query's. Met name selectieve query's (filteren) moeten zo vroeg mogelijk worden uitgevoerd.
Vouwpatronen zoeken
De Power Query-connector voor FHIR kan alleen query folding uitvoeren als de Power Query-expressies zijn toe te passen op bekende zoekparameters zoals gedefinieerd door de FHIR-specificatie. Als u zich vraagt of Query Folding mogelijk is, raden we u aan de FHIR-specificatie te raadplegen. Elke resource vermeldt een set zoekparameters onderaan de specificatiepagina. U kunt ook de pagina vouwquerypatronen raadplegen voor voorbeelden van het schrijven van vouwbare Power Query Expressions for FHIR.
Het vouwen van query's voor het opsporen van query's
Als u probeert te bepalen of een bepaalde Power Query-expressie wordt gevouwen en wat de resulterende FHIR-zoekexpressie is, kunt u Fiddler starten tijdens het vormgeven van query's in Power BI Desktop.
Samenvatting
Query Folding biedt efficiëntere Power Query expressies. Een goed ontworpen Power Query het vouwen van query's mogelijk en dus een groot deel van de belasting voor het filteren van gegevens naar de gegevensbron.
Volgende stappen
In dit artikel hebt u geleerd hoe u Query Folding gebruikt in de Power Query connector for FHIR. Bekijk vervolgens de lijst met FHIR-patronen Power Query vouwen.