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.

データが (DirectQuery ではなく) Power BI にインポートされる場合、次の結果になります。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. これでは、ビジュアルで使用できる ProductIDAveragePrice の 2 つの列を持つテーブルが作成されます。This results in a table with the two columns ProductID and AveragePrice that can be used in visuals.
  • ビジュアルでは、それ以降のすべての (SumAverageMin などの) 集約は、そのインポートされたデータに対して実行されます。In a visual, any subsequent aggregation (such as Sum, Average, Min, others) is performed over that imported data. たとえば、ビジュアルに AveragePrice を含めると、既定で Sum 集計が使用され、各 ProductIDAveragePrice の合計 (ここでは 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. これは、ビジュアルで使用される (MinAverage などの) すべての代替の集計関数にも当てはまります。The same applies to any alternative aggregate function (such as Min, Average, so on) used on the visual. たとえば、AveragePriceAverage では、6.66、4、および 3 の平均である 4.56 が返されます。元の表の 6 つのレコードの Price の平均 (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.
  • ビジュアルでは、それ以降の (SumAverageMin などの) すべての集約がクエリの論理テーブルに対して再度実行されます。In a visual, any subsequent aggregation (Sum, Average, Min, others) is again performed over that logical table from the query. ここでも、AveragePriceAverage を含むビジュアルでは、同様に 4.56 が返されます。And again, a visual containing Average of AveragePrice returns the same 4.56.

では、SAP HANA を考えてみましょう。So now let's consider SAP HANA. Power BI は SAP HANA の、メジャーを含むことができる分析ビュー計算ビューの両方で使用することができます。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 と同等な例として、IDProductIDDepotID を含む HANA ビューと、ビューで、Average of Price として定義されている 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.

[データの取得] エクスペリエンスで ProductIDAveragePrice メジャー用の選択が行われた場合、それではその集計データを要求するビューに対するクエリが定義されています (上記の例では、簡単にするために HANA SQL の構文と完全に一致しない疑似 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 に送信される 1 つのクエリのサブセレクト内で使用されます。したがって、これでは、さらなる集計の前に、すべてのデータは読み込まれません。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.

これにより、HANA ではなく DirectQuery を使用した場合、次の重要事項を考慮する必要が生じます。This gives rise to the following important considerations when using DirectQuery over HANA:

  • HANA のメジャーが非加算的である場合 (たとえば、単純な SumMin または 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. 次の例では、[データの取得] ダイアログ ボックスで 5 つ列 (CalendarQuarter、Color、LastName、ProductLine、SalesOrderNumber) をメジャー OrderQuantity と共に選択した場合、後で作成する Min OrderQuantity を含む単純なビジュアルには、次の HANA への SQL クエリが含まれることを意味します。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: