Dobragem de consulta FHIR
A dobragem do Power Query é o mecanismo utilizado por um conector do Power Query para transformar transformações de dados em consultas que são enviadas para a origem de dados. Esse mecanismo de dobragem permite que o Power Query descarregue o máximo possível da seleção de dados para a fonte de dados, em vez de recuperar grandes quantidades de dados desnecessários apenas para descartá-los no cliente. O conector do Power Query para FHIR inclui capacidades de dobragem de consultas, mas devido à natureza da pesquisa FHIR, deve ser dada especial atenção às expressões do Power Query para garantir que a dobragem de consultas é executada quando possível. Este artigo explica os conceitos básicos da dobragem FHIR Power Query e fornece diretrizes e exemplos.
FHIR e dobragem de consulta
Suponha que você esteja construindo uma consulta para recuperar recursos de "Paciente" de um servidor FHIR e esteja interessado em pacientes nascidos antes do ano de 1980. Tal consulta pode ser semelhante a:
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"
Em vez de recuperar todos os recursos do Paciente do servidor FHIR e filtrá-los no cliente (Power BI), é mais eficiente enviar uma consulta com um parâmetro de pesquisa para o servidor FHIR:
GET https://myfhirserver.azurehealthcareapis.com/Patient?birthdate=lt1980-01-01
Com essa consulta, o cliente receberia apenas os pacientes de interesse e não precisaria descartar dados no cliente.
No exemplo de uma data de nascimento, a dobragem da consulta é simples. Mas, em geral, é um desafio no FHIR porque os nomes dos parâmetros de pesquisa nem sempre correspondem aos nomes dos campos de dados e, frequentemente, vários campos de dados contribuem para um único parâmetro de pesquisa.
Por exemplo, vamos considerar o Observation
recurso e o category
campo. O Observation.category
campo é um CodeableConcept
em FHIR, que tem um coding
campo, que tem system
e code
campos (entre outros campos). Suponha que você esteja interessado apenas em sinais vitais. Você estaria interessado em Observações onde Observation.category.coding.code = "vital-signs"
, mas a pesquisa FHIR seria algo como https://myfhirserver.azurehealthcareapis.com/Observation?category=vital-signs
.
Para conseguir dobrar consultas nos casos mais complicados, o conector do Power Query para FHIR faz a correspondência entre expressões do Power Query e uma lista de padrões de expressão e os traduz em parâmetros de pesquisa apropriados. Os padrões de expressão são gerados a partir da especificação FHIR.
Essa correspondência com padrões de expressão funciona melhor quando qualquer expressão de seleção (filtragem) é feita o mais cedo possível nas etapas de transformação de dados antes de qualquer outra modelagem dos dados.
Nota
Para dar ao mecanismo do Power Query a melhor chance de executar dobramento de consulta, você deve fazer todas as expressões de seleção de dados antes de qualquer modelagem dos dados.
Exemplo de dobragem de consulta
Para ilustrar a dobragem de consulta eficiente, percorremos o exemplo de obtenção de todos os sinais vitais do recurso de Observação. A maneira intuitiva de fazer isso seria primeiro expandir o Observation.category
campo e, em seguida, expandir Observation.category.coding
e depois filtrar. A consulta teria a seguinte aparência:
// 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
Infelizmente, o mecanismo do Power Query não reconhecia mais isso como um padrão de seleção mapeado para o category
parâmetro de pesquisa, mas se você reestruturar a 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
A consulta /Observation?category=vital-signs
de pesquisa é enviada para o servidor FHIR, o que reduz a quantidade de dados que o cliente recebe do servidor.
Enquanto a primeira e a segunda expressões do Power Query resultam no mesmo conjunto de dados, a última, em geral, resulta num melhor desempenho da consulta. É importante notar que a segunda versão, mais eficiente, da consulta não pode ser obtida puramente através da modelagem de dados com a interface gráfica do usuário (GUI). É necessário escrever a consulta no editor avançado do Power Query.
A exploração inicial de dados pode ser feita com o editor de consultas GUI, mas recomendamos que você refatore a consulta com a dobragem da consulta em mente. Especificamente, as consultas seletivas (filtragem) devem ser realizadas o mais cedo possível.
Encontrar padrões de dobragem
O conector do Power Query para FHIR só poderá realizar dobragem de consulta se as expressões do Power Query forem mapeadas para parâmetros de pesquisa conhecidos, conforme definido pela especificação FHIR. Se você está se perguntando se a dobragem de consulta é possível, recomendamos que você consulte a especificação FHIR. Cada recurso lista um conjunto de parâmetros de pesquisa na parte inferior da página de especificação. Também pode consultar a página de padrões de consulta dobráveis para obter exemplos de como escrever expressões dobráveis do Power Query para FHIR.
Depurando dobramento de consulta
Se estiver a tentar determinar se uma determinada expressão do Power Query está a ser dobrada e qual é a expressão de pesquisa FHIR resultante, pode iniciar o Fiddler enquanto modela consultas no Power BI Desktop.
Resumo
A dobragem de consultas fornece expressões mais eficientes do Power Query. Um Power Query criado corretamente permite dobrar consultas e, assim, descarregar grande parte da carga de filtragem de dados para a fonte de dados.
Próximos passos
Neste artigo, você aprendeu a usar a dobragem de consulta no conector do Power Query para FHIR. Em seguida, explore a lista de padrões de dobragem do FHIR Power Query.