Składanie zapytań FHIR

Składanie dodatku Power Query to mechanizm używany przez łącznik Power Query do przekształcania danych w zapytania wysyłane do źródła danych. Ten mechanizm składania umożliwia dodatku Power Query odciążanie jak największej ilości wybranych danych w źródle danych, a nie pobieranie dużych ilości niepotrzebnych danych tylko w celu ich odrzucenia w kliencie. Łącznik Power Query dla standardu FHIR zawiera możliwości składania zapytań, ale ze względu na charakter wyszukiwania FHIR należy zwrócić szczególną uwagę na wyrażenia dodatku Power Query, aby zapewnić, że składanie zapytań jest wykonywane, gdy jest to możliwe. W tym artykule opisano podstawy składania dodatku Power Query FHIR oraz wskazówki i przykłady.

FHIR i składanie zapytań

Załóżmy, że tworzysz zapytanie w celu pobrania zasobów "Pacjent" z serwera FHIR i interesuje Cię pacjentów urodzonych przed rokiem 1980. Takie zapytanie może wyglądać następująco:

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"

Zamiast pobierać wszystkie zasoby pacjenta z serwera FHIR i filtrować je w kliencie (Power BI), bardziej wydajne jest wysyłanie zapytania z parametrem wyszukiwania do serwera FHIR:

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

W przypadku takiego zapytania klient otrzymałby tylko interesujące go pacjentów i nie musiałby odrzucać danych w kliencie.

W przykładzie daty urodzenia składanie zapytania jest proste. Ale ogólnie rzecz biorąc, jest to trudne w FHIR, ponieważ nazwy parametrów wyszukiwania nie zawsze odpowiadają nazwom pól danych i często wiele pól danych przyczynia się do pojedynczego parametru wyszukiwania.

Rozważmy Observation na przykład zasób i category pole. Pole Observation.category jest w standardzie CodeableConcept FHIR, które ma pole, które zawiera codingsystem pola i code (między innymi polami). Załóżmy, że interesuje Cię tylko istotne znaki. Możesz zainteresować się obserwacjami, gdzie Observation.category.coding.code = "vital-signs", ale wyszukiwanie FHIR wyglądałoby mniej więcej tak: https://myfhirserver.azurehealthcareapis.com/Observation?category=vital-signs.

Aby móc składać zapytania w bardziej skomplikowanych przypadkach, łącznik Power Query dla standardu FHIR pasuje do wyrażeń dodatku Power Query z listą wzorców wyrażeń i tłumaczy je na odpowiednie parametry wyszukiwania. Wzorce wyrażeń są generowane na podstawie specyfikacji FHIR.

Dopasowanie z wzorcami wyrażeń działa najlepiej, gdy dowolne wyrażenia wyboru (filtrowanie) są wykonywane tak szybko, jak to możliwe w krokach przekształcania danych przed innym kształtowaniem danych.

Uwaga

Aby zapewnić aparatowi Power Query największe szanse na składanie zapytań, przed kształtowaniem danych należy wykonać wszystkie wyrażenia wyboru danych.

Przykład składania zapytań

Aby zilustrować wydajne składanie zapytań, omówimy przykład pobierania wszystkich ważnych oznak z zasobu Obserwacja. Intuicyjnym sposobem, aby to zrobić, byłoby najpierw rozwinięcie pola, a następnie rozwinięcie Observation.categoryObservation.category.coding , a następnie filtrowanie. Zapytanie będzie wyglądać mniej więcej tak:

// 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

Niestety aparat Power Query nie rozpoznał już tego jako wzorca wyboru mapowanego na category parametr wyszukiwania, ale jeśli zrestrukturyzujesz zapytanie 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

Zapytanie /Observation?category=vital-signs wyszukiwania jest wysyłane do serwera FHIR, co zmniejsza ilość danych odbieranych przez klienta z serwera.

Chociaż pierwsze i drugie wyrażenia dodatku Power Query powodują ten sam zestaw danych, ten ostatni ogólnie daje lepszą wydajność zapytań. Należy pamiętać, że druga, bardziej wydajna wersja zapytania nie może być uzyskiwana wyłącznie za pomocą kształtowania danych za pomocą graficznego interfejsu użytkownika (GUI). Konieczne jest napisanie zapytania w zaawansowanym edytorze Power Query.

Wstępne eksplorowanie danych można wykonać za pomocą edytora zapytań graficznego interfejsu użytkownika, ale zalecamy refaktoryzację zapytania z uwzględnieniem składania zapytań. W szczególności zapytania selektywne (filtrowanie) powinny być wykonywane tak szybko, jak to możliwe.

Znajdowanie wzorców składania

Łącznik Power Query dla standardu FHIR będzie mógł wykonywać składanie zapytań tylko wtedy, gdy wyrażenia dodatku Power Query są mapowane na znane parametry wyszukiwania zdefiniowane przez specyfikację FHIR. Jeśli zastanawiasz się, czy składanie zapytań jest możliwe, zalecamy zapoznanie się ze specyfikacją FHIR. Każdy zasób zawiera listę zestaw parametrów wyszukiwania w dolnej części strony specyfikacji. Możesz również zapoznać się ze stroną składanych wzorców zapytań, aby zapoznać się z przykładami pisania składalnych wyrażeń dodatku Power Query dla standardu FHIR.

Debugowanie składania zapytań

Jeśli próbujesz określić, czy dane wyrażenie dodatku Power Query jest składane i jakie jest wynikowe wyrażenie wyszukiwania FHIR, możesz uruchomić program Fiddler podczas kształtowania zapytań w programie Power BI Desktop.

Podsumowanie

Składanie zapytań zapewnia bardziej wydajne wyrażenia dodatku Power Query. Prawidłowo spreparowany dodatek Power Query umożliwia składanie zapytań, a tym samym duże obciążenie filtrowania danych do źródła danych.

Następne kroki

W tym artykule pokazano, jak używać składania zapytań w łączniku Power Query dla standardu FHIR. Następnie zapoznaj się z listą wzorców składania FHIR Power Query.