BI互換モードでのメトリクスビューのクエリ
ベータ版
この機能はベータ版です。
BI互換モードを使用すると、外部BIツールからUnity Catalogビューをクエリできます。 有効にすると、 Databricks BIツールによって生成されたクエリを書き換えて、メトリクス ビューのメジャーを正しく評価します。
このページでは、BI互換モードを有効にする方法、その仕組み、サポートされているシナリオ、および既知の制限事項について説明します。
BI互換モードは、BIツールからメトリクスビューをクエリするための複数の方法の1つです。カスタム SQL と MEASURE() 関数を含む、すべてのアプローチの概要については、外部 BI ツールでのメトリクス ビューの使用を参照してください。
要件
Microsoft は、Databricks への Power BI コネクタから、Power BI で Unity Catalog のメトリックビューをクエリできる BI互換モード オプションを削除しました。このコネクタオプションを使用するレポートは動作しません。別の方法として、DirectQuery モードでコネクタの ネイティブ クエリ オプションと MEASURE() 関数を使用することで、Power BI で Unity Catalog メトリクス ビューをクエリできます。「外部 BI ツールでのメトリクス ビューの使用」を参照してください。Power BI で Databricks メトリクスビューのサポート再開をリクエストするには、Fabric Ideasコミュニティの投稿に投票し、フィードバックをお寄せください。Databricks の AI/BI ダッシュボードも使用できます。これはメトリクスビューとネイティブに連携します。
- Databricks SQL ウェアハウス、または Databricks Runtime 18.0 以降を実行するクラスター。
- DatabricksへのパススルーSQLまたはDirectQuery接続をサポートするBIツール。
- BIツール内でセッションレベルのSQL構成を実行する機能(例えば、初期SQLスクリプトや起動コマンドによる)。
BI互換モードを有効にする
セッションの開始時に、次のSQL構成コマンドを実行してBI互換モードを有効にします。コマンドは、接続するコンピュートによって異なります:
-
Databricks SQL ウェアハウスにて:
SQLSET metric_view_bi_compatibility_mode = true; -
クラスターで:
SQLSET spark.databricks.sql.metricView.bi.compatibilityMode.enabled = true;
設定方法は、使用するBIツールによって異なります。例えば、Tableauでは、接続ダイアログの「 初期SQL」 フィールドを使用できます。
BI互換モードは、設定したセッションでのみ適用されます。新しい接続ごとに、設定を再度行う必要があります。
DirectQueryモード
BI互換モードでは、クエリがDatabricks SQLエンジン上で実行される必要があります。お使いのBIツールがインポートモードと直接クエリモードの両方を提供している場合は、直接クエリ(またはライブ接続)を使用してください。そうすることで、クエリがDatabricksに渡され、書き換えメカニズムが適用されます。
BI互換モードの仕組み
メトリクス ビューは、 BIツールに対して通常のテーブルとして表示されます。 BI互換モードが有効になっている場合、 Databricks BIツールによって生成されたクエリを書き換えて、メトリクスビューを正しくクエリします。
BI互換モードでは、2種類のクエリが自動的に処理されます。
- 集計クエリ : BIツールが標準の集計関数 (
SUMなど) を使用してメジャーに対するクエリを生成すると、 BI互換モードはこれらの集計を書き換えて、メトリクス ビューのメジャー定義に準拠させます。 メジャー列の集計タイプには、必ずSUM使用してください。SQLエンジンは常に正しい基盤となる計測ロジックを適用します。 - データプレビューとスキーマ検出 :BIツールが非集計データ(列プレビューやデータサンプルなど)を要求すると、メジャー列はエラーではなくnull値を返します。ディメンション列は通常どおり値を返します。
サポートされているシナリオ
以下のBIツール機能は、BI互換モードを有効にすると、ほとんどのBIツールで動作します。
シナリオ | 説明 |
|---|---|
基本的な測定指標の可視化 | 集計結果を表示するには、グラフまたはテーブルの値フィールドでメジャーを使用します。 |
フィルター | ビジュアル内のディメンション列またはメジャー列にフィルターを適用します。 |
寸法スライサー | ディメンション列をスライサーまたはフィルターのコントロールとして使用する。 |
クロスフィルタリング | いずれかのビジュアル内の値をクリックすると、同じページ内の関連するビジュアルが絞り込まれます。 |
ドリルスルー | 特定の値で絞り込まれた詳細ページをドリルダウンします。 |
トップNフィルタリング | 列ごとに上位または下位N個の値を表示します。 |
データプレビュー | データプレビューとスキーマ検出を活用する。プレビュー画面では、測定値がnullとして表示されます。 |
視覚的な計算 | クライアント側で、既に集計済みの結果(例えば、累計値やランキング)に対して適用される計算。 |
寸法と測定値
メトリクス ビューには、メジャーとディメンションという 2 種類の列が含まれています。 レポートを作成する際には、その違いを理解することが重要です。
- メジャー : メジャーの集計ロジックはメトリクス ビューで定義されます (例:
SUM(price * quantity)またはCOUNT(DISTINCT customer_id))。 BIツールでは、メジャー列の集計設定を常にSUMにしてください。SQLエンジンは、適切な計測ロジックを自動的に適用します。別の集計が必要な場合は、メトリクス ビュー自体のメジャー定義を変更します。 BIツール側で集計方法を変更しないでください。 - 寸法 :寸法は通常のテーブル列と同様に動作します。ディメンションには、集計、グループ化、フィルタリング、ソート、バケット化など、あらゆる標準的なBI操作を適用できます。数値フィールドがディメンション(メジャーではない)として機能する場合、すべての標準的な集計タイプはそのフィールドに対して正常に機能します。
ベストプラクティス
- データセットには常に 1 つのメトリクス ビューを含めてください。 メトリクス ビューはセマンティック定義です。
- ディメンション列を整理するためのフォルダを作成します(たとえば、日付ディメンションの各ディメンション列ごとに「日付」フォルダを作成します)。
- 寸法名を、ユーザーにとって分かりやすい名前に変更してください。
- 数値ディメンション列を、集計型ではないサマリータイプに変更します。
- 各メジャー列に対して
SUM()を使用してラッパーメジャーを作成し、元のメジャー列を非表示にします(例:Total Sales = SUM('Store Sales'[total_sales]))。 - 対策を専用のフォルダに整理してください。
- ビジュアルにはラッパーメジャーのみを使用してください。
制限事項
BI互換モードでは、BIツールがクエリを生成および処理する方法に対する制御が制限されます。以下の制限事項が適用されます。
メジャーの集計にはSUMのみを使用してください。
メジャー列の集計タイプは、常にSUMに設定してください。すべての集計関数( SUM 、 COUNT 、 MIN 、 MAX )は基となるメジャー定義に書き換えられるため、すべて同じ結果を返します。別の集計タイプを選択すると、予期しない動作が発生する可能性があります。
AVG一部のBIツールは内部的にAVGSUM / COUNTとして計算し、どちらも同じメジャー値を返すため、1.0が表示されます。- カウント(重複なし)、標準偏差、分散、中央値は、書き換えメカニズムと互換性のないクエリパターンを生成し、エラーまたは誤った結果を引き起こします。
別の集計が必要な場合は、メトリクス ビューでメジャー定義を変更します。 すべての集計タイプは、メトリクス ビュー定義内で完全にサポートされています。
非加算指標の総計
一部のBIツールは、個別のクエリを発行するのではなく、クライアント側でグループごとの値を再集計することで総計を計算します。これは加法的な尺度(例えば、 SUM(revenue) )に対して正しい結果をもたらします。なぜなら、局所的に再集計すると正しい答えが得られるからです。
ただし、非加算的な尺度(たとえば、 SUM(revenue) / COUNT(DISTINCT customer) 、またはDISTINCTを含む比率、パーセンテージ、または式)の場合、事前にグループ化された比率を合計することは、データセット全体で比率を計算することと数学的に等価ではないため、総計に誤った値が表示される可能性があります。
測定列の定量的スライサー
メジャー列に対する定量的(範囲)スライサーは、期待どおりに動作しない場合があります。一部の BI ツールでは、スライダーの範囲を決定するためにメジャーのMINとMAXクエリする場合がありますが、両方とも同じ基となるメジャー値に書き換えられ、範囲が単一のポイントに集約されます。指標に対するフィルターは引き続き機能します。影響を受けるのはレンジスライサーのみです。
測定値はカテゴリ値または次元値として使用できません
メジャー列をカテゴリ値として使用する場合(たとえば、軸、凡例、スライサーとして使用する場合)、クエリは失敗し、次のエラーが返されます。
[METRIC_VIEW_MEASURE_IN_GROUP_BY] '<measure>' measure columns cannot be used in GROUP BY clause or as categorical values. We recommend wrapping them with an aggregate function such as SUM() for the expected behavior. SQLSTATE: 42K0E
複数のBIツール機能は、メジャー列を個別のディメンションとして扱うことに依存しているため、同じエラーが発生します。たとえば、Tableau では:
- メジャー列で作成されたヒストグラム(たとえば、「Show Me」から)は、メジャーをビン分割するため、失敗します。
- メジャー列から作成されたビンは、成功したと表示されますが、可視化に追加すると前述のエラーで失敗します。
これらの機能でメジャーを使用するには、メトリクスビューの定義で同等のディメンションまたはメジャーを定義してください。
複数の測定値を含む計算フィールド
単一のメジャーを参照する計算フィールドは正しく機能します。一部のBIツールは、まず集計結果を取得し、その後クライアント側で計算を実行します(例えば、収益を低、中、高のカテゴリに分類するなど)。
ただし、単一の集計内で複数のメジャー列を組み合わせる式(例: SUM(m1 + m2) )は、BI互換モードでは書き換えられず、エラーや予期しない結果が発生します。
結合が必要な特徴量
メトリクスビューは、他のテーブルや別のメトリクスビューと結合できません。メトリクスビューを結合する任意のクエリは、次のエラーで失敗します。
[METRIC_VIEW_JOIN_NOT_SUPPORTED] The metric view is not allowed to use joins.
これは明示的な結合以上に影響します。一部のBIツール機能は、サブクエリや一時テーブルに結合するSQLを自動的に生成するため、結合を追加しなくても同じエラーが発生します。Tableau では、以下の機能が結合にコンパイルされる可能性があり、BI 互換モードでは動作しない可能性があります。それぞれを使用するには、同等のロジックをメトリクスビュー定義でモデル化します。
- データソースで結合と関係が定義されています。結合をメトリクスビュー定義自体でモデリングします。
- Tableau がメインクエリに結合するサブクエリとして実装している Top N フィルター、条件付きフィルター、セット、および条件付きセットです。メトリクスビューで、ランク付けまたはフィルタリングする値を個別のディメンションとしてモデル化します。
- Tableau がメインクエリに結合する個別のサブクエリを使用して頻繁にコンピュートする、詳細レベル式(LOD)(
FIXED、INCLUDE、EXCLUDE)です。指定された式が成功するかどうかは、Tableau が生成するクエリによって決まります。メトリクスビューでは、多くのLOD式をメジャーとしてモデリングできます。
マトリクス化されたメトリクス ビュー
BI互換モードは、マテリアライゼーションを使用するメトリクスビューのクエリをサポートしています。マテリアライズド メトリクス ビューをクエリすると、クエリ オプティマイザは、パフォーマンスを高速化するために、自動的にクエリを適切なマテリアライゼーションにルーティングします。または、適切なマテリアライゼーションが利用できない場合はソース データにフォールバックします。このルーティングは透過的であり、レポートの作成方法を変更することはありません。
次の注意点に注意してください。
- データの鮮度 :クエリ結果は、最新のソースデータではなく、最新のマテリアライズドビューの更新からデータを反映できます。デフォルトの
relaxedクエリ書き換えモードでは、オプティマイザはマテリアライゼーションが最新であるかを確認せずに使用します。 - 更新動作:マテリアリゼーションは、メトリクスビューで定義されたスケジュールで更新されます。
REFRESH MATERIALIZED VIEWを実行して、手動更新をトリガーすることもできます。マテリアライゼーションは、オプティマイザがクエリの書き換えにそれを使用する前に、更新を完了する必要がある。
マテリアライズの仕組み(更新スケジュールやクエリの書き換えを含む)の詳細については、「メトリクスビューのマテリアライズ」を参照してください。