Condividi tramite


Riduzione delle query FHIR

La riduzione di Power Query è il meccanismo usato da un connettore Power Query per trasformare le trasformazioni dei dati in query inviate all'origine dati. Questo meccanismo di riduzione consente a Power Query di disattivare la maggior parte possibile della selezione dei dati all'origine dati anziché recuperare grandi quantità di dati non necessario solo per eliminarli nel client. Il connettore Power Query per FHIR include funzionalità di riduzione delle query, ma a causa della natura della ricerca FHIR, è necessario prestare particolare attenzione alle espressioni di Power Query per garantire che la riduzione delle query venga eseguita quando possibile. Questo articolo illustra le nozioni di base della riduzione di Power Query FHIR e fornisce linee guida ed esempi.

FHIR e riduzione delle query

Si supponga di costruire una query per recuperare le risorse "Paziente" da un server FHIR e di essere interessati ai pazienti nati prima dell'anno 1980. Una query di questo tipo potrebbe essere simile alla seguente:

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"

Anziché recuperare tutte le risorse Patient dal server FHIR e filtrarle nel client (Power BI), è più efficiente inviare una query con un parametro di ricerca al server FHIR:

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

Con una query di questo tipo, il client riceverà solo i pazienti di interesse e non dovrà eliminare i dati nel client.

Nell'esempio di data di nascita, la riduzione della query è semplice. Tuttavia, in generale, è difficile in FHIR perché i nomi dei parametri di ricerca non corrispondono sempre ai nomi dei campi dati e spesso più campi dati contribuiscono a un singolo parametro di ricerca.

Si consideri ad esempio la Observation risorsa e il category campo. Il Observation.category campo è un CodeableConcept oggetto in FHIR, che ha un coding campo, che contiene system e code campi (tra gli altri campi). Si supponga di essere interessati solo ai segni vitali. Si sarebbe interessati a Osservazioni in cui Observation.category.coding.code = "vital-signs", ma la ricerca FHIR avrebbe un aspetto simile https://myfhirserver.azurehealthcareapis.com/Observation?category=vital-signsa .

Per ottenere la riduzione delle query nei casi più complessi, il connettore Power Query per FHIR corrisponde alle espressioni di Power Query con un elenco di modelli di espressione e li converte in parametri di ricerca appropriati. I modelli di espressione vengono generati dalla specifica FHIR.

Questa corrispondenza con i criteri di espressione funziona meglio quando qualsiasi espressione di selezione (filtro) viene eseguita il prima possibile nei passaggi di trasformazione dei dati prima di qualsiasi altra forma dei dati.

Nota

Per consentire al motore di Power Query di eseguire la riduzione delle query, è consigliabile eseguire tutte le espressioni di selezione dei dati prima di qualsiasi data shaping dei dati.

Esempio di riduzione delle query

Per illustrare una riduzione efficiente delle query, viene illustrato l'esempio di ottenere tutti i segni vitali dalla risorsa Osservazione. Il modo intuitivo per eseguire questa operazione consiste nell'espandere prima il Observation.category campo e quindi espandere Observation.category.coding e quindi filtrare. La query sarà simile alla seguente:

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

Sfortunatamente, il motore di Power Query non riconosce più che come criterio di selezione che esegue il category mapping al parametro di ricerca, ma se si ristruttura la query in:

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

La query /Observation?category=vital-signs di ricerca viene inviata al server FHIR, riducendo la quantità di dati ricevuti dal client dal server.

Mentre la prima e la seconda espressione di Power Query generano lo stesso set di dati, quest'ultima, in generale, produce prestazioni di query migliori. È importante notare che la seconda versione, più efficiente, della query non può essere ottenuta esclusivamente tramite il data shaping con l'interfaccia utente grafica (GUI). È necessario scrivere la query nell'editor avanzato di Power Query.

L'esplorazione iniziale dei dati può essere eseguita con l'editor di query GUI, ma è consigliabile effettuare il refactoring della query tenendo presente la riduzione delle query. In particolare, le query selettive (filtro) devono essere eseguite il prima possibile.

Ricerca di modelli di riduzione

Il connettore Power Query per FHIR sarà in grado di eseguire la riduzione delle query solo se le espressioni di Power Query eseguono il mapping ai parametri di ricerca noti definiti dalla specifica FHIR. Se ci si chiede se la riduzione delle query è possibile, è consigliabile consultare la specifica FHIR. Ogni risorsa elenca un set di parametri di ricerca nella parte inferiore della pagina delle specifiche. È anche possibile consultare la pagina dei modelli di query di riduzione per esempi di come scrivere espressioni di Power Query piegabili per FHIR.

Debug della riduzione delle query

Se si sta tentando di determinare se una determinata espressione di Power Query viene piegata e qual è l'espressione di ricerca FHIR risultante, è possibile avviare Fiddler durante la modellazione delle query in Power BI Desktop.

Riepilogo

La riduzione delle query offre espressioni di Power Query più efficienti. Power Query creato correttamente consente la riduzione delle query e quindi l'off-load di gran parte del carico di lavoro del filtro dei dati per l'origine dati.

Passaggi successivi

In questo articolo si è appreso come usare la riduzione delle query nel connettore Power Query per FHIR. Esplorare quindi l'elenco dei modelli di riduzione di Power Query FHIR.