Plegado de consultas FHIR

El plegado de Power Query es el mecanismo que usa un conector de Power Query para convertir las transformaciones de datos en consultas que se envían al origen de datos. Este mecanismo de plegado permite a Power Query trasladar la mayor parte de la selección posible de datos al origen de datos, en lugar de recuperar grandes cantidades de datos innecesarios solo para desecharlos en el cliente. El conector de Power Query para FHIR incluye funcionalidades de plegado de consultas, pero debido a la naturaleza de la búsqueda de FHIR, se debe prestar especial atención a las expresiones de Power Query para asegurarse de que el plegado de consultas se realice siempre que sea posible. En este artículo se explican los conceptos básicos del plegado de Power Query de FHIR y se proporcionan instrucciones y ejemplos.

FHIR y optimización de consultas

Suponga que está construyendo una consulta para recuperar recursos de "Paciente" de un servidor FHIR y que le interesan los pacientes nacidos antes del año 1980. Esta consulta podría ser similar a la siguiente:

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"

En lugar de recuperar todos los recursos de paciente del servidor FHIR y filtrarlos en el cliente (Power BI), es más eficaz enviar una consulta con un parámetro de búsqueda al servidor FHIR:

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

Con esta consulta, el cliente solo recibiría a los pacientes de interés y no tendría que descartar los datos en el cliente.

En el ejemplo de una fecha de nacimiento, el plegado de consultas es sencillo. Pero en general es difícil en FHIR porque los nombres de parámetros de búsqueda no siempre corresponden a los nombres de campo de datos y con frecuencia varios campos de datos contribuyen a un único parámetro de búsqueda.

Por ejemplo, vamos a considerar el Observation recurso y el category campo . El campo Observation.category es un CodeableConcept en FHIR, que tiene un campo coding, el cual incluye campos system y code (entre otros). Supongamos que solo le interesan los signos vitales. Le interesarían las observaciones en las que Observation.category.coding.code = "vital-signs", pero la búsqueda en FHIR tendría un aspecto similar a https://myfhirserver.azurehealthcareapis.com/Observation?category=vital-signs.

Para poder lograr el plegado de consultas en los casos más complicados, el conector de Power Query para FHIR hace coincidir expresiones de Power Query con una lista de patrones de expresión y las traduce en parámetros de búsqueda adecuados. Los patrones de expresión se generan a partir de la especificación de FHIR.

Esta coincidencia con los patrones de expresión funciona mejor cuando las expresiones de selección (filtrado) se realizan en las primeras etapas de los pasos de transformación de datos antes de cualquier otro modelado de los datos.

Nota:

Para dar al motor de Power Query la mejor oportunidad para realizar el plegado de consultas, debe realizar todas las expresiones de selección de datos antes de modificar cualquier forma de los datos.

Ejemplo de optimización de consultas

Para ilustrar el eficaz plegado de consultas, seguimos el ejemplo de obtener todos los signos vitales del recurso Observación. La manera intuitiva de hacerlo sería expandir primero el Observation.category campo y, a continuación, expandir Observation.category.coding y luego filtrar. La consulta tendría un aspecto similar al siguiente:

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

Desafortunadamente, el motor de Power Query ya no reconoce eso como un patrón de selección que se asigna al parámetro de búsqueda category. Sin embargo, si reestructura la consulta para:

// 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 consulta /Observation?category=vital-signs de búsqueda se envía al servidor FHIR, lo que reduce la cantidad de datos que recibe el cliente del servidor.

Aunque la primera y la segunda expresión de Power Query dan como resultado el mismo conjunto de datos, este último, en general, da como resultado un mejor rendimiento de las consultas. Es importante tener en cuenta que la segunda versión más eficaz de la consulta no se puede obtener exclusivamente a través de la forma de datos con la interfaz gráfica de usuario (GUI). Es necesario escribir la consulta en el editor avanzado de Power Query.

La exploración de datos inicial se puede realizar con el editor de consultas gui, pero se recomienda refactorizar la consulta teniendo en cuenta el plegado de consultas. En concreto, las consultas selectivas (filtrado) deben realizarse lo antes posible.

Búsqueda de patrones de plegado

El conector de Power Query para FHIR solo podrá realizar el plegado de consultas si las expresiones de Power Query se asignan a parámetros de búsqueda conocidos, tal como se define en la especificación de FHIR. Si te estás preguntando si es posible el plegado de consultas, te recomendamos que consultes la especificación de FHIR. Cada recurso muestra un conjunto de parámetros de búsqueda hacia la parte inferior de la página de especificación. También puede consultar la página de patrones de consulta plegables para obtener ejemplos de cómo escribir expresiones de Power Query plegables para FHIR.

Depuración del plegado de consultas

Si intenta determinar si se plega una expresión de Power Query determinada y cuál es la expresión de búsqueda de FHIR resultante, puede iniciar Fiddler al dar forma a las consultas en Power BI Desktop.

Resumen

El plegado de consultas proporciona expresiones de Power Query más eficaces. Una instancia de Power Query diseñado correctamente permite el plegado de consultas y, por lo tanto, delegar gran parte de la carga de filtrado de datos al origen de datos.

Pasos siguientes

En este artículo, aprendiste a usar el plegado de consultas en el conector de Power Query para FHIR. A continuación, explore la lista de patrones de plegado de FHIR Power Query.