Поделиться через


Свертывание запросов FHIR

Свертка Power Query — это механизм, используемый соединителем Power Query для преобразования данных в запросы, отправляемые в источник данных. Этот механизм свертывания позволяет Power Query отключать максимальное количество выбранных данных в источник данных, а не получать большие объемы ненужных данных только для отключения карта его в клиенте. Соединитель Power Query для FHIR включает возможности свертывания запросов, но из-за характера поиска FHIR особое внимание должно быть дано выражениям Power Query, чтобы обеспечить свертывание запросов, когда это возможно. В этой статье описываются основы свертывания FHIR Power Query и приведены рекомендации и примеры.

FHIR и свертывание запросов

Предположим, вы создаете запрос для получения ресурсов "Пациент" с сервера FHIR, и вы заинтересованы в пациентах, родившихся до 1980 года. Такой запрос может выглядеть следующим образом:

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"

Вместо получения всех ресурсов пациентов с сервера FHIR и фильтрации их в клиенте (Power BI) более эффективно отправлять запрос с параметром поиска на сервер FHIR:

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

С таким запросом клиент получит только пациентов, интересующих вас, и не потребуется отвращение карта данных в клиенте.

В примере даты рождения свертка запроса является простой. Но в целом это сложно в FHIR, так как имена параметров поиска не всегда соответствуют именам полей данных и часто нескольким полям данных способствуют одному параметру поиска.

Например, рассмотрим Observation ресурс и category поле. Это Observation.category поле в CodeableConcept FHIR, которое имеет поле, которое имеет codingsystem и code поля (среди других полей). Предположим, вы заинтересованы только в жизненно важных признаках. Вы были бы заинтересованы в наблюдениях, где Observation.category.coding.code = "vital-signs", но поиск FHIR будет выглядеть примерно так https://myfhirserver.azurehealthcareapis.com/Observation?category=vital-signs.

Чтобы обеспечить свертывание запросов в более сложных случаях, соединитель Power Query для FHIR соответствует выражениям Power Query со списком шаблонов выражений и преобразует их в соответствующие параметры поиска. Шаблоны выражений создаются из спецификации FHIR.

Это сопоставление с шаблонами выражений лучше всего работает, когда все выражения выбора (фильтрация) выполняются как можно раньше в шагах преобразования данных перед любым другим формированием данных.

Примечание.

Чтобы предоставить подсистеме Power Query лучший шанс на свертывание запросов, необходимо выполнить все выражения выбора данных перед любым формированием данных.

Пример свертывания запросов

Чтобы проиллюстрировать эффективное сворачивание запросов, мы рассмотрим пример получения всех жизненно важных признаков из ресурса наблюдения. Интуитивно понятным способом этого будет сначала развернуть Observation.category поле, а затем развернуть Observation.category.coding , а затем отфильтровать. Запрос будет выглядеть примерно так:

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

К сожалению, подсистема Power Query больше не распознает, что в качестве шаблона выбора, который сопоставляется с category параметром поиска, но если переструктурировать запрос на:

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

Поисковый запрос /Observation?category=vital-signs отправляется на сервер FHIR, что уменьшает объем данных, получаемых клиентом от сервера.

Хотя первое и второе выражения Power Query приводят к тому же набору данных, последний, как правило, приводит к повышению производительности запросов. Важно отметить, что вторая, более эффективная версия запроса не может быть получена исключительно путем формирования данных с помощью графического пользовательского интерфейса (GUI). Необходимо написать запрос в расширенном редакторе Power Query.

Начальное исследование данных можно выполнить с помощью редактора запросов ГРАФИЧЕСКОго интерфейса, но рекомендуется рефакторинг запроса с учетом свертывания запросов. В частности, выборочные запросы (фильтрация) должны выполняться как можно раньше.

Поиск шаблонов свертывания

Соединитель Power Query для FHIR сможет выполнять свертывание запросов, если выражения Power Query сопоставляются с известными параметрами поиска, определенными спецификацией FHIR. Если вы хотите узнать, возможно ли сворачивание запросов, рекомендуется обратиться к спецификации FHIR. Каждый ресурс содержит набор параметров поиска в нижней части страницы спецификации. Вы также можете ознакомиться со страницей шаблонов свертывания запросов, например, как записывать свертываемые выражения Power Query для FHIR.

Отладка свертывания запросов

Если вы пытаетесь определить, свертываются ли заданные выражения Power Query и что такое результирующее выражение поиска FHIR, можно запустить Fiddler при формировании запросов в Power BI Desktop.

Итоги

Свертка запросов обеспечивает более эффективные выражения Power Query. Правильно созданный Power Query позволяет свертывать запросы и таким образом отключать большую часть нагрузки фильтрации данных в источник данных.

Следующие шаги

Из этой статьи вы узнали, как использовать свертку запросов в соединителе Power Query для FHIR. Затем изучите список шаблонов свертывания FHIR Power Query.