Esercitazione: Costruire un instradamento degli ordini di lavoro in tempo reale con Fabric Maps

Mappe di Microsoft Fabric offre visualizzazioni e analisi geospaziali per fornire informazioni dettagliate interattive da dati spaziali in tempo reale e cronologici.

In questa esercitazione, un coordinatore operativo di un'azienda di servizi elettrici usa Microsoft Fabric Maps per creare e gestire gli ordini di lavoro di riparazione quando vengono segnalate interruzioni o guasti agli asset. Lo scenario è incentrato sull'individuazione dei clienti interessati, sulla visualizzazione degli ordini di lavoro attivi in tempo reale e sull'invio efficiente degli equipaggi per il ripristino del servizio.

Questa esercitazione illustra come vengono mappate le posizioni dei clienti, gli ordini di lavoro in tempo reale vengono visualizzati sulla mappa e viene calcolato un itinerario ottimale usando l'API Indicazioni stradali di Mappe di Azure. L'esercitazione si conclude con un itinerario ottimizzato visualizzato sulla mappa.

Le mappe dell'infrastruttura vengono eseguite all'interno di Fabric Real-Time Intelligence, che inseriscono dati di telemetria in streaming usando Eventstream e Eventhouse per il monitoraggio in tempo reale. I completamenti dell'ordine di lavoro e i risultati operativi vengono archiviati in OneLake, dove possono essere usati per l'ottimizzazione e l'analisi delle route visualizzate sulla mappa.

In questa esercitazione si eseguiranno le seguenti attività:

  • Crea un lakehouse e carica i dati degli ordini di lavoro di esempio.
  • Configurare un flusso di eventi per scrivere i dati degli ordini di lavoro in una eventhouse.
  • Creare una funzione Kusto per estrarre le coordinate dei clienti dai dati degli ordini di lavoro importati.
  • Creare una mappa e aggiungere la funzione come livello della mappa.
  • Calcolare un percorso ottimale usando l'API Indicazioni stradali di Mappe di Azure.
  • Aggiungere il percorso ottimizzato alla mappa come livello.
  • Configurare le impostazioni mappa e livello.

Prerequisiti

Prima di iniziare questo tutorial, consulta i tutorial diReal-Time Intelligence per familiarizzare con i concetti e i flussi di lavoro fondamentali.

Creare un lakehouse e caricare i dati dell'ordine di lavoro di esempio

Per simulare una sorgente di streaming in tempo reale, il notebook utilizza nei passaggi seguenti i dati di esempio caricati in un "lakehouse". Nell'ambiente di produzione, questi dati verrebbero trasmessi anziché statici.

Creare il file di dati dell'ordine di lavoro

Il file di dati dell'ordine di lavoro contiene record di ordine di lavoro di esempio usati in questa esercitazione per simulare un'origine di streaming in tempo reale. Dopo aver creato il file, importalo in una casa sul lago nel passaggio successivo.

Copia e incolla il contenuto seguente in un file di testo, poi salvalo come WorkorderLocations.csv. Usi questo file nel passo successivo.

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

Creare un lakehouse e importare il file di dati dell'ordine di lavoro

Crea una nuova casa sul lago per i dati degli ordini di lavoro in arrivo e importa il file di localizzazione degli ordini di lavoro.

  1. Dal tuo spazio di lavoro, seleziona Nuovo oggetto, inserisci lakehouse nella casella di ricerca e selezionalo per creare un nuovo lakehouse.
  2. Immettere un nome WorkorderLocationsLakehouse e selezionare Crea.
  3. Nella nuova casa sul lago, seleziona Carica file e carica il fileWorkorderLocations.csv .
  4. Nel nuovo lakehouse selezionare il riquadro Esplora sul lato sinistro della schermata.
  5. Nella sezione File di Explorer selezionare WorkorderLocations.csv per visualizzare il file caricato.
  6. Nelle impostazioni di visualizzazione selezionare Prima riga come intestazione.
  7. (Facoltativo) Nell'elenco a discesa della visualizzazione selezionare Visualizzazione tabella.

Screenshot del file WorkorderLocations.csv dopo l'importazione in un lakehouse.

Creare un flusso di eventi e scrivere dati in una eventhouse

In questa sezione viene progettato un flusso eventstream usando un endpoint personalizzato e si inviano dati usando un notebook per simulare lo streaming in tempo reale.

Microsoft Fabric Eventstream è un servizio di streaming dati in tempo reale che ti permette di acquisire, elaborare e instradare i dati degli eventi all'interno dell'ecosistema Microsoft Fabric. Offre un'esperienza senza codice per la creazione di flussi di lavoro basati su eventi, consentendo una perfetta integrazione dei dati in tempo reale da varie origini e il routing a più destinazioni. Per maggiori informazioni sulle fonti di dati supportate o su come connettersi a un endpoint personalizzato, consulta la Panoramica degli eventstream Microsoft Fabric.

Assorbendo i dati dell'eventstream in una casa evento, si rendono disponibili gli eventi in streaming per l'elaborazione con Kusto, dove si possono trasformarli e analizzarli in tempo reale tramite tabelle o funzioni. Per altre informazioni, vedere Informazioni generali su Eventhouse.

Creare un flusso di eventi e una casa degli eventi

  1. Nell'area di lavoro selezionare Nuovo elemento e immettere eventstream nella casella di ricerca.

  2. Selezionare Flusso di eventi.

  3. Nella finestra di dialogo Nuovo Eventstream , inserisci un Nome: "WorkordersEventstream", e poi seleziona Crea.

  4. Nella schermata Progetta un flusso per ingerire, trasformare e instradare gli eventi di streaming , seleziona Usa endpoint personalizzato.

    Screenshot della schermata Progettare un flusso per inserire, trasformare e instradare gli eventi di streaming in Fabric, che mostra l'opzione Usa endpoint personalizzato.

  5. Nella finestra di dialogo dell'endpoint personalizzato Aggiungi origine, selezionare Aggiungi.

    Screenshot della finestra di dialogo Aggiungi origine per l'endpoint personalizzato in Microsoft Fabric che mostra una navigazione breadcrumb con la freccia dell'endpoint personalizzato WorkordersEventstream nella parte superiore. La finestra di dialogo contiene un campo Nome origine con un asterisco rosso che indica come obbligatorio contenente il testo CustomEndpoint-Source. Nell'angolo in basso a destra della finestra di dialogo viene evidenziato un pulsante Aggiungi di colore verde acqua, indicando che deve essere selezionato senza ulteriori azioni necessarie.

    Il flusso di eventi viene ora creato. Aggiungere quindi una eventhouse come destinazione.

  6. Nel nodo WorkordersEventstream della finestra di progettazione eventstream selezionare Eventhouse dall'elenco a discesa Trasforma eventi o aggiungi destinazione .

    Screenshot della finestra di progettazione eventstream di Microsoft Fabric che mostra un diagramma di flusso con CustomEndpoint-Source connesso al nodo WorkordersEventstream. Un menu a discesa viene espanso dal riquadro Trasforma eventi o aggiungi destinazione sul lato destro, visualizzando la sezione Destinazioni nella parte inferiore che mostra diverse opzioni, tra cui Eventhouse, evidenziata con un rettangolo rosso che indica che deve essere selezionato.

  7. Il riquadro di configurazione della destinazione eventhouse viene visualizzato sul lato destro della schermata. Compilare i dettagli richiesti come indicato di seguito, quindi selezionare Salva:

    1. Modalità di inserimento dati: impostare su Elaborazione eventi prima dell'inserimento.
    2. Nome destinazione: impostare su WorkordersEventhouse.
    3. Area di lavoro: elenco a discesa che mostra il nome dell'area di lavoro.
    4. Eventhouse: selezionare Crea nuovo e creare una casa eventi denominata WorkordersEventhouse.
    5. Database KQL: selezionare WorkordersEventhouse.
    6. Tabella destinazione KQL: selezionare il collegamento Crea nuovo e creare una nuova tabella denominata Workorders.
    7. Formato dati di input: selezionare Json.
    8. Attiva l'ingestione dopo aver aggiunto la fonte dei dati: seleziona la casella.

    Screenshot che mostra il riquadro di configurazione della destinazione Eventhouse che mostra la modalità di inserimento dati con Elaborazione eventi prima dell'inserimento selezionato, Nome di destinazione impostato su WorkordersEventhouse, elenco a discesa Area di lavoro che mostra Area di lavoro personale, Elenco a discesa Eventhouse che mostra l'elenco a discesa WorkordersEventhouse con Area di lavoro, Eventhouse con Crea nuovo collegamento, Attivare l'inserimento dopo l'aggiunta della casella di controllo Origine dati selezionata e un pulsante verde Salva nella parte inferiore.

  8. Dopo aver aggiunto la eventhouse come destinazione, selezionare Pubblica per pubblicare il nuovo flusso di eventi.

    Screenshot della finestra di progettazione Eventstream che illustra un flusso con l'origine CustomEndpoint-Workorders connessa a un nodo Workorders-stream, che si collega alla destinazione WorkordersEventhouse. Il pulsante Pubblica è evidenziato nell'angolo superiore destro della barra degli strumenti. Un banner della modalità di modifica indica che le modifiche vengono pubblicate al momento del rilascio.

Ottenere le chiavi necessarie di firma di accesso condiviso (SAS) per l'autenticazione

Sono necessari i valori nome dell'Event hub e stringa di connessione - chiave primaria dalla sezione Autenticazione SAS Key nel codice del notebook.

  1. Seleziona il tile di origine dell'endpoint personalizzato appena aggiunto.

  2. Nel riquadro Dettagli, selezionare Autenticazione con chiave SAS.

  3. Copiare i due valori seguenti e salvarli per usarli nel codice del notebook:

    • Nome hub eventi: usato per la variabile EVENT_HUB_NAME .
    • Chiave primaria della stringa di connessione: usata per la variabile CONNECTION_STR .

    Screenshot che mostra il progettista Eventstream con l'opzione di Autenticazione con chiave SAS selezionata nel riquadro dei dettagli che evidenzia i campi Nome hub eventi e Stringa di connessione - chiave primaria utilizzati nel codice del notebook in un passaggio successivo di questo tutorial.

Simulare l'inserimento in tempo reale usando un notebook

In questa sezione viene creato un notebook connesso alla lakehouse creata in precedenza, quindi si usa il codice fornito per leggere i dati CSV e inviare eventi al flusso di eventi. Questo processo simula l'ingestione di dati in tempo reale. Per le demo, puoi eseguire il notebook manualmente o programmarlo per l'esecuzione periodica.

Creare un notebook nell'area di lavoro Fabric

Creare un notebook con codice per importare il file del percorso dell'ordine di lavoro dal lakehouse nel flusso di eventi creato nella sezione precedente. Questo simula una sorgente di streaming in tempo reale, che in un ambiente di produzione trasmette i dati invece di utilizzare dati statici.

  1. Nell'area di lavoro selezionare Nuovo elemento e immettere notebook nella casella di ricerca.

  2. Selezionare Notebook.

    Screenshot della finestra di dialogo Nuovo elemento di Microsoft Fabric con una casella di ricerca contenente il notebook di testo. I risultati della ricerca visualizzano un riquadro Notebook con un'icona del documento, che mostra la descrizione Creare un notebook per esplorare i dati e creare modelli di Machine Learning. L'opzione Notebook è evidenziata che indica che è possibile selezionarla per creare un nuovo elemento del notebook.

  3. Nella finestra di dialogo Nuovo notebook immettere WorkorderLocations nel campo Nome e quindi selezionare Crea.

  4. Per connettere il notebook al lakehouse, selezionare Dal catalogo OneLake dall'elenco a discesa Aggiungi elementi dati.

    Screenshot del riquadro Microsoft Fabric Explorer che mostra la scheda Elementi dati selezionata con un messaggio Nessuna origine dati aggiunta e un'icona di cartella vuota. Sotto il messaggio è presente un pulsante a discesa Aggiungi elementi di dati espanso per visualizzare tre opzioni di menu: Da OneLake catalog con un'icona di database, Da Real-Time hub con un'icona a fulmine, e New lakehouse con un segno più. L'opzione Da OneLake catalog è evidenziata con un bordo scuro che indica la selezione.

  5. Selezionare WorkorderLocationsLakehouse dal catalogo OneLake e selezionare il pulsante Connetti . Questa casa sul lago è quella che hai costruito in precedenza.

  6. Dopo aver creato il notebook e collegatolo al tuo lakehouse, incolla il seguente codice nella prima cella ed eseguilo per installare l'Hub eventi di Azure SDK:

    # Install Azure Event Hubs SDK (only needed once per environment)
    %pip install azure-eventhub
    
  7. Selezionare + Codice per creare una nuova cella nel notebook.

    Uno screenshot dell'interfaccia del notebook Microsoft Fabric che mostra una cella di codice con due righe di codice Python. La riga 1 contiene un commento che recita: Installa Hub eventi di Azure SDK necessario solo una volta per ambiente. La linea 2 mostra il comando pip install percentuale pip install azure-eventhub. Sotto la cella del codice, una tooltip mostra la cella Aggiungi codice che punta a un pulsante Plus Code evidenziato con un rettangolo rosso. Un pulsante plus Markdown appare a destra. L'angolo in alto a destra mostra PySpark Python come kernel selezionato.

  8. Selezionare la nuova cella e immetterne il codice seguente:

    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. Aggiungi i valori delle variabili CONNECTION_STR e EVENT_HUB_NAME che hai trovato nella sezione precedente intitolata Ottieni le chiavi di autenticazione SAS obbligatorie.

  10. Esegui il codice del notebook. Questa operazione crea la tabella Workorders nel database KQL nella eventhouse WorkordersEventhouse.

Screenshot dell'interfaccia di Microsoft Fabric Eventhouse che mostra la tabella Workorders con una scheda Anteprima dati selezionata. Il pannello di spostamento a sinistra mostra l'albero dei database KQL con WorkordersEventhouse espanso, contenente tabelle con la tabella Workorders selezionata.

Creare una funzione Kusto e aggiungerla come livello mappa

In questa sezione, si crea una funzione di Kusto che recupera i dati correnti sulla posizione dell'ordine di lavoro dalla tabella Workorders nel tuo sistema di eventi, e quindi si usa tale funzione come origine dati per una mappa di Fabric Maps. La funzione consente alla mappa di visualizzare gli ordini di lavoro attivi come livello, fornendo una visualizzazione visiva dei processi che devono essere pianificati e assegnati agli equipaggi sul campo.

Creare una funzione Kusto

Dalla tua eventhouse (database KQL):

  1. Aprire il database KQL associato al centro eventi.

  2. Selezionare Funzioni e quindi Nuova funzione.

    Uno screenshot che mostra la sezione Funzioni dell'interfaccia database WorkordersEventhouse che mostra uno stato vuoto con una grande icona circolare contenente quadrati sovrapposti. L'intestazione principale recita: Nessuna funzione con testo di supporto che dica Quando crei funzioni appaiono qui. Un pulsante verde ben visibile con la scritta + Nuova funzione è posizionato in basso al centro del pannello, invitando gli utenti a creare la loro prima funzione. La barra laterale sinistra mostra l'albero di navigazione del database con la cartella Funzioni selezionata e evidenziata con un bordo rosso.

    Questo passaggio crea una query che, una volta eseguita, crea una nuova funzione chiamata WorkordersFunction.

  3. Immettere la query seguente:

    .create-or-alter function WorkordersFunction()
    {
        Workorders
        | project Latitude, Longitude, WorkorderID
    }
    
  4. Esegui la query.

    Screenshot dell'interfaccia eventhouse di Microsoft Fabric che mostra la sezione Funzioni in cui viene creata una nuova funzione Kusto denominata WorkordersFunction. La barra laterale sinistra mostra l'albero di spostamento con la cartella Funzioni selezionata. Nel pannello dell'editor principale viene visualizzato il codice di query KQL: .create-or-alter function WorkordersFunction() { Workorders | project Latitude, Longitude, WorkorderID }. Il pulsante Esegui è visibile nella barra degli strumenti in alto, pronto per eseguire la query di creazione della funzione. Questo passaggio stabilisce un'origine dati riutilizzabile che estrae le coordinate dei clienti dai dati dell'ordine di lavoro da usare nelle visualizzazioni mappa.

    1 & 2 : query KQL usata per creare la funzione WorkordersFunction .

    3 - La funzione WorkordersFunction appena creata.

  5. Nella cartella Functions, seleziona WorkordersFunction, poi Anteprima i risultati per verificare che restituisca i record degli ordini di lavoro con campi di posizione validi.

    Screenshot dell'interfaccia di Microsoft Fabric Eventhouse che mostra la funzione Kusto WorkordersFunction con i risultati visualizzati in una tabella di anteprima. La barra laterale sinistra visualizza l'albero di spostamento del database con la cartella Funzioni selezionata, che mostra il workordersFunction appena creato. Il pannello principale contiene il codice di query KQL .create-or-alter function WorkordersFunction() { Workorders | project Latitude, Longitude, WorkorderID }. Sotto l'editor di query, la sezione Risultati anteprima mostra una tabella dati con colonne per Latitudine, Longitudine e WorkorderID, contenente nove record degli ordini di lavoro con valori di coordinate nell'area Vienna, Austria (circa 48 gradi di latitudine nord e longitudine orientale di 16 gradi). La presenza di più record di posizione validi dimostra che la funzione estrae correttamente le coordinate dei clienti dalla tabella Workorders a scopo di visualizzazione mappa.

Questa funzione funge da origine dati riutilizzabile per un livello dati di mappa di Fabric Maps, che vedremo nella sezione successiva.

Creare una mappa e aggiungere la funzione come livello

In questa sezione, crei una mappa di Fabric Maps e utilizzi la funzione KQL creata in precedenza come livello dati. La mappa è configurata con un intervallo di aggiornamento in modo che gli aggiornamenti automatici dei dati degli ordini di lavoro in streaming forniscano una visualizzazione spaziale quasi in tempo reale degli ordini di lavoro attivi. Si rinomina quindi il livello e si modificano le relative impostazioni per controllare la modalità di visualizzazione dei dati sulla mappa. Questo contesto geospaziale live consente ai dispatcher di monitorare l'attività sul campo, valutare la domanda tra aree di servizio e prendere decisioni di routing e assegnazione più informate.

Creare una nuova mappa

  1. Nell'area di lavoro selezionare Nuovo elemento.
  2. Nel pannello Nuovo oggetto , inserisci mappa nel campo di ricerca e seleziona Mappa.
  3. Nella finestra di dialogo Nuova mappa immettere WorkordersMap nel campo Nome e selezionare Crea.

Aggiungi eventhouse alla mappa

  1. Nel riquadro Esplora, selezionare Elementi Fabric e quindi il pulsante Aggiungi.

  2. Selezionare il database KQL dal menu visualizzato quando si seleziona il pulsante Aggiungi .

    Screenshot che mostra l'interfaccia di Mappe di Microsoft Fabric con il riquadro Explorer a sinistra con gli elementi di Fabric e le schede origini esterne. La scheda Elementi di Fabric è selezionata con un pulsante Aggiungi sotto di essa, visualizzato dopo aver selezionato il pulsante Aggiungi, con un menu a discesa sotto. Con il database KQL selezionato. L'area principale visualizza la mappa globale predefinita nella sezione della mappa.

  3. Nel catalogo OneLake selezionare l'evento WorkordersEventhouse creato in precedenza, quindi selezionare Aggiungi.

Suggerimento

Se ricevi un errore, ad esempio il database KQL ha un'etichetta protetta che limita l'accesso. Per assistenza contatta il proprietario del tuo database, controlla l'etichetta di sensibilità sul database KQL, poiché può limitare l'accesso. Per ulteriori informazioni, vedere Applicare etichette di riservatezza agli elementi di Fabric.

Mostra funzione sulla mappa

  1. Nel riquadro Explorer della nuova mappa selezionare l'evento WorkordersEventhouse aggiunto nel passaggio precedente.

  2. Vai alla funzione KQL WorkordersFunction e seleziona l'ellisse (...) per aprire il menu.

  3. Selezionare Mostra sulla mappa dal menu popup.

    Una screenshot del pannello Esplora mappe di Microsoft Fabric che mostra una struttura ad albero gerarchica con la sezione del database KQL espansa. L'albero mostra WorkordersEventhouse contenente la tabella Workorders-Event e la funzione WorkordersFunction. Accanto a WorkordersFunction è aperto un menu a ellissi, con opzioni tra cui Mostra sulla mappa, evidenziata con un bordo rettangolare rosso.

  4. Viene visualizzata la finestra di dialogo Visualizza dati eventhouse sulla mappa con i dati di anteprima selezionati. Non sono necessarie modifiche. Verificare che sia corretto, quindi selezionare Avanti

    Screenshot della finestra di dialogo Visualizza dati Eventhouse nella mappa in Microsoft Fabric che mostra tre passaggi a sinistra: Anteprima dei dati con un segno di spunta verde, Impostare la geometria e l'intervallo di aggiornamento dei dati, e Rivedi e aggiungi alla mappa. Il pannello principale mostra l'opzione Visualizza dati spaziali nel tempo su una mappa con un elenco a discesa per selezionare una query KQL da visualizzare impostata su WorkordersFunction. Di seguito è riportata una tabella di anteprima dei risultati della query con colonne per Latitudine, Longitudine e WorkorderID che mostra nove record degli ordini di lavoro con coordinate nell'area di Vienna, Austria. I pulsanti Indietro e Avanti vengono visualizzati in basso a destra.

  5. Nel passaggio Imposta intervallo di aggiornamento dati e geometria impostare i campi come segue, quindi selezionare Avanti:

    • Nome livello dati: WorkordersFunction

    • Posizione della colonna di geometria: i dati di latitudine e longitudine sono in colonne separate

    • Colonna Latitudine: Latitudine

    • Colonna Longitudine: Longitudine

    • Intervallo di aggiornamento dati: 5 minuti

      Screenshot della finestra di dialogo Microsoft Fabric intitolata Visualizza dati Eventhouse sulla mappa che mostra il passaggio Configurazione della geometria e dell'intervallo di aggiornamento dati. Una barra laterale a sinistra visualizza tre passaggi del flusso di lavoro con segni di spunta che indicano che l'anteprima dei dati è stata completata e che la configurazione della geometria e dell'intervallo di aggiornamento dati è attualmente attiva. Il pannello principale contiene una sezione Livello dati con un campo Nome contenente WorkordersFunction, seguito da una sezione Colonna dati di geometria con tre elenchi a discesa: posizione della colonna di geometria impostata su Dati di latitudine e longitudine posizionati su colonne separate, colonna Latitudine impostata su Latitudine e Longitudine impostata su Longitudine. Di seguito è riportata una sezione Aggiornamento dati con un elenco a discesa Intervallo di aggiornamento dati impostato su 5 minuti. I pulsanti Indietro e Avanti vengono visualizzati nell'angolo inferiore destro.

  6. Nel passo Revisione e aggiungi alla mappa , rivedi le impostazioni e seleziona Aggiungi alla mappa.

    Screenshot della finestra di dialogo Vista Evento di Microsoft Fabric nella mappa che mostra il passaggio finale di Revisione e aggiunta alla mappa nel flusso di configurazione. La barra laterale sinistra visualizza tre passaggi sequenziali del flusso di lavoro: Anteprima dati e Imposta geometria e intervallo di aggiornamento dati completati con segni di spunta verdi e Rivedi e aggiungi alla mappa attualmente attivo con un indicatore blu. Il pannello principale mostra il riepilogo delle impostazioni di configurazione: nella sezione Origine dati, il database KQL è elencato come WorkordersEventhouse e la queryset come WorkordersFunction. La sezione Livello dati visualizza il nome del livello WorkordersFunction, contrassegnato come obbligatorio da un asterisco rosso. Nella sezione Colonna dati Geometry, tre campi obbligatori sono contrassegnati con un asterisco rosso: la colonna Geometry è impostata su Latitudine e longitudine con dati in colonne separate, la colonna Latitudine è impostata su Latitudine e la colonna Longitudine è impostata su Longitudine. La sezione Aggiornamento dati indica che l'intervallo di aggiornamento è di 5 minuti, anche questo contrassegnato come obbligatorio. Il piè di pagina della finestra di dialogo contiene i pulsanti Indietro e Aggiungi alla mappa posizionati in basso a destra, con il pulsante Aggiungi alla mappa evidenziato e pronto per finalizzare l'aggiunta del livello dati Evento alla mappa.

I risultati delle funzioni ora appaiono nella mappa aggiornata.

Screenshot che mostra l'interfaccia di Mappe di Microsoft Fabric che mostra una mappa di Vienna, Austria con indicatori circolari rossi che indicano le posizioni degli ordini di lavoro. Il riquadro Explorer a sinistra mostra un albero di database KQL contenente le voci WorkordersEventhouse e WorkordersFunction. Il pannello Livelli dati in alto a sinistra della mappa mostra il livello WorkordersFunction con un menu di attivazione/disattivazione della visibilità e opzioni.

Genera un percorso ottimizzato con più fermate con l'API Mappe di Azure Route Directions

In questa sezione creerai un nuovo notebook che recupera le coordinate dell'ordine di lavoro dal database KQL e chiama l'API REST delle indicazioni stradali di Mappe di Azure. Attivi la capacità di ottimizzazione multi-stop del servizio per determinare l'ordine più efficiente per visitare ogni sede e restituire la geometria del percorso in quella sequenza ottimizzata. Usi questo output più avanti per visualizzare un percorso tecnico consigliato sulla mappa.

Per completare questa sezione, è necessario un account Azure con un account di Mappe di Azure e una chiave di sottoscrizione. Se non si ha un account Azure, crearne uno gratuito. Per altre informazioni sulla creazione di un account mappe di Azure, vedere Creare un account mappe di Azure. Per altre informazioni su come ottenere una chiave di sottoscrizione di Mappe di Azure, vedere Ottenere la chiave di sottoscrizione per l'account nell'argomento di avvio rapido di Mappe di Azure.

Creare un notebook nell'area di lavoro di Fabric che recupera il percorso ottimale

  1. Dall'interno dell'area di lavoro aprire la casa eventi WorkordersEventhouse creata in precedenza.

  2. Nel pannello di navigazione sinistro sotto Database KQL, selezionare WorkordersEventhouse.

  3. La barra del menù in alto mostra ora un'opzione per Notebook. Selezionarlo per creare un nuovo notebook.

    Screenshot dell'interfaccia di Microsoft Fabric Eventhouse che mostra il database WorkordersEventhouse selezionato nel pannello di spostamento sinistro in Database KQL. La barra dei menu in alto visualizza diverse opzioni, tra cui Notebook, evidenziato con una casella rossa che indica che è l'elemento da selezionare. Il pannello principale mostra Data Activity Tracker con statistiche di inserimento e query.

  4. Nel nuovo notebook salvare il valore per la variabile kustoUri . Questo valore viene usato nel nuovo codice del notebook creato nel passaggio 6.

  5. Connetti il notebook a WorkorderLocationsLakehouse selezionando Dal catalogo OneLake dall'elenco a discesa Aggiungi elementi di dati.

    Screenshot di un'interfaccia del notebook di Microsoft Fabric che mostra una cella di codice con codice Python PySpark. Nel pannello sinistro viene visualizzato Nessuna origine dati aggiunta con un pulsante Aggiungi elementi di dati evidenziato da una casella rossa. L'area del codice principale mostra un esempio di query per leggere i dati da Kusto con la variabile kustoQuery impostata su Workorders, kustoUri contenente un URL di Microsoft Fabric, e il database impostato su WorkordersEventhouse. Il kustoUri è evidenziato con una casella rossa per indicare che il valore deve essere copiato e utilizzato nel codice del notebook fornito in questa esercitazione.

    Annotazioni

    Quando si crea un lakehouse in Microsoft Fabric, viene creato automaticamente un endpoint di analisi SQL con lo stesso nome.

    Entrambi gli elementi vengono visualizzati nell'area di lavoro, ma servono scopi diversi:

    • Lakehouse viene usato per notebook, elaborazione Spark e inserimento dati.
    • L'endpoint di analisi SQL è un'interfaccia di query T-SQL di sola lettura sui dati del Lakehouse.

    Quando allegi o crei un quaderno, assicurati di selezionare il Lakehouse, non l'endpoint SQL analytics. Se WorkorderLocationsLakehouse viene visualizzato due volte nel catalogo OneLake, filtrare in base a Lakehouse .

  6. Una volta creato il nuovo quaderno e collegato al tuo lakehouse, inserisci il seguente codice nella seconda cella del tuo quaderno, sostituendo il codice predefinito. Poi aggiungi i valori delle variabili che hai salvato nel passaggio precedente:

    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. Immettere la chiave di sottoscrizione di Mappe di Azure nel codice del notebook per la variabile AZMAPS_SUBSCRIPTION_KEY sostituendo "<La chiave> di sottoscrizione di Mappe di Azure" con la chiave di sottoscrizione di Mappe di Azure.

    Importante

    In questo esempio la chiave di accesso di Mappe di Azure viene incorporata nel codice per semplicità. Non impostare segreti hardcoded negli ambienti di produzione. Archiviare e gestire i segreti in modo sicuro usando Azure Key Vault e farvi riferimento in fase di esecuzione. Per altre informazioni, vedere Procedure consigliate per la protezione dei segreti.

  8. Selezionare il pulsante Salva con nome nel menu e salvare il notebook come OptimizeRoute.

  9. Eseguire il notebook per creare il file OptimizedRoute.geojson nella directory Files del tuo lakehouse.

    Screenshot dell'interfaccia di Microsoft Fabric che mostra una cella di codice del notebook sul lato destro con del codice Python che recupera i dati del percorso e scrive un file GeoJSON. Nel riquadro Esplora a sinistra, viene visualizzato OneLake con Luogo di Ordine di Lavoro espanso, mostrando le cartelle Tabelle e File. La cartella File contiene WorkorderLocations.csv e OptimizedRoute.geojson, evidenziati con una casella rossa che indica il file di output appena creato. Il pannello File centrale mostra entrambi i file, con OptimizedRoute.geojson evidenziato anch'esso. L'output del notebook nella parte inferiore visualizza un messaggio di esito positivo che indica che i punti di direzione GeoJSON trasformati contengono proprietà.

Aggiungere lakehouse alla mappa

  1. Nel riquadro Esplora, selezionare Elementi Fabric e quindi il pulsante Aggiungi.
  2. Selezionare Lakehouse dal menu visualizzato quando si seleziona il pulsante Aggiungi .
  3. Dal catalogo OneLake selezionare il lakehouse WorkorderLocationsLakehouse creato in precedenza, quindi selezionare Aggiungi.

Mostra il percorso ottimizzato sulla mappa

  1. Nella tua nuova mappa, nel riquadro Explorer, seleziona il lakehouse WorkorderLocationsLakehouse che hai aggiunto nel passaggio precedente.

  2. Passare a OptimizedRoute.geojson nella directory Files del lakehouse e selezionare l'icona di ellisse (...) per visualizzare il menu popup.

  3. Selezionare Mostra sulla mappa dal menu popup.

    Screenshot del pannello Esplora mappe di Microsoft Fabric che mostra la scheda Lakehouse selezionata con WorkorderLocationsLakehouse espansa. La cartella Files contiene i file OptimizedRoute.geojson e WorkorderLocations.csv. Accanto a OptimizedRoute.geojson è aperto un menu di scelta rapida, tra cui Mostra sulla mappa evidenziata con un rettangolo rosso. Il pannello Livelli dati mostra WorkordersFunction come livello esistente con un interruttore di visibilità.

  4. Nel pannello Livelli dati disattivare la visibilità per il livello WorkordersFunction .

Al termine, il nuovo livello mappa viene visualizzato nella mappa di Fabric Maps.

Screenshot di Microsoft Fabric Maps che mostra una mappa stradale di Vienna, Austria, con un itinerario ottimizzato mostrato come linee blu che collegano nove punti di riferimento numerati. Il riquadro Explorer a sinistra mostra la scheda Lakehouse espansa con WorkorderLocationsLakehouse contenente una cartella Files con OptimizedRoute.geojson e il file WorkorderLocations.csv. Il pannello dei Livelli dati visualizza due livelli: WorkordersFunction con visibilità disattivata e OptimizedRoute che mostra il percorso connesso con fermate numerate da 1 a 9 che indica la sequenza di visite ottimizzata.

Impostazioni livello mappa

Fabric Maps offre una serie di impostazioni di livello che controlli tu come i dati vengono presentati sulla mappa. In questa sezione si personalizza il livello creato dal processo di ottimizzazione della route rinominando il livello, modificando lo stile dei simboli e configurando le etichette in base ai valori dei campi. Queste impostazioni consentono di migliorare la leggibilità e semplificare l'interpretazione immediata dei dati degli ordini di lavoro.

Rinominare il livello

  1. Nel pannello dei livelli dati , apri il menu delle opzioni OptimizedRoute selezionando l'ellisse (...).

  2. Selezionare Rinomina.

    Screenshot del pannello Livelli dati di Mappe di Microsoft Fabric che mostra due livelli WorkordersFunction e OptimizedRoute. Il livello OptimizedRoute ha il menu delle opzioni espanso con un rettangolo rosso che evidenzia l'opzione Rinomina. Altre opzioni di menu visibili includono Zoom per adattarsi, Duplica ed Elimina. Il pannello viene visualizzato su uno sfondo della mappa stradale che mostra l'area austriache di Vienna.

Rimuovere le etichette a livello di mappa

Quando attivi o disattivi Etichette a livello di mappa, questo influisce sulle etichette del testo della basemap. Queste etichette provengono dallo stile della mappa sottostante e includono:

  • Nomi di città e paesi
  • Nomi paese e area geografica
  • Nomi delle strade e delle autostrade
  • Nomi delle caratteristiche dell'acqua (fiumi, laghi, oceani)
  • Altri nomi di località amministrative o geografiche

Quando le etichette non vengono visualizzate, la mappa di base viene visualizzata "più pulita" e più minima, senza che venga eseguito il rendering del testo sul nome del posto nella mappa di base.

Per disattivare le etichette della mappa di base:

  1. Apri la mappa in Fabric Maps.

  2. Selezionare Impostazioni mappa dalla barra dei menu.

  3. Trova la casella Etichette e deselezionala.

    Screenshot che mostra l'interfaccia di Microsoft Fabric Maps che mostra una mappa stradale di Vienna Austria con linee di itinerari viola che collegano più punti di marcia. Il lato sinistro mostra il riquadro Explorer con il pannello Livelli dati che elenca i livelli WorkordersFunction e Optimized Route. La barra degli strumenti superiore evidenzia il pulsante Impostazioni mappa evidenziato con un rettangolo rosso. Sul lato destro viene visualizzato il pannello Impostazioni mappa di base con la casella di controllo Etichette deselezionata ed evidenziata con un rettangolo rosso.

Per maggiori informazioni sulle impostazioni della mappa in Fabric Maps, consulta Configura impostazioni della basemap.

Aggiungere etichette dati al livello

Le etichette dati sono annotazioni guidate dai dati provenienti da uno o più campi nel set di dati del livello. Sono collegati direttamente alle funzionalità della mappa a livello di livello, ad esempio i punti sulla mappa che rappresentano le posizioni degli ordini di lavoro. Per maggiori informazioni sulle etichette dati di Fabric Maps, consulta Impostazioni delle etichette dati.

  1. Seleziona Percorso Ottimizzato nel pannello dei livelli dati. Il pannello delle impostazioni del percorso ottimizzato appare sul lato destro dello schermo.

  2. Nel pannello Impostazioni di Rotta Ottimizzata, seleziona > impostazioni dell'etichetta dati.

  3. Selezionare l'interruttore Abilita etichette dati per attivare le etichette dati. Vengono visualizzate altre impostazioni delle etichette di dati.

  4. Modificare le seguenti impostazioni dell'etichetta dati:

    • Etichette dati: optimizedIndex
    • Colore del testo: bianco
    • Il cursore Dimensioni testo impostato su 20
    • Colore tratto testo: Nero
    • Cursore della larghezza del tratto di testo impostato su 2

    Screenshot di Microsoft Fabric Maps che mostra il pannello Impostazioni etichette dati espanso sul lato destro con le etichette dati abilitate e il menu a tendina Impostazioni etichette dati impostato su optimizedIndex, il selettore colore del testo mostra bianco, il cursore Dimensioni testo impostato su 20, il colore del tratto di testo nero e il cursore dello spessore del tratto impostato su 2. L'area principale della mappa mostra una mappa stradale di Vienna, Austria, con linee di percorso viola che collegano punti numerati etichettati da 1 a 9, indicanti l'ordine di visita ottimizzato. Il pannello Livelli dati a sinistra mostra WorkordersFunction con visibilità nascosta e Percorso ottimizzato come livello attivo.

Riassunto

Questo tutorial ti ha mostrato come costruire uno scenario di routing end-to-end in tempo reale per ordini di lavoro usando Microsoft Fabric Real-Time Intelligence e Fabric Maps. Si ingeriscono, si trasforma e si interrogano i dati degli ordini di lavoro in streaming usando KQL, e poi si visualizzano i dati su una mappa per creare una visuale dinamica e in continuo aggiornamento delle posizioni degli ordini di lavoro. Integrando la logica di routing e i calcoli dei percorsi ottimali, la soluzione mostra in che modo l'analisi geospaziale in tempo reale può aiutare i dispatcher e i team operativi sul campo a prendere decisioni più veloci e informate.

Puoi estendere questo schema ad altri scenari basati sulla localizzazione come il tracciamento delle flotte, il monitoraggio degli asset e la risposta agli incidenti. Combinando i dati basati su eventi, l'analisi basata su KQL e la visualizzazione basata su mappe, Microsoft Fabric consente una transizione dai dati di streaming non elaborati alle informazioni geografiche utilizzabili quasi in tempo reale.

Passaggi successivi

Per maggiori informazioni sugli articoli di Fabric Maps trattati in questo tutorial, vedi: