Tutorial: Criar roteamento de ordem de trabalho em tempo real com o Fabric Mapas

O Microsoft Fabric Mapas fornece visualização e análise geoespaciais para fornecer insights acionáveis de dados espaciais em tempo real e históricos.

Neste tutorial, um despachante de campo de concessionária de eletricidade usa o Microsoft Fabric Maps para criar e gerenciar ordens de serviço de reparo quando interrupções ou falhas de equipamentos são relatadas. O cenário se concentra em localizar clientes afetados, visualizar pedidos de trabalho ativos em tempo real e expedir equipes com eficiência para restauração de serviços.

Este tutorial demonstra como os locais dos clientes são mapeados, os pedidos de trabalho dinâmicos aparecem no mapa e uma rota ideal é calculada usando a API de Direções de Rota do Azure Mapas. O tutorial é concluído com uma rota otimizada mostrada no mapa.

O Fabric Mapas é executado no Fabric Real-Time Intelligence, ingerindo telemetria de streaming usando Eventstream e Eventhouse para monitoramento em tempo real. As conclusões da ordem de trabalho e os resultados operacionais são armazenados no OneLake, onde podem ser usados para otimização de rota e análise que são exibidas no mapa.

Neste tutorial, você irá:

  • Crie um lakehouse e carregue dados de ordem de serviço de exemplo.
  • Configure um fluxo de eventos para gravar dados de ordem de trabalho em um repositório de eventos.
  • Crie uma função Kusto para extrair coordenadas do cliente dos dados de ordem de trabalho importados.
  • Crie um mapa e adicione a função como uma camada de mapa.
  • Compute uma rota ideal usando a API de Direções de Rota do Azure Mapas.
  • Adicione a rota otimizada ao mapa como uma camada.
  • Defina as configurações de mapa e camada.

Pré-requisitos

Antes de iniciar este tutorial, é útil examinar os tutoriais doReal-Time Intelligence para se familiarizar com os principais conceitos e fluxos de trabalho.

Criar um lakehouse e carregar os dados da ordem de trabalho de exemplo

Para simular uma fonte de streaming em tempo real, o notebook nas etapas a seguir usa dados de exemplo carregados em um lakehouse. Na produção, esses dados seriam transmitidos em vez de estáticos.

Criar o arquivo de dados da ordem de trabalho

O arquivo de dados da ordem de trabalho contém exemplos de registros de ordem de trabalho usados neste tutorial para simular uma fonte de streaming em tempo real. Depois de criar o arquivo, você o importará para um Lakehouse na próxima etapa.

Copie e cole o conteúdo a seguir em um arquivo de texto e salve-o como WorkorderLocations.csv. Você usará esse arquivo na próxima etapa.

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

Criar um lakehouse e importar o arquivo de dados da ordem de serviço

Crie um novo "lakehouse" para dados de ordens de trabalho recebidas e importe o arquivo de localizações das ordens de trabalho criado anteriormente.

  1. No seu workspace, selecione Novo item, insira lakehouse na caixa de pesquisa e selecione-a para criar um novo lakehouse.
  2. Insira um nome WorkorderLocationsLakehouse e selecione Criar.
  3. No novo lakehouse, selecione Carregar arquivos e carregue o arquivo WorkorderLocations.csv criado na etapa anterior.
  4. No novo lakehouse, selecione o painel Explorer à esquerda da tela.
  5. Na seção Arquivos do Explorer, selecione WorkorderLocations.csv para exibir o arquivo que você carregou.
  6. Nas configurações de Exibição, selecione Primeira linha como cabeçalho.
  7. (Opcional) Na lista suspensa de exibição, selecione Visualização em Tabela.

Captura de tela do arquivo WorkorderLocations.csv após sua importação para um lakehouse.

Criar um fluxo de eventos e gravar dados em uma casa de eventos

Nesta seção, você projeta um fluxo de fluxo de eventos usando um ponto de extremidade personalizado e envia dados usando um notebook para simular o streaming em tempo real.

O Microsoft Fabric Eventstream é um serviço de streaming de dados em tempo real que permite aos usuários ingerir, processar e rotear dados de eventos dentro do ecossistema do Microsoft Fabric. Ele fornece uma experiência sem código para a criação de fluxos de trabalho controlados por eventos, permitindo a integração perfeita de dados em tempo real de várias fontes e roteando-os para vários destinos. Para obter mais informações sobre fontes de dados com suporte ou como se conectar a um ponto de extremidade personalizado, consulte a Visão geral dos fluxos de eventos do Microsoft Fabric.

Ao ingerir dados eventstream em uma casa de eventos, os eventos de streaming ficam disponíveis para processamento com o Kusto, onde podem ser transformados e analisados em tempo real usando tabelas ou funções. Para obter mais informações, consulte Visão geral de eventhouse.

Criar um eventstream e um eventhouse

  1. No workspace, selecione Novo item e insira eventstream na caixa de pesquisa.

  2. Selecione Eventstream.

  3. Na caixa de diálogo Novo Fluxo de Eventos , insira um Nome: "WorkordersEventstream" e selecione Criar.

  4. Na tela Design a flow to ingest, transform, and route streaming events, selecione Usar ponto de extremidade personalizado

    Captura de tela do Design de um fluxo para ingerir, transformar e rotear a tela de eventos de streaming no Fabric, mostrando a opção usar o ponto de extremidade personalizado.

  5. Na caixa de diálogo Adicionar origem do endpoint personalizado, selecione Adicionar.

    Uma captura de tela da caixa de diálogo Adicionar origem para o ponto de extremidade personalizado no Microsoft Fabric mostrando uma navegação de trilha de migalhas com a seta do ponto de extremidade personalizado WorkordersEventstream na parte superior. A caixa de diálogo contém um campo Nome de origem com asterisco vermelho indicando obrigatoriedade, contendo o texto CustomEndpoint-Source. Um botão Adicionar de cor teal é destacado no canto inferior direito da caixa de diálogo, indicando que deve ser selecionado sem necessidade de ação adicional.

    O fluxo de eventos foi criado agora. Em seguida, adicione um Eventhouse como o destino.

  6. No nó WorkordersEventstream do designer de eventstream, selecione Eventhouse na lista suspensa Transformar eventos ou adicionar destino.

    Uma captura de tela do designer de fluxo de eventos do Microsoft Fabric mostrando um diagrama de fluxo com CustomEndpoint-Source conectado ao nó WorkordersEventstream. Um menu suspenso é expandido à direita a partir de

  7. O painel de configuração de destino eventhouse é exibido no lado direito da tela. Preencha os detalhes solicitados da seguinte maneira e selecione Salvar:

    1. Modo de ingestão de dados: defina como processamento de eventos antes da ingestão.
    2. Nome do destino: Definir como WorkordersEventhouse.
    3. Workspace: uma lista suspensa mostrando o nome do seu espaço de trabalho.
    4. Eventhouse: selecione Criar novo e crie uma casa de eventos chamada WorkordersEventhouse.
    5. Banco de Dados KQL: Selecione WorkordersEventhouse.
    6. Tabela de destino KQL: selecione Criar novo link e crie uma nova tabela chamada Workorders.
    7. Formato de dados de entrada: selecione Json.
    8. Ative a ingestão depois de adicionar a fonte de dados: selecione a caixa de seleção.

    Uma captura de tela mostrando o painel de configuração de destino do Eventhouse apresentando o modo de ingestão de dados com o Processamento de eventos antes da ingestão selecionado, Nome do destino definido como WorkordersEventhouse, menu suspenso de Workspace mostrando Meu Workspace, lista suspensa de Eventhouse exibindo WorkordersEventhouse com o link Criar novo, lista suspensa do Banco de dados KQL mostrando WorkordersEventhouse, lista suspensa da Tabela de destino KQL exibindo Novo WorkordersEventhouse com o link Criar novo, caixa de seleção Ativar ingestão após adicionar a fonte de dados marcada e um botão Salvar verde na parte inferior.

  8. Depois que a casa de eventos for adicionada como um destino, selecione Publicar para publicar seu novo fluxo de eventos.

    Uma captura de tela mostrando o designer Eventstream exibindo um fluxo com a fonte CustomEndpoint-Workorders conectada a um nó Workorders-stream, que se conecta ao destino WorkordersEventhouse. O botão Publicar é destacado no canto superior direito da barra de ferramentas. Um aviso no modo de edição indica que as alterações serão efetivadas uma vez publicadas.

Obter chaves de autenticação de chave SAS necessárias

Você precisa do nome do hub de eventos e dos valores da chave primária da string de conexão da seção de autenticação de chave SAS no código do seu notebook.

  1. Selecione o mosaico de origem do ponto de extremidade personalizado que você acabou de adicionar.

  2. No painel Detalhes , selecione Autenticação de Chave SAS.

  3. Copie os dois valores a seguir e salve-os para uso no código do bloco de anotações:

    • Nome do hub de eventos: usado para a variável EVENT_HUB_NAME .
    • Chave primária da cadeia de conexão: usada para a variável CONNECTION_STR .

    Uma captura de tela mostrando o designer do Eventstream com a opção de Autenticação de Chave SAS selecionada no painel de detalhes, destacando o nome do Hub de Eventos e os campos de cadeia de conexão-chave primária que são usados no código do notebook em uma etapa posterior neste tutorial.

Simular ingestão em tempo real usando um notebook

Nesta seção, você criará um notebook conectado ao lakehouse criado anteriormente e, em seguida, usará o código fornecido para ler os dados do CSV e enviar eventos para o fluxo de eventos. Isso simula a ingestão de dados em tempo real; para demonstrações, você pode executar o notebook manualmente ou agende-o para ser executado periodicamente.

Criar um bloco de anotações no workspace do Fabric

Crie um bloco de anotações com código para importar o arquivo de localização da ordem de trabalho do lakehouse para o fluxo de eventos que você criou na seção anterior. Isso simula uma fonte de streaming em tempo real, que seria transmitida, ao invés de estática, em um ambiente de produção.

  1. No workspace, selecione Novo item e insira notebook na caixa de pesquisa.

  2. Selecionar Notebook.

    Uma captura de tela da caixa de diálogo Novo item do Microsoft Fabric com uma caixa de pesquisa que contém o bloco de anotações de texto. Os resultados da pesquisa exibem um bloco do Notebook com um ícone de documento, mostrando a descrição Criar um notebook para explorar dados e criar modelos de machine learning. A opção Notebook está realçada indicando que pode ser selecionada para criar um novo item de bloco de anotações.

  3. Na caixa de diálogo Novo Bloco de Anotações , insira WorkorderLocations no campo Nome e selecione Criar.

  4. Para conectar seu notebook ao lakehouse, selecione Do catálogo OneLake no menu suspenso Adicionar itens de dados.

    Uma captura de tela do painel Gerenciador do Microsoft Fabric mostrando a guia Itens de Dados selecionada com uma mensagem Sem Fontes de Dados Adicionadas e um ícone de pasta vazia. Abaixo da mensagem há um botão suspenso Adicionar Itens de Dados expandido para revelar três opções de menu: Do Catálogo do OneLake com um ícone de banco de dados, Do Real-Time Hub com um ícone de raio e New Lakehouse com um sinal de adição. A opção Do Catálogo do OneLake é realçada com uma borda escura indicando a seleção.

  5. Selecione WorkorderLocationsLakehouse no catálogo do OneLake e selecione o botão Conectar. Esta é a casa do lago que você criou anteriormente.

  6. Depois de criar o notebook e conectá-lo ao lakehouse, cole o seguinte código na primeira célula e execute-o para instalar o SDK do Hub de Eventos do Azure :

    # Install Azure Event Hub SDK (only needed once per environment)
    %pip install azure-eventhub
    
  7. Selecione + Código para criar uma nova célula no notebook.

    Uma captura de tela da interface do notebook do Microsoft Fabric mostrando uma célula de código com duas linhas de código Python. A linha 1 contém um comentário lendo

  8. Selecione a nova célula e insira o seguinte código nela:

    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. Adicione os valores das variáveis CONNECTION_STR e EVENT_HUB_NAME obtidos na seção anterior intitulada Obter chaves de autenticação de chave SAS necessárias.

  10. Execute o código do notebook. Isso cria a tabela Workorders no banco de dados KQL no WorkordersEventhouse eventhouse.

Uma captura de tela da interface do Microsoft Fabric Eventhouse exibindo a tabela Workorders com uma guia Visualização de dados selecionada. O painel de navegação esquerdo mostra a árvore de bancos de dados KQL com WorkordersEventhouse expandido, contendo Tabelas com a tabela Workorders selecionada.

Criar uma função Kusto e adicioná-la como uma camada de mapa

Nesta seção, você criará uma função Kusto que recupera os dados atuais de localização da ordem de trabalho da tabela Workorders em sua casa de eventos e, em seguida, usará essa função como uma fonte de dados para um mapa do Fabric Mapas. A função permite que o mapa exiba ordens de trabalho ativas como uma camada, fornecendo uma exibição visual de trabalhos que precisam ser planejados e atribuídos às equipes de campo.

Criar uma função Kusto

Do seu Eventhouse (banco de dados KQL):

  1. Abra o banco de dados KQL associado à sua casa de eventos.

  2. Selecione Funções e , em seguida, Nova função.

    Uma captura de tela mostrando a seção Functions da interface de banco de dados WorkordersEventhouse exibindo um estado vazio com um ícone circular grande contendo quadrados sobrepostos. O título principal lê

    Isso cria uma consulta que, quando executada, cria uma nova função chamada WorkordersFunction.

  3. Insira o seguinte:

    .create-or-alter function WorkordersFunction()
    {
        Workorders
        | project Latitude, Longitude, WorkorderID
    }
    
  4. Executar a consulta

    Uma captura de tela da interface do Microsoft Fabric Eventhouse exibindo a seção Functions em que uma nova função Kusto chamada WorkordersFunction está sendo criada. A barra lateral esquerda mostra a árvore de navegação com a pasta Funções selecionada. O painel principal do editor exibe o código de consulta KQL: .create-or-alter function WorkordersFunction() { Workorders | project Latitude, Longitude, WorkorderID }. O botão Executar fica visível na barra de ferramentas na parte superior, pronto para executar a consulta de criação de função. Esta etapa estabelece uma fonte de dados reutilizável que extrai as coordenadas do cliente dos dados da ordem de trabalho para uso em visualizações de mapa.

    1 & 2 – A consulta KQL usada para criar a função WorkordersFunction .

    3 - A função WorkordersFunction recém-criada

  5. Na pasta Functions, selecione WorkordersFunction e, em seguida, visualizar os resultados para verificar se ele retorna registros de ordem de trabalho com campos de localização válidos.

    Uma captura de tela da interface do Microsoft Fabric Eventhouse mostrando a função WorkordersFunction Kusto com resultados exibidos em uma tabela de visualização. A barra lateral esquerda exibe a árvore de navegação do banco de dados com a pasta Functions selecionada, mostrando o WorkordersFunction recém-criado. O painel principal contém o código de consulta KQL .create-or-alter function WorkordersFunction() { Workorders | project Latitude, Longitude, WorkorderID }. Abaixo do editor de consultas, a seção Visualizar resultados mostra uma tabela de dados com colunas para Latitude, Longitude e WorkorderID, contendo nove registros de ordem de trabalho com valores de coordenadas na região de Viena, Áustria (aproximadamente 48 graus de latitude norte e longitude leste de 16 graus). A presença de vários registros de localização válidos demonstra que a função extrai com êxito as coordenadas do cliente da tabela Workorders para fins de visualização de mapa.

Essa função serve como uma fonte de dados reutilizável para uma camada de dados de mapa do Fabric Mapas, que é demonstrada na próxima seção.

Criar um mapa e adicionar a função como uma camada

Nesta seção, você criará um mapa do Fabric Mapas e usará a função KQL criada anteriormente como uma camada de dados. O mapa é configurado com um intervalo de atualização, permitindo que dados em fluxo contínuo dos pedidos de trabalho sejam atualizados automaticamente, fornecendo uma visualização espacial dos pedidos de trabalho ativos em quase tempo real. Em seguida, você renomeia a camada e ajusta suas configurações para controlar como os dados são exibidos no mapa. Esse contexto geoespacial dinâmico ajuda os dispatchers a monitorar a atividade de campo, avaliar a demanda entre áreas de serviço e tomar decisões de roteamento e atribuição mais informadas.

Criar um novo mapa

  1. Na área de trabalho, selecione Novo item.
  2. No painel Novo item , insira o mapa no campo de pesquisa e selecione Mapa.
  3. Na caixa de diálogo Novo Mapa , insira WorkordersMap no campo Nome e selecione Criar.

Adicionar a casa de eventos ao mapa

  1. No painel Explorer, selecione Itens do Fabric e depois o botão Adicionar.

  2. Selecione o banco de dados KQL no menu exibido ao selecionar o botão Adicionar .

    Uma captura de tela mostrando a interface do Microsoft Fabric Maps com o painel Explorer à esquerda, incluindo as guias Itens do Fabric e Fontes Externas. A guia Itens do Fabric está selecionada com um botão

  3. No catálogo do OneLake , selecione o eventhouse WorkordersEventhouse que você criou anteriormente e selecione Adicionar.

Dica

Se você receber um erro, como o banco de dados KQL, terá um rótulo protegido que restringe o acesso. Entre em contato com o proprietário do banco de dados para obter assistência. Verifique o rótulo de confidencialidade no banco de dados KQL, pois ele pode estar restringindo o acesso. Para obter mais informações, consulte Aplicar rótulos de confidencialidade aos itens do Fabric.

Mostrar função no mapa

  1. No painel Explorer em seu novo mapa, selecione o eventhouse WorkordersEventhouse que você adicionou na etapa anterior.

  2. Navegue até a função KQL WorkordersFunction e selecione a elipse (...) para mostrar o menu pop-up.

  3. Selecione Mostrar no mapa no menu pop-up.

    Uma captura de tela do painel do Explorador de Mapas do Microsoft Fabric exibindo uma estrutura de árvore hierárquica com a seção de banco de dados KQL expandida. A árvore mostra WorkordersEventhouse contendo a tabela Workorders-Event e a função WorkordersFunction. Um menu de reticências está aberto ao lado da função WorkordersFunction, revelando opções, incluindo "Mostrar no mapa" realçado com uma borda de retângulo vermelho.

  4. A caixa de diálogo Exibir Dados do Eventhouse no mapa é exibida com os dados de visualização selecionados. Nenhuma alteração é necessária. Verifique se ele está correto e selecione Avançar

    Uma captura de tela da caixa de diálogo Exibir dados do Eventhouse no mapa no Microsoft Fabric mostrando três etapas à esquerda: Visualizar dados com uma marca de seleção verde, Definir geometria e intervalo de atualização de dados, e Examinar e adicionar ao mapa. O painel principal exibe Visualizar dados espaciais no decorrer do tempo em um mapa, com uma lista suspensa para selecionar uma consulta KQL para visualização, definida como WorkordersFunction. Abaixo está uma tabela de visualização de resultados de consulta com colunas para Latitude, Longitude e WorkorderID, mostrando nove registros de ordem de trabalho com coordenadas na área de Viena, Áustria. Os botões Voltar e Avançar aparecem na parte inferior direita.

  5. Na etapa Definir geometria e intervalo de atualização de dados , defina os campos da seguinte maneira e selecione Avançar:

    • Nome da camada de dados: WorkordersFunction

    • Localização da coluna de geometria: dados de latitude e longitude estão localizados em colunas separadas

    • Coluna de latitude: latitude

    • Coluna de longitude: longitude

    • Intervalo de atualização de dados: 5 minutos

      Uma captura de tela da caixa de diálogo do Microsoft Fabric intitulada Exibir dados do Eventhouse no mapa mostrando a etapa de configuração definir geometria e intervalo de atualização de dados. Uma barra lateral esquerda exibe três etapas de fluxo de trabalho com marcas de seleção que indicam que os dados de visualização foram concluídos e Definir geometria e intervalo de atualização de dados está ativo no momento. O painel principal contém uma seção de camada de dados com um campo Nome contendo WorkordersFunction, seguido por uma seção de coluna de dados Geometry com três listas suspensas: localização da coluna Geometry definida como Dados de latitude e longitude localizados em colunas separadas, coluna Latitude definida como Latitude e coluna Longitude definida como Longitude. Abaixo está uma seção de atualização de dados com uma lista suspensa de intervalo de atualização de dados definida como 5 minutos. Os botões Voltar e Avançar aparecem no canto inferior direito.

  6. Na etapa Examinar e adicionar ao mapa , examine as configurações e selecione Adicionar ao mapa.

    Uma captura de tela da caixa de diálogo mostrando os dados do Eventhouse no Microsoft Fabric View no mapa, exibindo a etapa final de Revisão e adição ao mapa no fluxo de trabalho de configuração. A barra lateral esquerda exibe três etapas sequenciais do fluxo de trabalho: Visualizar dados e definir geometria e intervalo de atualização de dados, ambas concluídas com marcas de seleção verdes, e Revisar e adicionar ao mapa, atualmente ativo com um indicador de ponto azul. O painel principal mostra o resumo das configurações de configuração: a seção de fonte de dados lista o banco de dados KQL como WorkordersEventhouse e o conjunto de consultas como WorkordersFunction. A seção Camada de dados exibe o nome da camada WorkordersFunction marcado como necessário com um asterisco vermelho. A seção Coluna Geometry mostra três campos obrigatórios marcados com asteriscos vermelhos: a coluna Geometry está definida para dados de Latitude e Longitude localizados em colunas separadas, a coluna Latitude como Latitude e a coluna Longitude como Longitude. A seção Atualização de dados indica que o intervalo de atualização está definido como 5 minutos, também marcado como necessário. O rodapé da caixa de diálogo contém botões Voltar e Adicionar ao mapa posicionados na parte inferior direita, com o botão Adicionar ao mapa destacado pronto para adicionar o eventhouse como camada de dados ao mapa.

Os resultados da função agora são exibidos no mapa atualizado.

Uma captura de tela mostrando a interface do Microsoft Fabric Mapas exibindo um mapa de Viena, Áustria com marcadores circulares vermelhos indicando locais de ordem de trabalho. O painel Explorer à esquerda mostra uma árvore de banco de dados KQL contendo entradas WorkordersEventhouse e WorkordersFunction. O painel Camadas de dados no canto superior esquerdo do mapa mostra a camada WorkordersFunction com um menu de opções e alternância de visibilidade.

Gerar uma rota otimizada com várias paradas com a API de Direções de Rota do Azure Maps

Nesta seção, você criará um novo notebook que recupera as coordenadas da ordem de trabalho do banco de dados KQL e chama a API REST de Direções de Rota do Azure Maps. Você habilita a funcionalidade de otimização de várias paradas do serviço para determinar a ordem mais eficiente para visitar cada local e retornar a geometria de rota nessa sequência otimizada. Essa saída é usada posteriormente para visualizar uma rota recomendada para o técnico no mapa.

Para concluir esta seção, você precisa de uma conta do Azure com uma conta do Azure Mapas e uma chave de assinatura. Se você ainda não tiver uma conta do Azure, crie uma conta gratuita antes de começar. Para obter mais informações sobre como criar uma conta do Azure Mapas, consulte Criar uma conta do Azure Mapas. Para obter mais informações sobre como obter uma chave de assinatura do Azure Mapas, consulte Obter a chave de assinatura da sua conta no início rápido do Azure Mapas.

Criar um bloco de anotações no workspace do Fabric que recupera a rota ideal

  1. De dentro do seu workspace, abra o eventhouse WorkordersEventhouse que você criou anteriormente.

  2. No painel de navegação esquerdo, em bancos de dados KQL, selecione WorkordersEventhouse.

  3. A barra de menus superior agora deve exibir uma opção para o Notebook. Selecione-o para criar um novo bloco de anotações.

    Uma captura de tela da interface do Microsoft Fabric Eventhouse mostrando o banco de dados WorkordersEventhouse selecionado no painel de navegação esquerdo em bancos de dados KQL. A barra de menus superior exibe várias opções, incluindo Notebook, que é realçada com uma caixa vermelha indicando que esse é o item a ser selecionado. O painel principal mostra o Rastreador de Atividade de Dados com estatísticas de ingestão e consulta.

  4. No novo notebook, salve o valor da variável kustoUri . Use esse valor no novo código do bloco de anotações criado na etapa 6.

  5. Conecte seu bloco de anotações ao WorkorderLocationsLakehouse selecionando o catálogo do OneLake na lista suspensa Adicionar itens de dados .

    Uma captura de tela de uma interface de notebook do Microsoft Fabric mostrando uma célula de código com código PySpark Python. O painel esquerdo exibe Nenhuma fonte de dados adicionada com um botão Adicionar itens de dados realçado por uma caixa vermelha. A área de código principal mostra uma consulta de exemplo para ler dados do Kusto com variáveis kustoQuery definidas como Workorders, kustoUri contendo uma URL da Microsoft fabric e banco de dados definido como WorkordersEventhouse, kustoUri é realçado com uma caixa vermelha para indicar que o valor precisa ser copiado e usado no código do notebook fornecido neste tutorial.

    Observação

    Quando você cria um Lakehouse no Microsoft Fabric, um endpoint de análise SQL com o mesmo nome é automaticamente criado.

    Ambos os itens aparecem no workspace, mas servem a diferentes finalidades:

    • O Lakehouse é usado para notebooks, processamento do Spark e ingestão de dados.
    • O endpoint de análise SQL é uma superfície de consulta somente leitura T-SQL sobre os dados do Lakehouse.

    Certifique-se de selecionar o Lakehouse, e não o endpoint de análise SQL, ao anexar ou criar um notebook. Se WorkorderLocationsLakehouse aparecer duas vezes no catálogo do OneLake, filtre por Lakehouse .

  6. Depois que o novo bloco de anotações for criado e conectado ao lakehouse, insira o seguinte código na segunda célula do bloco de anotações, substituindo o código padrão e adicione os valores de variável salvos na etapa anterior:

    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. Insira a chave de assinatura do Azure Mapas no código do bloco de anotações da variável AZMAPS_SUBSCRIPTION_KEY substituindo "<Sua chave> de assinatura do Azure Mapas" pela chave de assinatura do Azure Mapas.

    Importante

    Este exemplo codifica a chave de assinatura do Azure Mapas para simplificar. Não codificar segredos em ambientes de produção. Armazene e gerencie segredos com segurança usando o Azure Key Vault e faça referência a eles em runtime. Para obter mais informações, consulte As práticas recomendadas para proteger segredos.

  8. Selecione o botão Salvar como no menu e salve o notebook como OptimizeRoute.

  9. Execute o notebook para criar o arquivo OptimizedRoute.geojson no diretório Arquivos do lakehouse.

    Uma captura de tela da interface do Microsoft Fabric mostrando uma célula de código do notebook no lado direito com código Python que recupera dados de rota e grava um arquivo GeoJSON. O painel do Explorador à esquerda exibe o OneLake com WorkorderLocation expandido mostrando as pastas Tabelas e Arquivos. A pasta Arquivos contém WorkorderLocations.csv e OptimizedRoute.geojson destacados com uma caixa vermelha indicando o arquivo de saída recém-criado. O painel de Arquivos central mostra ambos os arquivos com OptimizedRoute.geojson também destacado. A saída do notebook na parte inferior exibe uma mensagem de êxito informando que os pontos de passagem do GeoJSON de Direções Transformadas carregam propriedades.

Adicionar lakehouse ao mapa

  1. No painel Explorer, selecione Itens do Fabric e depois o botão Adicionar.
  2. Selecione Lakehouse no menu exibido ao selecionar o botão Adicionar .
  3. No catálogo do OneLake, selecione o lakehouse WorkorderLocationsLakehouse que você criou anteriormente e, em seguida, selecione Adicionar.

Mostrar a rota otimizada no mapa

  1. No painel Explorer em seu novo mapa, selecione o lakehouse WorkorderLocationsLakehouse que você adicionou na etapa anterior.

  2. Navegue até OptimizedRoute.geojson no diretório Arquivos do lakehouse e selecione a elipse (...) para mostrar o menu pop-up.

  3. Selecione Mostrar no mapa no menu pop-up.

    Uma captura de tela do painel do Explorador de Mapas do Microsoft Fabric mostrando a guia Lakehouse selecionada com a WorkorderLocationsLakehouse expandida. A pasta Arquivos contém os arquivos OptimizedRoute.geojson e WorkorderLocations.csv. Um menu de contexto está aberto ao lado de OptimizedRoute.geojson exibindo opções, incluindo Mostrar no mapa, realçado com um retângulo vermelho. O painel Camadas de dados mostra WorkordersFunction como uma camada existente com um controle de visibilidade.

  4. No painel Camadas de dados, desligue a visibilidade da camada WorkordersFunction.

Após a conclusão, a nova camada de mapa será exibida no mapa dos Mapas do Fabric.

Uma captura de tela dos Mapas do Microsoft Fabric exibindo um mapa de rua de Viena, Áustria, com uma rota otimizada mostrada como linhas azuis conectando nove pontos de passagem numerados. O painel do Explorador à esquerda mostra a aba Lakehouse expandida com WorkorderLocationsLakehouse contendo uma pasta de arquivos com os arquivos OptimizedRoute.geojson e WorkorderLocations.csv. O painel de camadas de dados exibe duas camadas: WorkordersFunction com visibilidade desativada e OptimizedRoute mostrando o caminho da rota conectada com paradas numeradas de 1 a 9, indicando a sequência de visitas otimizada.

Configurações de camada do mapa

Os Mapas de Malha fornecem um intervalo de configurações de camada que permitem controlar como os dados são apresentados no mapa. Nesta seção, você personaliza a camada criada a partir do processo de otimização de rota renomeando a camada, ajustando o estilo de símbolo e configurando rótulos com base nos valores de campo. Essas configurações ajudam a melhorar a legibilidade e facilitam a interpretação dos dados da ordem de trabalho rapidamente.

Renomear a camada

  1. No painel Camadas de dados , abra o menu de opções OptimizedRoute selecionando a elipse (...).

  2. Uma vez no menu de opções, selecione Renomear.

    Uma captura de tela do painel de camadas de dados dos Mapas do Microsoft Fabric mostrando duas camadas: WorkordersFunction e OptimizedRoute. A camada OptimizedRoute tem seu menu de opções expandido com um retângulo vermelho realçando a opção Renomear. Outras opções de menu visíveis incluem Ajustar ao tamanho, Duplicar e Excluir. O painel aparece sobre um plano de fundo de mapa de rua mostrando a área de Viena, Áustria.

Remover rótulos no nível do mapa

Quando você ativa ou desativa rótulos no nível do mapa, ele afeta os rótulos de texto de mapa de base. Esses rótulos vêm do estilo de mapa subjacente e incluem:

  • Nomes de cidades e vilas
  • Nomes de país e região
  • Nomes de estradas e rodovias
  • Nomes de corpos d'água (rios, lagos, oceanos)
  • Outros nomes de locais administrativos ou geográficos

Quando rótulos não são mostrados, o mapa base aparece "mais limpo" e mais minimalista, sem nomes de lugares exibidos no mapa base.

Para desativar legendas do mapa de base:

  1. Abra seu mapa nos Mapas do Fabric.

  2. Selecione Configurações de mapa na barra de menus.

  3. Localize a caixa de seleção Rótulos e desmarque-a.

    Uma captura de tela mostrando a interface do Microsoft Fabric Maps exibindo um mapa de rua de Viena, Áustria, com linhas de rota roxas conectando vários pontos de passagem. O lado esquerdo mostra o painel Explorer com o painel Camadas de dados listando as camadas WorkordersFunction e Optimized Route. A barra de ferramentas superior exibe o botão Configurações do Mapa realçado com um retângulo vermelho. O lado direito exibe o painel de configurações do Mapa base com a caixa de seleção Rótulos desmarcada e realçada com um retângulo vermelho.

Para obter mais informações sobre as configurações do mapa nos Mapas do Fabric, consulte As configurações do Mapa de Alterações

Adicionar rótulos de dados à camada

Os rótulos de dados são anotações controladas por dados provenientes de um ou mais campos no conjunto de dados da camada. Eles estão vinculados diretamente aos recursos de mapa de nível de camada, como os pontos no mapa que representam locais de ordem de trabalho. Para obter mais informações sobre rótulos de dados do Fabric Mapas, consulte As configurações de rótulo de dados.

  1. Selecione Rota Otimizada no painel Camadas de dados . O painel de configurações de Rota Otimizada é exibido no lado direito da tela.

  2. No painel de configurações de Rota Otimizada , selecione > Configurações de rótulo de dados.

  3. Selecione a alternância Habilitar rótulos de dados para ativar rótulos de dados. Isso mostra mais configurações de rótulos de dados.

  4. Altere as seguintes configurações de rótulo de dados:

    • Rótulos de dados: optimizedIndex
    • Cor do texto: branco
    • Controle deslizante de tamanho de texto definido como 20
    • Cor do traço de texto: Preto
    • Controle deslizante de largura do traço de texto ajustado para 2

    Uma captura de tela dos Mapas do Microsoft Fabric mostrando o painel de configurações de rótulos de dados expandido no lado direito com "Habilitar rótulos de dados" ativado, a lista suspensa de rótulos de dados definida como optimizedIndex, a cor do texto exibindo um seletor de cor branca, o controle deslizante de tamanho de texto configurado para 20, a cor do traço do texto exibindo preto e o controle deslizante de largura do traço configurado para 2. A área principal do mapa exibe um mapa de rua de Viena, Áustria, com linhas de rota roxas conectando pontos de passagem numerados rotulados de 1 a 9, indicando a ordem de visita otimizada. O painel Camadas de dados à esquerda mostra WorkordersFunction com visibilidade oculta e Rota Otimizada como a camada ativa.

Resumo

Este tutorial demonstrou como criar um cenário de roteamento de ordem de trabalho de ponta a ponta em tempo real usando o Microsoft Fabric Real-Time Intelligence e Fabric Maps. Os dados de ordens de trabalho de streaming são ingeridos, transformados e consultados usando KQL, e então visualizados em um mapa para criar uma visão dinâmica e atualizada continuamente dos locais das ordens de trabalho. Ao integrar a lógica de roteamento e cálculos de caminho ideal, a solução mostra como a análise geoespacial em tempo real pode ajudar os dispatchers e as equipes de operações de campo a tomar decisões mais rápidas e mais bem informadas.

Esse padrão pode ser estendido para outros cenários baseados em localização, como acompanhamento de frota, monitoramento de ativos e resposta a incidentes. Combinando dados controlados por eventos, análise baseada em KQL e visualização baseada em mapa, o Microsoft Fabric permite uma transição de dados de streaming brutos para insights geográficos acionáveis quase em tempo real.

Próximas etapas

Para obter mais informações sobre os artigos do Fabric Mapas abordados neste tutorial: