Share via


Power BI とサーバーレス Synapse SQL プールを使用して Synapse Link で Azure Cosmos DB データを分析する

適用対象: NoSQL MongoDB Gremlin

この記事では、Azure Cosmos DB の Synapse Link 上にサーバーレス SQL プール データベースおよびビューを構築する方法について説明します。 Azure Cosmos DB コンテナーに対してクエリを実行し、そのクエリを反映するために、それらのビュー上に Power BI でモデルを構築します。

Azure Synapse Link を使用すると、Power BI 内でほぼリアルタイムのダッシュボードを作成し、Azure Cosmos DB データを分析できます。 トランザクション ワークロードへのパフォーマンスやコストの影響はなく、ETL パイプライン管理にも複雑さは伴いません。 DirectQuery モードまたはインポート モードを使用できます。

Note

Azure Cosmos DB ポータルを使用して数回クリックするだけで、Power BI ダッシュボードを作成できます。 詳細については、「Azure Cosmos DB ポータルでの Synapse Link が有効なアカウント用の統合 Power BI エクスペリエンス」を参照してください。 これにより、Azure Cosmos DB コンテナーの Synapse サーバーレス SQL プールに T-SQL ビューが自動的に作成されます。 これらの T-SQL ビューに接続する .pbids ファイルをダウンロードするだけで、BI ダッシュボードの構築を開始できます。

このシナリオでは、パートナー小売店での Surface 製品の売上に関するダミー データを使用します。 大所帯への近さと、特定の週の広告の効果に基づいた店舗ごとの収益を分析します。 この記事では RetailSalesStoreDemographics という名前の 2 つのビューと、それらの間のクエリを作成します。 この GitHub リポジトリからサンプル製品データを取得できます。

注意

Gremlin API の Synapse Link はプレビュー段階です。 Azure CLI を使用して、新規または既存のグラフ内で Synapse Link を有効にすることができます。 構成方法の詳細については、こちらをクリックしてください。

前提条件

開始する前に、次のリソースを作成してください。

データベースとビューを作成する

Synapse ワークスペースで、 [開発] タブをクリックし、 + アイコンを選択して、 [SQL スクリプト] を選択します。

Add a SQL script to the Synapse Analytics workspace

すべてのワークスペースに、サーバーレス SQL エンドポイントが付属しています。 SQL スクリプトを作成したら、上部のツール バーから [組み込み] に接続します。

Enable the SQL script to use the serverless SQL endpoint in the workspace

マスターまたは既定のデータベースにビューを作成することは推奨されず、サポートもされていません。 RetailCosmosDB という名前の新しいデータベースと、Synapse Link 対応コンテナーに SQL ビューを作成します。 次のコマンドは、データベースを作成する方法を示しています。

-- Create database
Create database RetailCosmosDB

次に、さまざまな Synapse Link 対応 Azure Cosmos DB コンテナー全体の多数のビューを作成します。 ビューにより、T-SQL を使用して、さまざまなコンテナーに格納されている Azure Cosmos DB データを結合し、クエリを実行することができます。 ビューの作成時に、RetailCosmosDB データベースを選択してください。

次のスクリプトは、各コンテナーでビューを作成する方法を示しています。 わかりやすくするために、Synapse Link 対応コンテナーで、サーバーレス SQL プールの自動スキーマ推論機能を使用してみましょう。

RetailSales ビュー:

-- Create view for RetailSales container
CREATE VIEW  RetailSales
AS  
SELECT  *
FROM OPENROWSET (
    'CosmosDB', N'account=<Your Azure Cosmos DB account name>;database=<Your Azure Cosmos DB database name>;region=<Your Azure Cosmos DB Region>;key=<Your Azure Cosmos DB key here>',RetailSales)
AS q1

前の SQL スクリプトに Azure Cosmos DB リージョンと主キーを挿入してください。 リージョン名のすべての文字は、スペースなしの小文字にする必要があります。 OPENROWSET コマンドの他のパラメーターと異なり、コンテナー名パラメーターは引用符で囲まずに指定する必要があります。

StoreDemographics ビュー:

-- Create view for StoreDemographics container
CREATE VIEW StoreDemographics
AS  
SELECT  *
FROM OPENROWSET (
    'CosmosDB', N'account=<Your Azure Cosmos DB account name>;database=<Your Azure Cosmos DB database name>;region=<Your Azure Cosmos DB Region>;key=<Your Azure Cosmos DB key here>', StoreDemographics)
AS q1

次に、 [実行] コマンドを選択して、SQL スクリプトを実行します。

ビューのクエリ

2 つのビューが作成されたので、次のようにそれらの 2 つのビューを結合するクエリを定義してみましょう。

SELECT 
sum(p.[revenue]) as revenue
,p.[advertising]
,p.[storeId]
,p.[weekStarting]
,q.[largeHH]
 FROM [dbo].[RetailSales] as p
INNER JOIN [dbo].[StoreDemographics] as q ON q.[storeId] = p.[storeId]
GROUP BY p.[advertising], p.[storeId], p.[weekStarting], q.[largeHH]

[実行] を選択すると、結果として次のテーブルが得られます。

Query results after joining the StoreDemographics and RetailSales views

Power BI によるコンテナー上のモデル ビュー

次に、以下の手順に従って、Power BI デスクトップを開き、サーバーレス SQL エンドポイントに接続します。

  1. Power BI Desktop アプリケーションを開きます。 [データの取得] を選択し、 [その他] を選択します。

  2. 接続オプションの一覧から [Azure Synapse Analytics (SQL DW)] を選択します。

  3. データベースが配置されている SQL エンドポイントの名前を入力します。 [サーバー] フィールドに SynapseLinkBI-ondemand.sql.azuresynapse.net と入力します。 この例では、SynapseLinkBI がワークスペースの名前です。 ワークスペースに別の名前を指定している場合は、それを置き換えます。 データ接続モードで、 [直接クエリ] を選択し、 [OK] をクリックします。

  4. Microsoft Entra ID など、優先する認証方法を選択します。

  5. RetailCosmosDB データベースと RetailSales ビュー、StoreDemographics ビューを選択します。

  6. 2 つのビューを直接クエリ モードに読み込むには [読み込み] を選択します。

  7. [モデル] を選択し、 [storeId] 列から、2 つのビュー間のリレーションシップを作成します。

  8. RetailSales ビューの StoreId 列を StoreDemographics ビューの StoreId 列までドラッグします。

  9. RetailSales ビューには同じ店舗 ID を持つ複数の行があるため、多対一 (*: 1) リレーションシップを選択します StoreDemographics の店舗 ID 行は 1 行のみです (これはディメンション テーブルです)。

ここで、レポート ウィンドウに移動し、収益と LargeHH インデックスの分散表現に基づいて、店舗あたりの平均収益に対する世帯規模の相対的な重要度を比較するレポートを作成します。

  1. [散布図] を選択します。

  2. StoreDemographics ビューの LargeHH を X 軸に ドラッグ アンド ドロップします。

  3. [RetailSales] ビューの [Revenue] を Y 軸にドラッグ アンド ドロップします。 [平均] を選択して、店舗あたりおよび 1 週間あたりの製品ごとの平均売上を取得します。

  4. RetailSales ビューの productCode を凡例にドラッグ アンド ドロップして、特定の製品ラインを選択します。 これらのオプションを選択すると、次のスクリーンショットのようなグラフが表示されます。

Report that compares the relative importance of household size to the average revenue per store

次のステップ

Azure Cosmos DB ポータルでの Synapse Link が有効なアカウント用の統合 Power BI エクスペリエンス

T-SQL で Azure Synapse Link を使用して Azure Cosmos DB のデータのクエリを実行する

サーバーレス SQL プールを使用して、Azure Open Datasets を分析し、Azure Synapse Studio で結果を視覚化する