DirectQuery e SAP HANADirectQuery and SAP HANA

Você pode se conectar a fontes de dados do SAP HANA diretamente usando o DirectQuery.You can connect to SAP HANA data sources directly using DirectQuery.

Ao usar o SAP HANA, é importante entender alguns aspectos de como as conexões com ele são tratadas, para garantir que:When using SAP HANA it is important to understand some aspects of how connections to it are treated, to ensure that:

  • os resultados correspondam ao esperado quando o modo de exibição do SAP HANA contiver medidas não aditivas (por exemplo, contagens distintas ou médias, em vez de somas simples)The results are as expected, when the SAP HANA view contains non-additive measures (for example, distinct counts, or averages, rather than simple sums)
  • as consultas resultantes sejam eficientesThe resulting queries are efficient

É útil começar reservando um momento para esclarecer o comportamento de uma fonte relacional, como um SQL Server, quando a consulta definida em Obter Dados ou no Editor de Consultas executar uma agregação.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. No exemplo a seguir, uma consulta definida no Editor de Consultas retorna o preço médio segundo o ProductID.In the example that follows, a query defined in Query Editor returns the average price by ProductID.

Se os dados estiverem sendo importados para o Power BI (em vez de usar o DirectQuery), aconteceria o seguinte:If the data is being imported into Power BI (versus using DirectQuery), the following would result:

  • Os dados são importados no nível de agregação definido pela consulta criada no Editor de Consultas.The data is imported at the level of aggregation defined by the query created in Query Editor. Por exemplo, preço médio por produto.For example, average price by product. Isso resulta em uma tabela com duas colunas, ProductID e AveragePrice, que podem ser usadas em visuais.This results in a table with the two columns ProductID and AveragePrice that can be used in visuals.
  • Em um visual, qualquer agregação subsequente (como Sum, Average, Min, entre outras) é executada nos dados importados.In a visual, any subsequent aggregation (such as Sum, Average, Min, others) is performed over that imported data. Por exemplo, incluir AveragePrice em um visual usará a agregação Sum por padrão e retornará a soma de AveragePrice para cada ProductID – que nesse caso seria 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. O mesmo se aplica a qualquer função de agregação alternativa (como Min, Average etc) usada no visual.The same applies to any alternative aggregate function (such as Min, Average, so on) used on the visual. Por exemplo, Average de AveragePrice retorna a média de 6,66, 4 e 3, que é igual a 4,56 e não a média de Price nos 6 registros na tabela subjacente, que é 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.

Se o DirectQuery estiver sendo usado em vez da Importação, a mesma semântica se aplica e os resultados seriam exatamente os mesmos:If DirectQuery is being used instead of Import, the same semantics apply and the results would be exactly the same:

  • Considerando a mesma consulta, logicamente os mesmos dados seriam apresentados para a camada de relatório, embora os dados não tenham sido de fato importados.Given the same query, logically exactly the same data is presented to the reporting layer – even though the data is not actually imported.
  • Em um visual, qualquer agregação subsequente (Sum, Average, Min, entre outras) é executada mais uma vez na tabela lógica da consulta.In a visual, any subsequent aggregation (Sum, Average, Min, others) is again performed over that logical table from the query. E mais uma vez, um visual contendo Average de AveragePrice retornará o mesmo valor de 4,56.And again, a visual containing Average of AveragePrice returns the same 4.56.

Agora, vamos considerar o SAP HANA.So now let's consider SAP HANA. O Power BI pode trabalhar com Exibições Analíticas e Exibições de Cálculo no SAP HANA, que podem conter medidas.Power BI can work with both Analytic Views and Calculation Views in SAP HANA, both of which can contain measures. Ainda hoje a abordagem do SAP HANA segue os mesmos princípios descritos anteriormente: a consulta definida em Obter Dados ou no Editor de Consultas determinará os dados disponíveis e, em seguida, qualquer agregação subsequente em um visual será feita nos dados e o mesmo se aplica à Importação e ao 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.

No entanto, devido à natureza do HANA, a consulta definida na caixa de diálogo inicial de Obter Dados ou do Editor de Consultas sempre é uma consulta de agregação e geralmente inclui medidas em que a agregação real que será usada é definida pela exibição do 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.

O equivalente do exemplo do SQL Server acima é que há uma exibição do HANA contendo ID, ProductID, DepotID e medidas incluindo AveragePrice, definida no modo de exibição como Média do Preço.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.

Se, na experiência Obter Dados, tiverem sido feitas seleções de ProductID e da medida AveragePrice, isso define uma consulta no modo de exibição, solicitando esses dados agregados (no exemplo acima, para manter a simplicidade, ~e usado um pseudo-SQL, que não coincide exatamente com a sintaxe do 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). Em seguida, agregações adicionais definidas em um visual agregam ainda mais os resultados de tal consulta.Then any further aggregations defined in a visual are further aggregating the results of such a query. Novamente, conforme descrito acima para o SQL Server, isso se aplica tanto ao caso da Importação quanto ao DirectQuery.Again, as described above for SQL Server, this applies both for the Import and DirectQuery case. Observe que no caso do DirectQuery, a consulta de Obter Dados ou do Editor de Consultas será usada em uma subseleção dentro de uma única consulta enviada ao HANA e, portanto, não se trata de um caso em que todos os dados seriam lidos antes de serem ainda mais agregados.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.

Isso leva às seguintes considerações importantes quanto ao uso do DirectQuery no HANA:This gives rise to the following important considerations when using DirectQuery over HANA:

  • é necessário prestar atenção a qualquer outra agregação executada nos visuais, sempre que a medida no HANA for não aditiva (por exemplo, não for um simples Sum, Min ou 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).
  • Em Obter Dados ou no Editor de Consultas, somente as colunas obrigatórias devem ser incluídas para recuperar os dados necessários, refletindo o fato de que o resultado será uma consulta, que deverá ser uma consulta razoável que possa ser enviada ao 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. Por exemplo, se dezenas de colunas tiverem sido selecionadas, com a ideia de que elas poderão ser necessárias em visuais posteriores, então até mesmo para o DirectQuery um visual simples significará que a consulta de agregação usada na subseleção conterá essas dezenas de colunas, o que geralmente levará a um desempenho muito ruim.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.

Vejamos um exemplo.Let's look at an example. No exemplo a seguir, selecionar cinco colunas (CalendarQuarter, Color, LastName, ProductLine, SalesOrderNumber) na caixa de diálogo Obter Dados, junto com a medida OrderQuantity, significa que, mais tarde, a criação de um visual simples contendo Min OrderQuantity resultará na seguinte consulta SQL para o 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. A parte sombreada é a subseleção, contendo a consulta de Obter Dados / Editor de Consultas.The shaded portion is the subselect, containing the query from Get Data / Query Editor. Se essa subseleção levar a um resultado com cardinalidade muito alta, é provável que o desempenho resultando do HANA seja ruim.If this subselect gives a very high cardinality result, then it is likely the resulting HANA performance will be poor.

Por isso, é recomendável que os itens selecionados em Obter Dados ou no Editor de Consultas sejam limitados aos itens que são necessárias, ainda assim resultando em uma consulta razoável para o 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.

Próximas etapasNext steps

Para obter mais informações sobre o DirectQuery, confira os seguintes recursos:For more information about DirectQuery, check out the following resources: