Lernprogramm: Erstellen von Arbeitsauftragsrouting in Echtzeit mit Fabric Maps

Microsoft Fabric Maps bietet geospatiale Visualisierung und Analyse, um umsetzbare Einblicke aus Echtzeit- und historischen räumlichen Daten zu liefern.

In diesem Lernprogramm verwendet ein Netzdisponent im Außendienst Microsoft Fabric Maps, um Reparaturaufträge zu erstellen und zu verwalten, wenn Störungen oder Anlagenfehler gemeldet werden. Das Szenario konzentriert sich auf das Auffinden betroffener Kunden, die Visualisierung aktiver Arbeitsaufträge in Echtzeit und das effiziente Verteilen von Crews für die Dienstwiederherstellung.

Dieses Lernprogramm veranschaulicht, wie Kundenstandorte zugeordnet werden, Live-Arbeitsaufträge auf der Karte angezeigt werden und eine optimale Route mithilfe der Azure Maps Route Directions API berechnet wird. Das Lernprogramm endet mit einer optimierten Route auf der Karte.

Fabric Maps wird in Fabric Real-Time Intelligence ausgeführt und erfasst Streaming-Telemetrie mithilfe von Eventstream und Eventhouse zur Echtzeitüberwachung. Arbeitsauftragsabschlusse und betriebstechnische Ergebnisse werden in OneLake gespeichert, wo sie zur Routenoptimierung und Analyse verwendet werden können, die auf der Karte angezeigt werden.

In diesem Tutorial werden Sie Folgendes lernen:

  • Erstellen Sie ein Lakehouse und laden Sie Beispielarbeitsauftragsdaten hoch.
  • Richten Sie einen Eventstream ein, um Arbeitsauftragsdaten in ein Eventhouse zu schreiben.
  • Erstellen Sie eine Kusto-Funktion, um Kundenkoordinaten aus den importierten Arbeitsauftragsdaten zu extrahieren.
  • Erstellen Sie eine Karte, und fügen Sie die Funktion als Kartenebene hinzu.
  • Berechnen Sie eine optimale Route mithilfe der Azure Maps Route Directions API.
  • Fügen Sie die optimierte Route zur Karte als Ebene hinzu.
  • Konfigurieren Sie Karten- und Layereinstellungen.

Voraussetzungen

Bevor Sie mit diesem Tutorial beginnen, lesen Sie die Real-Time Intelligence-Tutorials , um sich mit den Kernkonzepten und Arbeitsabläufen vertraut zu machen.

Lakehouse erstellen und Beispieldaten für Arbeitsaufträge hochladen

Um eine Echtzeitstreamingquelle zu simulieren, verwendet das Notizbuch in den folgenden Schritten Beispieldaten, die in ein Seehaus hochgeladen wurden. In der Produktion würden diese Daten gestreamt statt statisch.

Arbeitsauftragsdatendatei erstellen

Die Arbeitsreihenfolgedatendatei enthält Beispieldatensätze für Arbeitsreihenfolgen, die in diesem Lernprogramm verwendet werden, um eine Echtzeitstreamingquelle zu simulieren. Nachdem Sie die Datei erstellt haben, importieren Sie sie im nächsten Schritt in ein Lakehouse.

Kopiere und füge den folgenden Inhalt in eine Textdatei ein und speichere ihn dann als WorkorderLocations.csv. Im nächsten Schritt verwenden Sie diese Datei.

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

Erstellen Sie ein Lakehouse und importieren Sie die Arbeitsauftrag-Datendatei

Erstelle ein neues Lakehouse für eingehende Daten zu Arbeitsaufträgen und importiere die Datei mit den Standorten der Arbeitsaufträge.

  1. Wählen Sie in Ihrem Arbeitsbereich Neues Element, geben Sie Lakehouse im Suchfeld ein und wählen Sie es aus, um ein neues Lakehouse zu erstellen.
  2. Geben Sie einen Namen "WorkorderLocationsLakehouse " ein, und wählen Sie "Erstellen" aus.
  3. Im neuen Lakehouse wählen Sie Dateien hochladen und laden Sie die Datei WorkorderLocations.csv hoch.
  4. Wählen Sie im neuen Seehaus den Explorer-Bereich auf der linken Seite des Bildschirms aus.
  5. Wählen Sie im Abschnitt „Dateien“ des ExplorersWorkorderLocations.csv aus, um die hochgeladene Datei anzuzeigen.
  6. Wählen Sie in den Ansichtseinstellungen"Erste Zeile" als Kopfzeile aus.
  7. (Optional) Wählen Sie in der Dropdownliste "Ansicht" die Option "Tabellenansicht" aus.

Screenshot der Datei WorkorderLocations.csv nach dem Importieren in ein Lakehouse.

Erstellen eines Eventstreams und Schreiben von Daten in ein Eventhouse

In diesem Abschnitt entwerfen Sie einen Ereignisstreamfluss mithilfe eines benutzerdefinierten Endpunkts und senden Daten mithilfe eines Notizbuchs, um echtzeitbasiertes Streaming zu simulieren.

Microsoft Fabric Eventstream ist ein Echtzeit-Datenstreaming-Dienst, der es Ihnen ermöglicht, Ereignisdaten innerhalb des Microsoft Fabric-Ökosystems zu erfassen, zu verarbeiten und weiterzuleiten. Es bietet eine codelose Oberfläche zum Erstellen ereignisgesteuerter Workflows, wodurch eine nahtlose Integration von Echtzeitdaten aus verschiedenen Quellen ermöglicht und an mehrere Ziele weitergeleitet wird. Weitere Informationen zu unterstützten Datenquellen oder wie man sich mit einem benutzerdefinierten Endpunkt verbindet, finden Sie im Überblick über Microsoft Fabric-Eventstreams.

Indem Sie Eventstream-Daten in ein Eventhouse aufnehmen, stellen Sie Streaming-Events mit Kusto zur Verfügung, wo Sie sie in Echtzeit mit Tabellen oder Funktionen transformieren und analysieren können. Weitere Informationen finden Sie unter Eventhouse-Übersicht.

Erstellen eines Eventstreams und eines Eventhouses

  1. Wählen Sie in Ihrem Arbeitsbereich "Neues Element" aus, und geben Sie " Eventstream " in das Suchfeld ein.

  2. Wählen Sie "Eventstream" aus.

  3. Im Dialogfeld Neuer Ereignisstrom geben Sie einen Namen ein: "WorkordersEventstream" und wählen Sie dann Erstellen.

  4. Wählen Sie auf dem Bildschirm „Ablauf zum Erfassen, Transformieren und Weiterleiten von Streamingereignissen entwerfen“ die Option „Benutzerdefinierten Endpunkt verwenden“.

    Screenshot des Bildschirms

  5. Wählen Sie im Dialogfeld " Quelle hinzufügen " des benutzerdefinierten Endpunkts "Hinzufügen" die Option "Hinzufügen" aus.

    Screenshot des Dialogfelds „Quelle hinzufügen“ für den benutzerdefinierten Endpunkt in Microsoft Fabric, das eine Breadcrumb-Navigation mit einem benutzerdefinierten Endpunkt-Pfeil zu „WorkordersEventstream“ oben anzeigt. Das Dialogfeld enthält ein „Quellenname“-Feld mit rotem Sternchen, das als erforderlich gekennzeichnet ist und den Text CustomEndpoint-Source enthält. In der unteren rechten Ecke des Dialogfelds wird eine Schaltfläche „Hinzufügen“ in der Farbe Tiefblaugrün hervorgehoben, die zeigt, dass sie ausgewählt werden sollte, ohne dass weitere Maßnahmen erforderlich sind.

    Der Eventstream wird jetzt erstellt. Fügen Sie als Nächstes ein Eventhouse als Ziel hinzu.

  6. Wählen Sie im Knoten "WorkordersEventstream" des Eventstream-Designers Eventhouse aus der Dropdownliste "Ereignisse transformieren oder Ziel hinzufügen" aus.

    Screenshot des Microsoft Fabric-Ereignisstream-Designers mit einem Flussdiagramm, in dem die CustomEndpoint-Quelle mit dem WorkordersEventstream-Knoten verbunden ist. Ein Dropdown-Menü wird von der Kachel 'Ereignisse transformieren oder Ziel hinzufügen' auf der rechten Seite erweitert, wobei unten der Abschnitt 'Ziele' mit mehreren Optionen, darunter Eventhouse, angezeigt wird. Eventhouse ist mit einem roten Rechteck hervorgehoben, was bedeutet, dass es ausgewählt werden soll.

  7. Der Zielkonfigurationsbereich "Eventhouse " wird auf der rechten Seite des Bildschirms angezeigt. Füllen Sie die angeforderten Details wie folgt aus, und wählen Sie dann "Speichern" aus:

    1. Datenaufnahmemodus: Festlegen auf Ereignisverarbeitung vor der Erfassung.
    2. Zielname: Eingestellt auf WorkordersEventhouse.
    3. Arbeitsbereich: Eine Dropdownliste mit dem Namen Ihres Arbeitsbereichs.
    4. Eventhouse: Wählen Sie "Neu erstellen" aus, und erstellen Sie ein Eventhouse namens "WorkordersEventhouse".
    5. KQL-Datenbank: Auswählen WorkordersEventhouse.
    6. KQL-Zieltabelle: Wählen Sie den Link "Neuen Erstellen" aus, und erstellen Sie eine neue Tabelle mit dem Namen "Workorders".
    7. Eingabedatenformat: Wählen Sie JSON aus.
    8. Datenaufnahme nach dem Hinzufügen der Datenquelle aktivieren: Aktivieren Sie das Kontrollkästchen.

    Screenshot des Bereichs

  8. Nachdem das Eventhouse als Ziel hinzugefügt wurde, wählen Sie "Veröffentlichen " aus, um Ihren neuen Eventstream zu veröffentlichen.

    Screenshot des Eventstream-Designers mit einem Datenfluss mit CustomEndpoint-Workorders-Quelle, die mit einem Workorders-Stream-Knoten verbunden ist. Dieser stellt eine Verbindung mit dem WorkordersEventhouse-Ziel her. Der

Erforderliche SAS-Authentifizierungsschlüssel abrufen

Sie benötigen den Ereignishubnamen und die Primärschlüsselwerte der Verbindungszeichenfolge aus dem SAS-Schlüsselauthentifizierungsbereich in Ihrem Notizbuchcode.

  1. Wählen Sie die benutzerdefinierte Endpunktquellkachel aus, die Sie soeben hinzugefügt haben.

  2. Wählen Sie im Detailbereich die SAS-Schlüsselauthentifizierung aus.

  3. Kopieren Sie die folgenden beiden Werte und speichern Sie sie zur Verwendung im Notebook-Code.

    • Name des Ereignishubs: Wird für die variable EVENT_HUB_NAME verwendet.
    • Verbindungszeichenfolgen-Primärschlüssel: Wird für die variable CONNECTION_STR verwendet.

    Screenshot des Eventstream-Designers mit ausgewählter SAS-Schlüsselauthentifizierungsoption im Detailbereich, in dem der Name des Ereignishubs und die Felder

Simulieren der Echtzeit-Datenaufnahme mithilfe eines Notebooks

In diesem Abschnitt erstellen Sie ein Notizbuch, das mit dem zuvor erstellten Lakehouse verbunden ist. Verwenden Sie dann den bereitgestellten Code, um die CSV-Daten zu lesen und Ereignisse an den Eventstream zu senden. Dieser Prozess simuliert die Datenaufnahme in Echtzeit. Bei Demos kannst du das Notizbuch manuell ausführen oder es so planen, dass es periodisch läuft.

Erstellen eines Notizbuchs in Ihrem Fabric-Arbeitsbereich

Erstellen Sie ein Notizbuch mit Code, um die Arbeitsauftragsspeicherortdatei aus Ihrem Lakehouse in den Ereignisstream zu importieren, den Sie im vorherigen Abschnitt erstellt haben. Dies simuliert eine Echtzeit-Streaming-Quelle, die in einer Produktionsumgebung Daten streamt, anstatt statische Daten zu verwenden.

  1. Wählen Sie in Ihrem Arbeitsbereich "Neues Element" aus, und geben Sie das Notizbuch in das Suchfeld ein.

  2. Wählen Sie Notebook aus.

    Screenshot des Microsoft Fabric-Dialogfelds

  3. Geben Sie im Dialogfeld "Neues Notizbuch " " WorkorderLocations " in das Feld "Name " ein, und wählen Sie dann "Erstellen" aus.

  4. Um Ihr Notizbuch mit dem Seehaus zu verbinden, wählen Sie in der Dropdownliste "Datenelemente hinzufügen" die Option "Aus OneLake-Katalog" aus.

    Screenshot des Bereichs

  5. Wählen Sie WorkorderLocationsLakehouse aus dem OneLake-Katalog und dann die Schaltfläche " Verbinden " aus. Dieses Seehaus ist das, das du zuvor gebaut hast.

  6. Nachdem du das Notizbuch erstellt und mit deinem Lakehouse verbunden hast, füge du den folgenden Code in die erste Zelle ein und führe es aus, um das Azure Event Hubs SDK zu installieren:

    # Install Azure Event Hubs SDK (only needed once per environment)
    %pip install azure-eventhub
    
  7. Wählen Sie +Code aus, um eine neue Zelle im Notizbuch zu erstellen.

    Ein Screenshot der Microsoft Fabric-Notebookoberfläche zeigt eine Codezelle mit zwei Zeilen Python-Code. Zeile 1 enthält einen Kommentar mit dem Text „Azure Event Hubs SDK installieren – nur einmal pro Umgebung erforderlich“. Zeile 2 zeigt den Befehl „%pip install azure-eventhub“. Unterhalb der Codezelle wird ein Tooltip mit der Aufschrift „Add code cell“ angezeigt, der auf eine mit einem roten Rechteck hervorgehobene Schaltfläche „+ Code“ weist. Rechts daneben erscheint eine Schaltfläche „+ Markdown“. Oben rechts ist „PySpark Python“ als ausgewählter Kernel zu sehen.

  8. Wählen Sie die neue Zelle aus, und geben Sie den folgenden Code ein:

    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)
    
  9. Fügen Sie die Werte für die Variablen CONNECTION_STR und EVENT_HUB_NAME hinzu, die Sie im vorherigen Abschnitt " Erhalten erforderliche SAS-Schlüssel-Authentifizierungsschlüssel" erhalten haben.

  10. Führen Sie den Notizbuchcode aus. In der KQL-Datenbank wird die Tabelle "Workorders" im Eventhouse WorkordersEventhouse erstellt.

Screenshot der Microsoft Fabric Eventhouse-Schnittstelle, in der die Tabelle

Erstellen einer Kusto-Funktion und Hinzufügen als Kartenebene

In diesem Abschnitt erstellen Sie eine Kusto-Funktion, die aktuelle Standortdaten der Arbeitsaufträge aus der Tabelle "Workorders" in Ihrem Event-Hub abruft. Anschließend verwenden Sie diese Funktion als Datenquelle für eine Fabric Maps-Kartendarstellung. Die Funktion ermöglicht es der Karte, aktive Arbeitsaufträge als Ebene anzuzeigen und eine visuelle Ansicht von Aufträgen bereitzustellen, die geplant und Feldbesatzungen zugewiesen werden müssen.

Erstellen einer Kusto-Funktion

Aus Ihrem Eventhouse (KQL-Datenbank):

  1. Öffnen Sie die mit Ihrem Eventhouse verknüpfte KQL-Datenbank .

  2. Wählen Sie "Funktionen " und dann "Neue Funktion" aus.

    Ein Screenshot zeigt den Bereich „Funktionen“ der Datenbankoberfläche von WorkordersEventhouse in einer leeren Ansicht mit einem großen kreisförmigen Symbol, das überlappende Quadrate enthält. Die Hauptüberschrift lautet „Keine Funktionen“, begleitet von dem Text „Wenn Sie Funktionen erstellen, erscheinen sie hier.“ Eine auffällige grüne Schaltfläche mit der Beschriftung „+ Neue Funktion“ befindet sich unten mittig im Panel und lädt die Nutzer dazu ein, ihre erste Funktion zu erstellen. Die linke Seitenleiste zeigt den Datenbank-Navigationsbaum, wobei der Ordner „Functions“ ausgewählt und mit einem roten Rand hervorgehoben ist.

    Dieser Schritt erstellt eine Abfrage, die beim Ausführen eine neue Funktion namens WorkordersFunction erstellt.

  3. Geben Sie die folgende Abfrage ein:

    .create-or-alter function WorkordersFunction()
    {
        Workorders
        | project Latitude, Longitude, WorkorderID
    }
    
  4. Abfrage ausführen.

    Screenshot der Microsoft Fabric Eventhouse-Schnittstelle mit dem Abschnitt

    1 & 2 – Die KQL-Abfrage, die zum Erstellen der WorkordersFunction-Funktion verwendet wird.

    3 - Die neu erstellte WorkordersFunction-Funktion .

  5. Im Ordner Functions wählen Sie WorkordersFunction aus und dann Preview results, um zu überprüfen, ob Arbeitsauftragsdatensätze mit gültigen Standortfeldern zurückgegeben werden.

    Screenshot der Microsoft Fabric Eventhouse-Schnittstelle mit der WorkordersFunction Kusto-Funktion mit Ergebnissen, die in einer Vorschautabelle angezeigt werden. Auf der linken Randleiste wird die Datenbanknavigationsstruktur mit ausgewähltem Ordner

Diese Funktion dient als wiederverwendbare Datenquelle für eine Fabric Maps-Kartendatenebene, die im nächsten Abschnitt veranschaulicht wird.

Erstellen einer Karte und Hinzufügen der Funktion als Ebene

In diesem Abschnitt erstellen Sie eine Fabric Maps-Karte und verwenden die zuvor erstellte KQL-Funktion als Datenebene. Die Karte ist mit einem Aktualisierungsintervall konfiguriert, sodass das Streamen von Arbeitsauftragsdaten automatisch aktualisiert wird und eine nahezu räumliche Ansicht der aktiven Arbeitsaufträge in Echtzeit bereitstellt. Anschließend benennen Sie die Ebene um und passen ihre Einstellungen an, um zu steuern, wie die Daten auf der Karte angezeigt werden. Dieser Live-Geospatialkontext hilft Verteilern, Feldaktivitäten zu überwachen, die Nachfrage in allen Dienstbereichen zu bewerten und fundiertere Routing- und Zuordnungsentscheidungen zu treffen.

Erstellen einer neuen Karte

  1. Wählen Sie im Arbeitsbereich " Neues Element" aus.
  2. Geben Sie im Bereich Neues Elementmap in das Suchfeld ein, und wählen Sie Map aus.
  3. Geben Sie im Dialogfeld "Neue Karte " " WorkordersMap " in das Feld "Name " ein, und wählen Sie " Erstellen" aus.

Eventhouse zur Karte hinzufügen

  1. Wählen Sie im Explorer-BereichFabric-Elemente und dann die Schaltfläche "Hinzufügen " aus.

  2. Wählen Sie im Menü, das beim Auswählen der Schaltfläche "Hinzufügen" angezeigt wird, die KQL-Datenbank aus.

    Screenshot der Microsoft Fabric Maps Benutzeroberfläche mit dem Explorer-Bereich auf der linken Seite, der die Tabs für Fabric-Elemente und externe Quellen enthält. Der Tab

  3. Wählen Sie im OneLake-Katalog das eventhouse WorkordersEventhouse aus, das Sie zuvor erstellt haben, und wählen Sie dann "Hinzufügen" aus.

Tipp

Wenn Sie einen Fehler wie die KQL-Datenbank erhalten, hat sie ein geschütztes Label, das den Zugriff einschränkt. Bitte wenden Sie sich an Ihren Datenbankinhaber für Unterstützung, prüfen Sie das Empfindlichkeitslabel in Ihrer KQL-Datenbank, da dies den Zugriff einschränken kann. Weitere Informationen finden Sie unter Anwenden von Vertraulichkeitsbezeichnungen auf Fabric-Elemente.

Funktion auf karte anzeigen

  1. Wählen Sie im Explorer-Bereich in Ihrer neuen Karte das Eventhouse WorkordersEventhouse aus, das Sie im vorherigen Schritt hinzugefügt haben.

  2. Gehe zur KQL-Funktion WorkordersFunction und wähle die Ellipse (...), um das Menü zu öffnen.

  3. Wählen Sie im Popupmenü " Auf Karte anzeigen " aus.

    Screenshot des Microsoft Fabric Maps Explorer-Panels, das eine hierarchische Baumstruktur mit erweitertem KQL-Datenbankbereich anzeigt. Die Baumstruktur zeigt das WorkordersEventhouse, das die Workorders-Event-Tabelle und die WorkordersFunction-Funktion enthält. Ein Auslassungsmenü ist neben

  4. Das Dialogfeld "Eventhouse-Daten auf der Karte anzeigen " wird mit ausgewählten Vorschaudaten angezeigt. Es sind keine Änderungen erforderlich. Stellen Sie sicher, dass sie korrekt ist, und wählen Sie dann "Weiter" aus.

    Screenshot des Dialogfelds

  5. Legen Sie im Schritt " Geometrie festlegen" und "Datenaktualisierungsintervall " die Felder wie folgt fest, und wählen Sie dann "Weiter" aus:

    • Name der Datenschicht: WorkordersFunction

    • Geometrie-Spaltenstandort: Breiten- und Längengraddaten sind in separaten Spalten angegeben

    • Breitengradspalte: Breitengrad

    • Längengradspalte: Längengrad

    • Datenaktualisierungsintervall: 5 Minuten

      Screenshot des Microsoft Fabric-Dialogfelds mit dem Titel

  6. Im Schritt Überprüfen und zur Karte hinzufügen überprüfen Sie die Einstellungen und wählen Sie Zur Karte hinzufügen.

    Ein Screenshot des Microsoft Fabric View Eventhouse-Dialogfelds zeigt den abschließenden Schritt Überprüfung und Hinzufügen zur Karte im Konfigurationsworkflow. Auf der linken Seitenleiste werden drei aufeinanderfolgende Arbeitsschritte angezeigt: 'Datenvorschau' und 'Geometrie und Datenaktualisierungsintervall festlegen', die beide mit grünen Häkchen abgeschlossen sind, sowie 'Überprüfung und Hinzufügen zur Karte', der derzeit aktiv ist und mit einem blauen Punktindikator markiert ist. Der Hauptbereich zeigt die Zusammenfassung der Konfigurationseinstellungen: Im Abschnitt 'Datenquelle' sind die KQL-Datenbank als WorkordersEventhouse und die Abfrage als WorkordersFunction angegeben. Im Abschnitt 'Datenebene' wird der Layername 'WorkordersFunction' angezeigt, der als erforderlich mit einem roten Sternchen markiert ist. Der Abschnitt 'Geometriedatenspalte' listet drei Pflichtfelder auf, die mit roten Sternchen markiert sind: Die Position der Geometriespalten ist auf Breiten- und Längengraddaten festgelegt, die sich in separaten Spalten befinden, die Breitengradspalte ist auf 'Breitengrad' und die Längengradspalte auf 'Längengrad' gesetzt. Der Abschnitt 'Datenaktualisierung' gibt an, dass das Aktualisierungsintervall auf 5 Minuten eingestellt ist und ebenfalls als erforderlich markiert ist. In der Fußzeile des Dialogs befinden sich die Schaltflächen 'Zurück' und 'Zur Karte hinzufügen' unten rechts, wobei die Schaltfläche 'Zur Karte hinzufügen' hervorgehoben ist, um das Hinzufügen der Eventhouse-Datenebene zur Karte abzuschließen.

Die Funktionsergebnisse erscheinen nun in der aktualisierten Karte.

Screenshot der Microsoft Fabric Maps-Schnittstelle mit einer Karte von Wien, Österreich mit roten Kreismarkierungen, die arbeitsauftragsorte angeben. Im Explorer-Bereich auf der linken Seite wird eine KQL-Datenbankstruktur mit Den Einträgen WorkordersEventhouse und WorkordersFunction angezeigt. Der Bereich

Generiere eine optimierte Multi-Stop-Route mit der Azure Maps Route Directions API

In diesem Abschnitt erstellen Sie ein neues Notizbuch, das Arbeitsreihenfolgekoordinaten aus der KQL-Datenbank abruft und die REST-API der Azure Maps Route Directions aufruft. Sie aktivieren die Multi-Stop-Optimierung des Services, um die effizienteste Reihenfolge für jeden Besuch zu bestimmen und die Routengeometrie in dieser optimierten Reihenfolge zurückzugeben. Diese Ausgabe nutzt du später, um eine empfohlene Technikerroute auf der Karte zu visualisieren.

Um diesen Abschnitt abzuschließen, benötigen Sie ein Azure-Konto mit einem Azure Maps-Konto und einem Abonnementschlüssel. Falls Sie noch kein Azure-Konto haben, erstellen Sie ein kostenloses Konto. Weitere Informationen zum Erstellen eines Azure Maps-Kontos finden Sie unter Erstellen eines Azure Maps-Kontos. Weitere Informationen dazu, wie Sie einen Azure Maps-Abonnementschlüssel erhalten, finden Sie unter Abrufen des Abonnementschlüssels für Ihr Konto im Azure Maps-Quickstart.

Erstellen Sie ein Notizbuch in Ihrem Fabric-Arbeitsbereich, das die optimale Route abruft.

  1. Öffnen Sie in Ihrem Arbeitsbereich das eventhouse WorkordersEventhouse , das Sie zuvor erstellt haben.

  2. Wählen Sie im linken Navigationsbereich unter KQL-Datenbanken " WorkordersEventhouse" aus.

  3. Die oberste Menüleiste zeigt jetzt eine Option für Notizbuch an. Wählen Sie es aus, um ein neues Notizbuch zu erstellen.

    Screenshot der Microsoft Fabric Eventhouse-Schnittstelle mit der im linken Navigationsbereich unter KQL-Datenbanken ausgewählten WorkordersEventhouse-Datenbank. In der oberen Menüleiste werden mehrere Optionen angezeigt, einschließlich Notizbuch, das mit einem roten Feld hervorgehoben ist, das angibt, dass es sich um das auszuwählende Element handelt. Das Hauptpanel zeigt den Datenaktivitäts-Tracker mit Erfassungs- und Abfragestatistiken.

  4. Speichern Sie im neuen Notizbuch den Wert für die KustoUri-Variable . Sie verwenden diesen Wert im neuen Notizbuchcode, den Sie in Schritt 6 erstellen.

  5. Verbinden Sie Ihr Notizbuch mit WorkorderLocationsLakehouse, indem Sie in der Dropdownliste "Datenelemente hinzufügen" aus dem OneLake-Katalog auswählen.

    Screenshot einer Microsoft Fabric-Notizbuchschnittstelle mit einer Codezelle, die PySpark-Python-Code zeigt. Im linken Bereich werden keine Datenquellen hinzugefügt, hervorgehoben durch eine Schaltfläche "Daten hinzufügen" innerhalb eines roten Feldes. Der Hauptcodebereich zeigt eine Beispielabfrage zum Lesen von Daten aus Kusto. Dabei ist die Variable kustoQuery auf "Workorders" gesetzt, kustoUri enthält eine Fabric-Microsoft-URL und die Datenbank ist auf "WorkordersEventhouse" eingestellt. Die kustoUri wird durch ein rotes Feld hervorgehoben, um anzugeben, dass der Wert kopiert und im Notizbuchcode verwendet werden muss, wie in diesem Lernprogramm bereitgestellt.

    Hinweis

    Wenn Sie ein Lakehouse in Microsoft Fabric erstellen, wird automatisch ein SQL-Analyseendpunkt mit demselben Namen erstellt.

    Beide Elemente werden im Arbeitsbereich angezeigt, dienen jedoch unterschiedlichen Zwecken:

    • Das Lakehouse wird für Notizbücher, Spark-Verarbeitung und Datenaufnahme verwendet.
    • Der SQL-Analyseendpunkt ist eine schreibgeschützte T-SQL-Abfrageoberfläche über die Lakehouse-Daten.

    Wenn Sie ein Notizbuch anhängen oder erstellen, stellen Sie sicher, dass Sie das Lakehouse auswählen und nicht den SQL-Analytics-Endpunkt. Wenn WorkorderLocationsLakehouse zweimal im OneLake-Katalog angezeigt wird, filtern Sie nach Lakehouse .

  6. Sobald Ihr neues Notizbuch erstellt und mit Ihrem Seehaus verbunden ist, geben Sie den folgenden Code in die zweite Zelle Ihres Notizbuchs ein und ersetzen den Standardcode. Dann fügen Sie die Variablenwerte hinzu, die Sie im vorherigen Schritt gespeichert haben:

    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}")
    
  7. Geben Sie ihren Azure Maps-Abonnementschlüssel im Notizbuchcode für die AZMAPS_SUBSCRIPTION_KEY Variable ein, indem Sie "<Ihr Azure Maps-Abonnementschlüssel>" durch Ihren Azure Maps-Abonnementschlüssel ersetzen.

    Von Bedeutung

    In diesem Beispiel wird der Azure Maps-Abonnementschlüssel aus Gründen der Einfachheit hartcodiert. Man sollte keine sensible Informationen in Produktionsumgebungen hartcodieren. Speichern und verwalten Sie geheime Schlüssel sicher, indem Sie Azure Key Vault verwenden und zur Laufzeit darauf verweisen. Weitere Informationen finden Sie unter Bewährte Methoden zum Schützen geheimer Schlüssel.

  8. Wählen Sie im Menü die Schaltfläche " Speichern unter " aus, und speichern Sie das Notizbuch als OptimizeRoute.

  9. Führen Sie das Notebook aus, um die Datei OptimizedRoute.geojson im Dateiverzeichnis Ihres Lakehouse zu erstellen.

    Screenshot der Microsoft Fabric-Schnittstelle mit einer Notizbuch-Codezelle auf der rechten Seite mit Python-Code, der Routendaten abruft und eine GeoJSON-Datei schreibt. Im Explorer-Bereich auf der linken Seite wird OneLake mit den erweiterten Ordnern

Seehaus zur Karte hinzufügen

  1. Wählen Sie im Explorer-BereichFabric-Elemente und dann die Schaltfläche "Hinzufügen " aus.
  2. Wählen Sie Lakehouse aus dem Menü aus, das angezeigt wird, wenn Sie die Schaltfläche "Hinzufügen " auswählen.
  3. Wählen Sie im OneLake-Katalog das Lakehouse WorkorderLocationsLakehouse aus, das Sie zuvor erstellt haben, und wählen Sie dann "Hinzufügen" aus.

Anzeigen der optimierten Route auf der Karte

  1. Wählen Sie im Explorer-Bereich in Ihrer neuen Karte das Lakehouse WorkorderLocationsLakehouse aus, das Sie im vorherigen Schritt hinzugefügt haben.

  2. Navigieren Sie im Verzeichnis "Dateien" Ihres Lakehouses zu "OptimizedRoute.geojson", und wählen Sie die Auslassungspunkte (...) aus, um das Popupmenü anzuzeigen.

  3. Wählen Sie im Popupmenü " Auf Karte anzeigen " aus.

    Screenshot des Microsoft Fabric Maps Explorer-Bereichs mit ausgewählter Registerkarte

  4. Schalten Sie im Bereich Datenebenen die Sichtbarkeit der WorkordersFunction-Ebene aus.

Nach Abschluss wird die neue Kartenebene in Ihrer Fabric Maps-Karte angezeigt.

Ein Screenshot der Microsoft Fabric Maps zeigt eine Straßenkarte von Wien, Österreich, mit einer optimierten Route, die als blaue Linien gezeigt wird, welche neun nummerierte Wegpunkte verbinden. Der Explorer-Bereich auf der linken Seite zeigt die erweiterte Lakehouse-Registerkarte mit WorkorderLocationsLakehouse, das einen Ordner

Kartenebeneneinstellungen

Fabric Maps bietet eine Reihe von Ebeneneinstellungen, mit denen du steuerst, wie Daten auf der Karte dargestellt werden. In diesem Abschnitt passen Sie die aus dem Routenoptimierungsprozess erstellte Ebene an, indem Sie die Ebene umbenennen, die Symbolformatvorlage anpassen und Bezeichnungen basierend auf Feldwerten konfigurieren. Diese Einstellungen helfen dabei, die Lesbarkeit zu verbessern und die Interpretation von Arbeitsreihenfolgedaten auf einen Blick zu vereinfachen.

Umbenennen der Ebene

  1. Im Data-Layer-Menü öffnen Sie das Menü OptimiertRoute, indem Sie die Ellipse (...) auswählen.

  2. Wählen Sie Umbenennen aus.

    Screenshot des Bereichs

Entfernen von Beschriftungen auf Kartenebene

Wenn du Labels auf Kartenebene ein- oder ausschaltest, beeinflusst das die Textbeschriftungen der Basemap. Diese Bezeichnungen stammen aus dem zugrunde liegenden Kartenstil und umfassen:

  • Stadt- und Ortsnamen
  • Land- und Regionsnamen
  • Straßen- und Autobahnnamen
  • Namen der Wasserfunktion (Flüsse, Seen, Ozeane)
  • Andere administrative oder geografische Ortsnamen

Wenn Bezeichnungen nicht angezeigt werden, erscheint die Grundkarte „sauberer“ und übersichtlicher, ohne dass Ortstexte auf der Grundkarte gerendert werden.

So deaktivieren Sie Basiskartenbeschriftungen:

  1. Öffnen Sie Ihre Karte in Fabric Maps.

  2. Wählen Sie " Karteneinstellungen" in der Menüleiste aus.

  3. Suchen Sie das Kontrollkästchen „Labels“ und deaktivieren Sie es.

    Screenshot der Microsoft Fabric Maps-Schnittstelle mit einer Straßenkarte von Wien, Österreich, mit violetten Routenlinien, die mehrere Wegpunkte verbinden. Auf der linken Seite wird der Explorer-Bereich mit dem Datenebenenbereich angezeigt, der die Einträge

Weitere Informationen zu Karteneinstellungen in Fabric Maps finden Sie unter Basiskarteneinstellungen konfigurieren.

Hinzufügen von Datenbeschriftungen zur Ebene

Datenbeschriftungen sind datengesteuerte Anmerkungen, die aus einem oder mehreren Feldern im Dataset der Ebene stammen. Sie sind direkt an Kartenfeatures auf Layerebene gebunden, z. B. die Punkte auf der Karte, die Auftragsorte darstellen. Weitere Informationen zu Fabric Maps-Datenlabels finden Sie unter Data-Label-Einstellungen.

  1. Wählen Sie im Datenschichten-Fensteroptimierte Route aus. Der Einstellungsbereich Optimierte Route erscheint auf der rechten Seite des Bildschirms.

  2. Im Menü Einstellungen für optimierte Route wählen Sie > die Datenlabel-Einstellungen.

  3. Aktivieren Sie den Umschalter " Datenbeschriftungen aktivieren", um Datenbeschriftungen zu aktivieren. Dies zeigt zusätzliche Einstellungen für Datenbeschriftungen an.

  4. Ändern Sie die folgenden Datenbezeichnungseinstellungen:

    • Datenbeschriftungen: optimierterIndex
    • Textfarbe: weiß
    • Schieberegler für Textgröße auf 20 festgelegt
    • Textstrichfarbe: Schwarz
    • Schieberegler für Textstrichbreite auf 2 festgelegt

    Ein Screenshot von Microsoft Fabric Maps zeigt den auf der rechten Seite erweiterten Bereich

Zusammenfassung

In diesem Tutorial hat man Ihnen gezeigt, wie Sie mithilfe von Microsoft Fabric Real-Time Intelligence und Fabric Maps ein durchgängiges Echtzeit-Szenario zur Weiterleitung von Arbeitsaufträgen erstellen. Sie erfassen, transformieren und analysieren Streamingdaten zu Arbeitsaufträgen mit KQL und visualisieren die Daten anschließend auf einer Karte, um eine dynamische, fortlaufend aktualisierte Ansicht der Standorte der Arbeitsaufträge zu erstellen. Durch die Integration von Routinglogik und optimalen Pfadberechnungen zeigt die Lösung, wie die Geospatialanalyse in Echtzeit dazu beitragen kann, Verteiler und Feldbetriebsteams schneller und besser informierte Entscheidungen zu treffen.

Dieses Muster können Sie auf andere standortbasierte Szenarien wie Flottenverfolgung, Asset Monitoring und Einsatzreaktion ausweiten. Durch die Kombination von ereignisgesteuerten Daten, KQL-basierten Analysen und kartenbasierter Visualisierung ermöglicht Microsoft Fabric einen Übergang von rohen Streamingdaten zu umsetzbaren geografischen Erkenntnissen in nahezu Echtzeit.

Nächste Schritte

Weitere Informationen zu Fabric Maps-Artikeln, die in diesem Tutorial behandelt werden, finden Sie unter: