Microsoft Fabric Maps は、地理空間の視覚化と分析を提供し、リアルタイムおよび履歴空間データから実用的な分析情報を提供します。
このチュートリアルでは、電力会社のフィールド ディスパッチャーが Microsoft Fabric Maps を使用して、障害や資産障害が報告されたときに修復作業指示を作成および管理します。 このシナリオでは、影響を受ける顧客を特定し、アクティブな作業指示をリアルタイムで視覚化し、サービスの復旧のために効率的に乗組員を派遣することに重点を置いています。
このチュートリアルでは、顧客の場所のマッピング方法、ライブ作業指示書がマップ上に表示される方法、および Azure Maps Route Directions API を使用して最適なルートを計算する方法について説明します。 このチュートリアルは、マップに表示される最適化されたルートで終了します。
Fabric Maps は Fabric リアルタイム インテリジェンス内で実行され、Eventstream と Eventhouse を使用してストリーミング テレメトリを取り込み、リアルタイム監視を行います。 作業指示書の完了と運用結果は OneLake に格納され、マップに表示されるルートの最適化と分析に使用できます。
このチュートリアルでは、次のことを行います。
- Lakehouse を作成し、サンプルの作業指示書データをアップロードします。
- 作業指示書データをイベントハウスに書き込むイベントストリームを設定します。
- インポートされた作業指示書データから顧客座標を抽出する Kusto 関数を作成します。
- マップを作成し、関数をマップ レイヤーとして追加します。
- Azure Maps Route Directions API を使用して最適なルートを計算します。
- 最適化されたルートをレイヤーとしてマップに追加します。
- マップとレイヤーの設定を構成します。
[前提条件]
このチュートリアルを始める前に、 Real-Time Intelligenceのチュートリアル を復習し、コアな概念やワークフローに慣れてください。
Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください。
Azure Maps サブスクリプション キー。
Fabric アカウント。 Microsoft Fabric の詳細については、「 Microsoft Fabric とは」を参照してください。
Eventstream、Eventhouse (KQL データベース)、Lakehouse、Notebooks、およびマップ項目を作成するためのアクセス許可。 詳細については、「テナント設定について」を参照してください。
Microsoft Fabric 対応の 容量を持つ ワークスペース。 ワークスペースの作成についての詳細は、「 Create a workspace」をご覧ください。
Fabric Lakehouse の基本的な理解。構造化データと非構造化データを 1 つの場所に格納、管理、分析するためのデータ リポジトリです。 レイクハウスの作成の詳細については、「 Microsoft Fabric でレイクハウスを作成する」を参照してください。
データをほぼリアルタイムで取り込み、処理、分析するために使用される Fabric Eventhouse の基本的な理解。 イベントハウスの作成の詳細については、「イベントハウス の作成」を参照してください。
Lakehouse を作成し、サンプルの作業指示書データをアップロードする
リアルタイム ストリーミング ソースをシミュレートするために、次の手順のノートブックでは、Lakehouse にアップロードされたサンプル データを使用します。 運用環境では、このデータは静的ではなくストリーミングされます。
作業指示書データ ファイルを作成する
作業指示書データ ファイルには、このチュートリアルでリアルタイム ストリーミング ソースをシミュレートするために使用されるサンプルの作業指示書レコードが含まれています。 ファイルを作成した後、次のステップでレイクハウスにインポートします。
以下の内容をコピーしてテキストファイルに貼り付け、 WorkorderLocations.csvとして保存します。 次のステップでこのファイルを使います。
WorkorderID,Latitude,Longitude
100,48.22610712,16.32977412
101,48.23519063,16.37364699
102,48.19785896,16.38669028
103,48.18125837,16.37068261
107,48.15151126,16.41766590
108,48.20290349,16.32492121
104,48.23400591,16.4563533
105,48.18145603,16.40506946
106,48.16366378,16.36001083
Lakehouse を作成し、作業指示書データ ファイルをインポートする
受信する作業指示データ用の新しいレイクハウスを作成し、作業指示のロケーション ファイルをインポートします。
- ワークスペースから 「新しいアイテム」を選択し、検索ボックスに 「lakehouse 」と入力し、新しいレイクハウスを作成します。
- WorkorderLocationsLakehouse という名前を入力し、[作成] を選択します。
- 新しいレイクハウスで「 ファイルをアップロード 」を選択して WorkorderLocations.csv ファイルをアップロードします。
- 新しい lakehouse で、画面の左側にある [エクスプローラー ] ウィンドウを選択します。
- エクスプローラーの [ファイル] セクションで、WorkorderLocations.csv を選択して、アップロードしたファイルを表示します。
- [表示設定] で、[先頭行] をヘッダーとして選択します。
- (省略可能)[ビュー] ドロップダウン リストで、[ テーブル ビュー] を選択します。
イベントストリームを作成し、イベントハウスにデータを書き込む
このセクションでは、カスタム エンドポイントを使用してイベントストリーム フローを設計し、ノートブックを使用してデータを送信してリアルタイム ストリーミングをシミュレートします。
Microsoft Fabric Eventstreamは、Microsoft Fabricエコシステム内でイベントデータを取り込み、処理し、ルーティングできるリアルタイムデータストリーミングサービスです。 イベントドリブン ワークフローを構築するためのコードなしのエクスペリエンスが提供されるため、さまざまなソースからのリアルタイム データをシームレスに統合し、複数の宛先にルーティングできます。 サポートされているデータソースやカスタムエンドポイントへの接続方法の詳細については、「Microsoft Fabricイベントストリームの概要」をご覧ください。
イベントストリームデータをイベントハウスに取り込むことで、Kustoで処理可能なストリーミングイベントを可能にし、テーブルや関数を使ってリアルタイムで変換・解析が可能です。 詳細については、「イベントハウスの概要」を参照してください。
eventstream と eventhouse を作成する
ワークスペースから [ 新しい項目] を選択し、検索ボックスに 「eventstream 」と入力します。
[Eventstream] を選択します。
「新しいイベントストリーム」ダイアログで「WorkordersEventstream」という名前を入力し、「作成」を選択します。
ストリーミングイベントの 取り込み、変換、ルーティングのためのフロー設計 画面で、「 カスタムエンドポイントを選択」を選択します。
カスタム エンドポイントの [ ソースの追加] ダイアログで、[ 追加] を選択します。
これで eventstream が作成されました。 次に、イベントハウスを宛先として追加します。
eventstream デザイナーの WorkordersEventstream ノードで、イベントを変換または変換先を追加 ドロップダウンリストから Eventhouse を選択します。
画面の右側に [Eventhouse destination configuration]\(Eventhouse 変換先の構成 \) ウィンドウが表示されます。 次のように要求された詳細を入力し、[保存] を選択 します。
- データ インジェスト モード: インジェスト前のイベント処理に設定します。
- 宛先名: WorkordersEventhouse に設定します。
- ワークスペース: ワークスペースの名前を示すドロップダウン。
- Eventhouse: [ 新規作成] を選択し、 WorkordersEventhouse という名前のイベントハウスを作成します。
- KQL データベース: WorkordersEventhouse を選択します。
- KQL 変換先テーブル: [ 新しい作成 ] リンクを選択し、 Workorders という名前の新しいテーブルを作成します。
- 入力データ形式: Json を選択 します。
- データソースを追加した後にインジェストを有効化する:チェックボックスを選択してください。
イベントハウスが宛先として追加されたら、[ 発行 ] を選択して新しいイベントストリームを発行します。
必要な SAS キー認証キーを取得する
ノートブック コードの SAS キー認証セクションのイベント ハブ名と接続文字列の主キー値が必要です。
追加したカスタム エンドポイント ソース タイルを選択します。
[詳細] ウィンドウで、[SAS キー認証] を選択します。
次の 2 つの値をコピーし、ノートブック コードで使用するために保存します。
- イベント ハブ名: EVENT_HUB_NAME 変数に使用されます。
- 接続文字列-主キー: CONNECTION_STR 変数に使用されます。
ノートブックを使用してリアルタイム インジェストをシミュレートする
このセクションでは、先ほど作成した lakehouse に接続されたノートブックを作成し、提供されたコードを使用して CSV データを読み取り、イベントストリームにイベントを送信します。 このプロセスはリアルタイムのデータ取り込みをシミュレートします。 デモの場合は、ノートブックを手動で動かすか、定期的に実行するスケジュールを組むことができます。
Fabric ワークスペースにノートブックを作成する
作業指示場所ファイルを lakehouse から前のセクションで作成したイベントストリームにインポートするコードを含むノートブックを作成します。 これはリアルタイムのストリーミングソースをシミュレートし、本番環境では静的データではなくデータをストリーミングします。
ワークスペースから [ 新しい項目] を選択し、検索ボックスに ノートブック を入力します。
[ノートブック] を選択します。
[新しいノートブック] ダイアログで、[名前] フィールドに「WorkorderLocations」と入力し、[作成] を選択します。
ノートブックを lakehouse に接続するには、[データ項目の追加] ドロップダウン リストから [OneLake カタログから] を選択します。
OneLake カタログから WorkorderLocationsLakehouse を選択し、[接続] ボタンを選択します。 この湖の家は 、あなたが以前作ったものです。
ノートブックを作成し、レイクハウスに接続した後、次のコードを最初のセルに貼り付けて実行し、Azure Event Hubs SDKをインストールします。
# Install Azure Event Hubs SDK (only needed once per environment) %pip install azure-eventhub[ + コード ] を選択して、ノートブックに新しいセルを作成します。
新しいセルを選択し、次のコードを入力します。
from azure.eventhub import EventHubProducerClient, EventData import pandas as pd import json import time # Replace with your actual connection string and Event Hub name CONNECTION_STR = "" # Connection string-primary key EVENT_HUB_NAME = "" # Event hub name producer = EventHubProducerClient.from_connection_string(conn_str=CONNECTION_STR, eventhub_name=EVENT_HUB_NAME) df = spark.read.csv("Files/WorkorderLocations.csv", header=True, inferSchema=True) pdf = df.toPandas() total_records = len(pdf) for index, row in pdf.iterrows(): # Convert row to dictionary row_dict = row.to_dict() # Truncate coordinates to 5 decimal digits if 'lat' in row_dict: row_dict['Latitude'] = round(float(row_dict['Latitude']), 5) if 'lon' in row_dict: row_dict['Longitude'] = round(float(row_dict['Longitude']), 5) # Serialize to JSON payload = json.dumps(row_dict) # Send to Event Hub event_data = EventData(payload) with producer: producer.send_batch([event_data]) # Wait 100ms time.sleep(0.1)前のセクションで「必要なSASキー認証キーを取得する」で得た変数の値を加えCONNECTION_STR、EVENT_HUB_NAMEしてください。
ノートブック コードを実行します。 これにより、Workorders テーブルが WorkordersEventhouse イベントハウスの KQL データベースに作成されます。
Kusto 関数を作成し、マップ レイヤーとして追加する
このセクションでは、イベントハウスの Workorders テーブルから現在の作業指示場所データを取得し、その関数を Fabric Maps マップのデータ ソースとして使用する Kusto 関数を作成します。 この関数を使用すると、マップでアクティブな作業指示をレイヤーとして表示でき、計画してフィールド クルーに割り当てる必要があるジョブを視覚的に表示できます。
Kusto 関数を作成する
あなたの eventhouse (KQL データベース) からのデータ:
イベントハウスに関連付けられている KQL データベース を開きます。
[ 関数 ]、[ 新しい関数] の順に選択します。
このステップでクエリが作成され、実行時に WorkordersFunctionという新しい関数が作成されます。
次のクエリを入力します。
.create-or-alter function WorkordersFunction() { Workorders | project Latitude, Longitude, WorkorderID }クエリを実行します。
1 & 2 - WorkordersFunction 関数の作成に使用される KQL クエリ。
3 - 新たに作成された WorkordersFunction 関数。
FunctionsフォルダでWorkordersFunctionを選択し、プレビュー結果を選んで、有効な位置フィールドを持つ作業指示のレコードが返されるか確認してください。
この関数は、ファブリック マップ マップ データ レイヤーの再利用可能なデータ ソースとして機能します。これについては、次のセクションで説明します。
マップを作成し、関数をレイヤーとして追加する
このセクションでは、ファブリック マップ マップを作成し、以前に作成した KQL 関数をデータ レイヤーとして使用します。 マップは更新間隔で構成され、ストリーミング作業指示書データが自動的に更新され、アクティブな作業指示のほぼリアルタイムの空間ビューが提供されます。 次に、レイヤーの名前を変更し、その設定を調整して、マップ上でのデータの表示方法を制御します。 このライブ地理空間コンテキストは、ディスパッチャーがフィールド アクティビティを監視し、サービス エリア全体の需要を評価し、より情報に基づいたルーティングと割り当ての決定を行うのに役立ちます。
新しいマップの作成
- ワークスペースから [ 新しい項目] を選択します。
- 「新しいアイテム」ペインで検索欄にmapを入力し、「Map」を選択してください。
- [新しいマップ] ダイアログで、[名前] フィールドに「WorkordersMap」と入力し、[作成] を選択します。
マップに eventhouse を追加する
[エクスプローラー] ウィンドウで、[Fabric アイテム] を選択し、[追加] ボタンを選択します。
[追加] ボタンを選択したときに表示されるメニューから KQL データベースを選択します。
OneLake カタログから、前に作成したイベントハウス WorkordersEventhouse を選択し、[追加] を選択します。
ヒント
もしKQLのようなエラーが出た場合、 データベースにはアクセスを制限する保護ラベルがあります。ご協力いただければデータベース所有者にご連絡ください。KQLデータベースのセンシティブ表示も確認してください。アクセスを制限する可能性があります。 詳細については、「 ファブリック項目に秘密度ラベルを適用する」を参照してください。
マップに関数を表示する
新しいマップの [エクスプローラー ] ウィンドウで、前の手順で追加した eventhouse WorkordersEventhouse を選択します。
KQLの WorkordersFunctionに行き、楕円(...)を選択してメニューを開きます。
ポップアップ メニューから [マップに表示 ] を選択します。
[ マップ上の Eventhouse データの表示 ] ダイアログが表示され、[ プレビュー データ ] が選択されています。 変更の必要はありません。 正しいことを確認し、[次へ] を選択します
[ ジオメトリとデータ更新間隔の設定 ] ステップで、フィールドを次のように設定し、[ 次へ] を選択します。
データ レイヤー名: WorkordersFunction
幾何学列の位置:緯度と経度のデータは別々の列に分かれています
緯度列: 緯度
経度列: 経度
データ更新間隔: 5 分
「 マップへのレビューと追加 」ステップで設定を確認し、 マップに追加を選択します。
関数の結果は更新された地図に表示されました。
Azure Maps Route Directions APIで最適化されたマルチストップルートを生成します
このセクションでは、KQL データベースから作業指示書座標を取得し、 Azure Maps Route Directions REST API を呼び出す新しいノートブックを作成します。 サービスのマルチストップ最適化機能を有効にして、各場所訪問の最も効率的な順番を決定し、その最適化された順序でルートの形状を返します。 この出力は後で地図上で推奨される技術者のルートを視覚化するために使います。
このセクションを完了するには、Azure Maps アカウントとサブスクリプション キーを持つ Azure アカウントが必要です。 Azure アカウントがない場合は、無料アカウントを作成します。 Azure Maps アカウントの作成の詳細については、「Azure Maps アカウント の作成」を参照してください。 Azure Maps サブスクリプション キーの取得の詳細については、Azure Maps クイック スタート の「アカウントのサブスクリプション キーを取得 する」を参照してください。
最適なルートを取得するノートブックを Fabric ワークスペースに作成する
ワークスペース内から、前に作成した eventhouse WorkordersEventhouse を開きます。
KQL データベースの下の左側のナビゲーション パネルで、WorkordersEventhouse を選択します。
トップメニューバーに Notebookのオプションが表示されるようになりました。 それを選択して新しいノートブックを作成します。
新しいノートブックで、 kustoUri 変数の値を保存します。 この値は、手順 6 で作成した新しいノートブック コードで使用します。
[データ項目の追加] ドロップダウン リストから [OneLake カタログから] を選択して、ノートブックを WorkorderLocationsLakehouse に接続します。
注
Microsoft Fabric で Lakehouse を作成すると、同じ名前の SQL 分析エンドポイントが自動的に作成されます。
どちらの項目もワークスペースに表示されますが、目的は異なります。
- Lakehouse は、ノートブック、Spark 処理、およびデータ インジェストに使用されます。
- SQL 分析エンドポイントは、Lakehouse データに対する読み取り専用の T-SQL クエリ サーフェスです。
ノートブックを接続または作成する際は、SQL分析エンドポイントではなく Lakehouseを選択してください。 OneLake カタログに WorkorderLocationsLakehouse が 2 回表示される場合は、Lakehouse でフィルター処理します。
新しいノートブックが作成されて湖畔の家に接続されたら、ノートブックの2つ目のセルに以下のコードを入力し、デフォルトのコードを置き換えます。 次に、前のステップで保存した変数の値を追加します:
import os, json, requests from pyspark.sql import types as T from pyspark.sql.functions import col # ---- Configuration ---- AZMAPS_SUBSCRIPTION_KEY = os.environ.get( 'AZMAPS_SUBSCRIPTION_KEY', '<Your Azure Maps subscription key>' ) API_VERSION = '2025-01-01' BASE_URL = 'https://atlas.microsoft.com' # KQL query that invokes the stored function kustoQuery = """WorkordersFunction()""" # Your Kusto URI kustoUri = "" # Your KQL database name database = "WorkordersEventhouse" # The access credentials. accessToken = mssparkutils.credentials.getToken(kustoUri) kustoDf = spark.read\ .format("com.microsoft.kusto.spark.synapse.datasource")\ .option("accessToken", accessToken)\ .option("kustoCluster", kustoUri)\ .option("kustoDatabase", database)\ .option("kustoQuery", kustoQuery).load() # Write transformed response to a new file so the raw output is preserved OUTPUT_GEOJSON_PATH_TRANSFORMED = ( 'Files/OptimizedRoute.geojson' # GeoJSON output file ) # ---- Read Stores from KQL database table ---- stores_df = spark.read\ .format("com.microsoft.kusto.spark.synapse.datasource")\ .option("accessToken", accessToken)\ .option("kustoCluster", kustoUri)\ .option("kustoDatabase", database)\ .option("kustoQuery", kustoQuery).load()\ .select( col("WorkorderID").alias("workorder_id"), col("Latitude").alias("lat"), col("Longitude").alias("lon") ) # Ordered waypoints: origin first, then the rest by workorder_id # (API will re-order when optimizeWaypointOrder=True) stores_pd = stores_df.orderBy('workorder_id').toPandas() waypoints_lonlat = [[float(r['lon']), float(r['lat'])] for _, r in stores_pd.iterrows()] # ---- Build Directions request body (GeoJSON) ---- features = [] for idx, (lon, lat) in enumerate(waypoints_lonlat): features.append({ "type": "Feature", "geometry": {"type": "Point", "coordinates": [lon, lat]}, "properties": {"pointIndex": idx, "pointType": "waypoint"} }) dir_body = { "type": "FeatureCollection", "features": features, "optimizeRoute": "fastestWithTraffic", "routeOutputOptions": ["routePath"], # ensures route path geometry in response "travelMode": "truck", "optimizeWaypointOrder": True } # ---- Call Azure Maps Directions (POST) ---- url = f"{BASE_URL}/route/directions" params = {"api-version": API_VERSION} headers = { "Accept": "application/geo+json", "Content-Type": "application/geo+json", "subscription-key": AZMAPS_SUBSCRIPTION_KEY } resp = requests.post(url, params=params, data=json.dumps(dir_body), headers=headers) resp.raise_for_status() resp_json = resp.json() # exact payload as returned by the API # ---- Transform: move order.optimizedIndex -> properties.optimizedIndex for all Waypoint features to add as a data label in the map---- for feat in resp_json.get("features", []): props = feat.get("properties") or {} if props.get("type") == "Waypoint": order = props.get("order") or {} opt_idx = order.pop("optimizedIndex", None) if opt_idx is not None: props["optimizedIndex"] = opt_idx + 1 # reassign possibly-updated order (still contains inputIndex if present) props["order"] = order feat["properties"] = props # ---- Write transformed GeoJSON ---- from notebookutils import mssparkutils mssparkutils.fs.put(OUTPUT_GEOJSON_PATH_TRANSFORMED, json.dumps(resp_json), True) print(f"Transformed Directions GeoJSON (waypoints carry properties.optimizedIndex) written to {OUTPUT_GEOJSON_PATH_TRANSFORMED}")AZMAPS_SUBSCRIPTION_KEY 変数の ノートブック コードに Azure Maps サブスクリプション キーを入力し、"< Azure Maps サブスクリプション キー>" を Azure Maps サブスクリプション キーに置き換えます。
Important
この例では、わかりやすくするために Azure Maps サブスクリプション キーをハードコーディングします。 運用環境ではシークレットをハードコーディングしないでください。 Azure Key Vault を使用してシークレットを安全に格納および管理し、実行時に参照します。 詳細については、「シークレットを 保護するためのベスト プラクティス」を参照してください。
メニューの [ 名前を付けて保存] ボタンを選択し、ノートブックを OptimizeRoute として保存します。
ノートブックを実行して、Lakehouse の Files ディレクトリに OptimizedRoute.geojson ファイルを作成します。
マップに lakehouse を追加する
- [エクスプローラー] ウィンドウで、[Fabric アイテム] を選択し、[追加] ボタンを選択します。
- [追加] ボタンを選択したときに表示されるメニューから [Lakehouse] を選択します。
- OneLake カタログから、前に作成した lakehouse WorkorderLocationsLakehouse を選択し、[追加] を選択します。
最適化されたルートをマップに表示する
新しいマップの [エクスプローラー ] ウィンドウで、前の手順で追加した lakehouse WorkorderLocationsLakehouse を選択します。
Lakehouse の Files ディレクトリで OptimizedRoute.geojson に移動し、省略記号 (...) を選択してポップアップ メニューを表示します。
ポップアップ メニューから [マップに表示 ] を選択します。
[データ レイヤー] パネルで、WorkordersFunction レイヤーの表示をオフに切り替えます。
完了すると、ファブリック マップ マップに新しいマップ レイヤーが表示されます。
マップ レイヤーの設定
Fabric Mapsは、データの表示方法を制御できるさまざまなレイヤー設定を提供しています。 このセクションでは、レイヤーの名前を変更し、シンボル スタイルを調整し、フィールド値に基づいてラベルを構成することで、ルート最適化プロセスから作成されたレイヤーをカスタマイズします。 これらの設定は、読みやすさを向上させ、作業指示書データを一目で簡単に解釈するのに役立ちます。
レイヤーの名前を変更する
データレイヤーのペインで、OptidRouteオプションメニューを開き、楕円を選択してください(...)。
[名前の変更] を選択します。
マップ レベルでラベルを削除する
マップレベルで ラベル のオン・オフを切り替えると、ベースマップのテキストラベルに影響します。 これらのラベルは、基になるマップ スタイルから取得され、次のものが含まれます。
- 市区町村名
- 国と地域の名前
- 道路名と高速道路名
- 水の特徴名 (河川、湖、海)
- その他の管理地名または地理的地名
ラベルが表示されない場合、ベースマップはクリーンかつミニマルな外観になり、地名テキストはベースマップ上に表示されません。
ベースマップ ラベルをオフにするには:
Fabric Mapsのマップ設定の詳細については、「ベースマップ設定の設定」をご覧ください。
レイヤーにデータ ラベルを追加する
データ ラベルは、レイヤーのデータセット内の 1 つ以上のフィールドから取得されるデータドリブン注釈です。 これらは、作業指示の場所を表すマップ上のポイントなど、レイヤー レベルのマップ フィーチャに直接関連付けられています。 Fabric Mapsのデータラベルの詳細については、「データラベル設定」をご覧ください。
データレイヤーのパネルで最適化ルートを選択します。 画面右側には 「最適化ルート 設定」のペインが表示されます。
最適化ルート設定ペインで、>データラベル設定を選択してください。
[ データ ラベルを有効にする] トグルを選択して、データ ラベルを有効にします。 その他のデータ ラベル設定が表示されます。
次のデータ ラベル設定を変更します。
- データ ラベル: オプティマイズドインデックス
- テキストの色: 白
- テキスト サイズ スライダーを 20 に設定
- テキスト ストロークの色: 黒
- テキスト ストローク幅 スライダーを 2 に設定
概要
このチュートリアルでは、Microsoft Fabric Real-Time IntelligenceとFabricマップを使ってエンドツーエンドのリアルタイム作業指示ルーティングシナリオを構築する方法を紹介しました。 KQLを使ってストリーミング作業指示のデータを取り込み、変換し、クエリを行い、そのデータを地図上で可視化することで、動的で継続的に更新される作業指示の位置表示を作成します。 ルーティング ロジックと最適なパス計算を統合することで、このソリューションは、リアルタイムの地理空間分析がディスパッチャーとフィールド運用チームが、より迅速かつ適切な情報に基づく意思決定を行うのにどのように役立つかを示します。
このパターンはフリート追跡、資産監視、インシデント対応など、他の位置情報に基づくシナリオにも拡張できます。 Microsoft Fabric では、イベントドリブン データ、KQL ベースの分析、マップベースの視覚化を組み合わせることで、生ストリーミング データから実用的な地理的分析情報にほぼリアルタイムで移行できます。
次のステップ
このチュートリアルで扱っているFabric Mapsの記事についての詳細は、以下をご覧ください: