Power BI とサーバーレス Synapse SQL プールを使用して Synapse Link で Azure Cosmos DB データを分析する
適用対象: NoSQL MongoDB Gremlin
この記事では、Azure Cosmos DB の Synapse Link 上にサーバーレス SQL プール データベースおよびビューを構築する方法について説明します。 Azure Cosmos DB コンテナーに対してクエリを実行し、そのクエリを反映するために、それらのビュー上に Power BI でモデルを構築します。
重要
Microsoft Fabric での Azure Cosmos DB のミラーリングが、NoSql API のプレビューで利用できるようになりました。 この機能により、Azure Synapse Link のすべての機能が提供され、分析パフォーマンスが向上し、データ資産と Fabric OneLake の統合および Delta Parquet 形式のデータへのアクセスができるようになります。 Azure Synapse Link を検討している場合は、ミラーリングを試して、組織への全体的な適合性を評価することをお勧めします。 Microsoft Fabric でのミラーリングを開始する。
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 製品の売上に関するダミー データを使用します。 大所帯への近さと、特定の週の広告の効果に基づいた店舗ごとの収益を分析します。 この記事では RetailSales と StoreDemographics という名前の 2 つのビューと、それらの間のクエリを作成します。 この GitHub リポジトリからサンプル製品データを取得できます。
前提条件
開始する前に、次のリソースを作成してください。
Azure Cosmos DB アカウントの Azure Synapse Link を有効にする
Azure Cosmos DB アカウント内にデータベースと、分析ストアが有効にされている 2 つのコンテナーを作成します。
このバッチ データ インジェスト ノートブックで説明されているように、Azure Cosmos DB コンテナーに製品データを読み込みます。
SynapseLinkBI という名前の Synapse ワークスペースを作成します。
データベースとビューを作成する
Synapse ワークスペースで、 [開発] タブをクリックし、 + アイコンを選択して、 [SQL スクリプト] を選択します。
すべてのワークスペースに、サーバーレス SQL エンドポイントが付属しています。 SQL スクリプトを作成したら、上部のツール バーから [組み込み] に接続します。
マスターまたは既定のデータベースにビューを作成することは推奨されず、サポートもされていません。 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]
[実行] を選択すると、結果として次のテーブルが得られます。
Power BI によるコンテナー上のモデル ビュー
次に、以下の手順に従って、Power BI デスクトップを開き、サーバーレス SQL エンドポイントに接続します。
Power BI Desktop アプリケーションを開きます。 [データの取得] を選択し、 [その他] を選択します。
接続オプションの一覧から [Azure Synapse Analytics (SQL DW)] を選択します。
データベースが配置されている SQL エンドポイントの名前を入力します。 [サーバー] フィールドに
SynapseLinkBI-ondemand.sql.azuresynapse.net
と入力します。 この例では、SynapseLinkBI がワークスペースの名前です。 ワークスペースに別の名前を指定している場合は、それを置き換えます。 データ接続モードで、 [直接クエリ] を選択し、 [OK] をクリックします。Microsoft Entra ID など、優先する認証方法を選択します。
RetailCosmosDB データベースと RetailSales ビュー、StoreDemographics ビューを選択します。
2 つのビューを直接クエリ モードに読み込むには [読み込み] を選択します。
[モデル] を選択し、 [storeId] 列から、2 つのビュー間のリレーションシップを作成します。
RetailSales ビューの StoreId 列を StoreDemographics ビューの StoreId 列までドラッグします。
RetailSales ビューには同じ店舗 ID を持つ複数の行があるため、多対一 (*: 1) リレーションシップを選択します StoreDemographics の店舗 ID 行は 1 行のみです (これはディメンション テーブルです)。
ここで、レポート ウィンドウに移動し、収益と LargeHH インデックスの分散表現に基づいて、店舗あたりの平均収益に対する世帯規模の相対的な重要度を比較するレポートを作成します。
[散布図] を選択します。
StoreDemographics ビューの LargeHH を X 軸に ドラッグ アンド ドロップします。
[RetailSales] ビューの [Revenue] を Y 軸にドラッグ アンド ドロップします。 [平均] を選択して、店舗あたりおよび 1 週間あたりの製品ごとの平均売上を取得します。
RetailSales ビューの productCode を凡例にドラッグ アンド ドロップして、特定の製品ラインを選択します。 これらのオプションを選択すると、次のスクリーンショットのようなグラフが表示されます。
次の手順
Azure Cosmos DB ポータルでの Synapse Link が有効なアカウント用の統合 Power BI エクスペリエンス
T-SQL で Azure Synapse Link を使用して Azure Cosmos DB のデータのクエリを実行する
サーバーレス SQL プールを使用して、Azure Open Datasets を分析し、Azure Synapse Studio で結果を視覚化する