DirectQuery и SAP HANADirectQuery and SAP HANA

Вы можете подключиться к источникам данных SAP HANA напрямую с помощью DirectQuery.You can connect to SAP HANA data sources directly using DirectQuery.

При использовании SAP HANA очень важно понимать некоторые аспекты того, каким образом обрабатываются подключения к этой платформе, чтобы убедиться, что:When using SAP HANA it is important to understand some aspects of how connections to it are treated, to ensure that:

  • результаты отображаются должным образом, если представление SAP HANA содержит неаддитивные меры (например, число или среднее значение различных объектов, а не обычные сумы);The results are as expected, when the SAP HANA view contains non-additive measures (for example, distinct counts, or averages, rather than simple sums)
  • полученные запросы эффективны.The resulting queries are efficient

Когда запрос, определенный в разделе Получение данных или редакторе запросов, выполняет агрегирование, сначала необходимо уточнить поведение реляционного источника, такого как SQL Server.It's useful to start by taking a moment to clarify the behavior of a relational source such as SQL Server, when the query defined in Get Data or Query Editor performs an aggregation. В следующем примере запрос, определенный в редакторе запросов, возвращает значение средней цены по ProductID.In the example that follows, a query defined in Query Editor returns the average price by ProductID.

Если импортировать данные в Power BI (вместо использования DirectQuery), мы получим следующие результаты:If the data is being imported into Power BI (versus using DirectQuery), the following would result:

  • Данные будут импортированы на уровне агрегата, определенного запросом, созданным в редакторе запросов.The data is imported at the level of aggregation defined by the query created in Query Editor. Например, средняя цена продукта.For example, average price by product. В результате мы получаем таблицу с двумя столбцами, ProductID и AveragePrice, которые можно использовать в визуальных элементах.This results in a table with the two columns ProductID and AveragePrice that can be used in visuals.
  • В визуальном элементе любое последующее агрегирование (например, Sum, Average, Min и другие) выполняется над импортируемыми данными.In a visual, any subsequent aggregation (such as Sum, Average, Min, others) is performed over that imported data. Например, если включить AveragePrice в визуальный элемент, по умолчанию будет использоваться агрегат Sum и будет возвращена сумма AveragePrice для каждого ProductID, в данном случае это — 13,67.For example, including AveragePrice on a visual will use the Sum aggregate by default, and would return the sum over the AveragePrice for each ProductID – which in this case would be 13.67. Это же правило применяется для альтернативных агрегатных функций (Min, Average и т. д.), используемых в визуальных элементах.The same applies to any alternative aggregate function (such as Min, Average, so on) used on the visual. Например, значение Average колонки AveragePrice возвращает среднее значение для 6,66, 4 и 3, которое равно 4,56, а не среднее значение столбца Price с 6 записями в базовой таблице, равное 5,17.For example, Average of AveragePrice returns the average of 6.66, 4 and 3, which equates to 4.56, and not the average of Price on the 6 records in the underlying table, which is 5.17.

Если использовать DirectQuery вместо импорта, будет применена та же семантика и результаты будут совпадать.If DirectQuery is being used instead of Import, the same semantics apply and the results would be exactly the same:

  • Рассматривая тот же запрос, точно такие же логические данные будут представлены на уровне отчета, хотя фактически они не импортированы.Given the same query, logically exactly the same data is presented to the reporting layer – even though the data is not actually imported.
  • В визуальном элементе любое последующее агрегирование (Sum, Average, Min и другие) снова выполняется над логической таблицей из запроса.In a visual, any subsequent aggregation (Sum, Average, Min, others) is again performed over that logical table from the query. Как видим, визуальный элемент, который содержит среднее значение записей в колонке AveragePrice, возвращает то же значение — 4,56.And again, a visual containing Average of AveragePrice returns the same 4.56.

Теперь давайте рассмотрим SAP HANA.So now let's consider SAP HANA. В SAP HANA Power BI может работать с аналитическими представлениями и представлениями вычисления, которые могут содержать меры.Power BI can work with both Analytic Views and Calculation Views in SAP HANA, both of which can contain measures. Тем не менее сегодня подход к SAP HANA основан на тех же принципах, которые были описаны ранее. Запрос, указанный в колонке Получение данных или редакторе запросов, определяет доступные данные, после чего любое последующее агрегирование в визуальном элементе выполняется над этими данными. Это же правило применяется для импорта и DirectQuery.Yet today the approach for SAP HANA follows the same principles as described previously: the query defined in Get Data or Query Editor will determine the data available, and then any subsequent aggregation in a visual is over that data, and the same applies for both Import and DirectQuery.

Однако принимая во внимание особенности HANA, запрос, определенный в исходном диалоговом окне Получение данных или редакторе запросов, всегда статистический и, как правило, включает меры, где фактическое используемое агрегирование определяется представлением HANA.However, given the nature of HANA, the query defined in the initial Get Data dialog or Query Editor is always an aggregate query, and generally will include measures where the actual aggregation that will be used is defined by the HANA view.

Эквивалентом приведенного выше примера SQL Server является представление HANA, содержащее записи ID, ProductID, DepotID и меры, включая AveragePrice, определенную в представлении как среднее значение цены.The equivalent of the SQL Server example above is that there is a HANA view containing ID, ProductID, DepotID, and measures including AveragePrice, defined in the view as Average of Price.

Если в представлении Получение данных выбраны элементы для меры ProductID и AveragePrice, то по этому представлению запрашивается статистическая обработка данных (в примере выше для простоты используется псевдо-SQL, который не соответствует точному синтаксису HANA SQL).If, in the Get Data experience, the selections made were for ProductID and the AveragePrice measure, then that is defining a query over the view, requesting that aggregate data (in the example above, for simplicity pseudo-SQL is used that doesn’t match the exact syntax of HANA SQL). После чего все последующие агрегаты, определенные в визуальном элементе, создают сводку результатов этого запроса.Then any further aggregations defined in a visual are further aggregating the results of such a query. Точно так же, как описано ранее для SQL Server, это применяется для импорта и DirectQuery.Again, as described above for SQL Server, this applies both for the Import and DirectQuery case. Обратите внимание, что в DirectQuery запрос из Получение данных или редактора запросов будет использоваться в подзапросах в рамках одного запроса, отправленного HANA. Таким образом, нельзя утверждать, что все данные будут считываться перед дальнейшим агрегированием.Note that in the DirectQuery case, the query from Get Data or Query Editor will be used in a subselect within a single query sent to HANA, and thus it is not actually the case that all the data would be read in, prior to aggregating further.

Это приводит к возникновению следующих важных рекомендаций по использованию DirectQuery с помощью HANA:This gives rise to the following important considerations when using DirectQuery over HANA:

  • Необходимо уделять внимание последующему агрегированию в визуальных элементах, если меры в HANA неаддитивные (например, не являются простым агрегатом Sum, Min или Max).Attention must be paid to any further aggregation performed in visuals, whenever the measure in HANA is non-additive (for example, not a simple Sum, Min, or Max).
  • В представлении Получение данных или редакторе запросов, чтобы получить необходимые данные, должны быть включены только необходимые столбцы, что отражает тот факт, что результатом должен быть подходящий запрос, который можно отправить HANA.In Get Data or Query Editor, only the required columns should be included to retrieve the necessary data, reflecting the fact that the result will be a query, that must be a reasonable query that can be sent to HANA. Например, если выбраны десятки столбцов, потому что они могут понадобиться для последующих визуальных элементов, то даже простой визуальный элемент для DirectQuery будет означать, что статистический запрос, используемый в подзапросе, содержит десятки столбцов, что снижает производительность.For example, if dozens of columns were selected, with the thought that they might be needed on subsequent visuals, then even for DirectQuery a simple visual will mean the aggregate query used in the subselect will contain those dozens of columns, which will generally perform very poorly.

Давайте рассмотрим пример.Let's look at an example. В следующем примере, если выбрать пять столбцов (CalendarQuarter, Color, LastName, ProductLine, SalesOrderNumber) в диалоговом окне Получение результатов вместе с мерой OrderQuantity, то это будет означать, что дальнейшее создание простого визуального элемента, содержащего Min OrderQuantity, приведет к следующему запросу SQL для HANA.In the following example, selecting five columns (CalendarQuarter, Color, LastName, ProductLine, SalesOrderNumber) in the Get Data dialog, along with the measure OrderQuantity, will mean that later creating a simple visual containing the Min OrderQuantity will result in the following SQL query to HANA. Затененная часть – это подзапрос, содержащий запрос из диалогового окна Получение данных или редактора запросов.The shaded portion is the subselect, containing the query from Get Data / Query Editor. Если подзапрос приведет к результату с очень большим количеством элементов, то весьма вероятно, что производительность HANA будет низкой.If this subselect gives a very high cardinality result, then it is likely the resulting HANA performance will be poor.

Поэтому рекомендуется выбирать в окне Получение данных и редакторе запросов только необходимые элементы, которые по-прежнему сформируют подходящий запрос HANA.Because of this, it is recommended that the items selected in Get Data or Query Editor should be limited to those items that are needed, while still resulting in a reasonable query for HANA.

Дальнейшие действияNext steps

Дополнительные сведения о DirectQuery см. в следующих статьях:For more information about DirectQuery, check out the following resources: