Compartilhar via


Ler de modelos semânticos e gravar dados prontos para consumo pelo Power BI usando Python

Neste artigo, você aprenderá a ler dados, metadados e avaliar medidas em modelos semânticos usando a biblioteca SemPy Python no Microsoft Fabric. Você também aprende a escrever dados que os modelos semânticos podem consumir.

Pré-requisitos

  • Acesse a experiência de Ciência de Dados no Microsoft Fabric.
  • Crie um novo bloco de anotações para copiar e colar código em células.
  • Para o Spark 3.4 e superior, o link semântico está disponível no runtime padrão quando o Fabric é usado e não há necessidade de instalá-lo. Se você estiver usando o Spark 3.3 ou inferior, ou se quiser atualizar para a versão mais recente do link semântico, execute o comando: python %pip install -U semantic-link
  • Adicionar um Lakehouse ao bloco de anotações
  • Baixe o modelo semântico Customer Profitability Sample.pbix da pasta datasets do repositório fabric-samples e salve-o localmente.

Carregar o modelo semântico em seu espaço de trabalho

Este artigo usa o modelo semântico chamado Exemplos de Rentabilidade do Cliente.pbix. O modelo semântico faz referência a uma empresa que fabrica materiais de marketing. Ele inclui dados de produto, cliente e receita para diferentes unidades de negócios.

  1. Abra seu workspace no Fabric Data Science.
  2. Selecione Importar > Relatório, Relatório Paginado ou Pasta de Trabalho > deste computador e selecione o modelo semântico Exemplo de Rentabilidade do Cliente.pbix.

Captura de tela da interface para carregar um modelo semântico no workspace.

Após a conclusão do upload, o workspace inclui três novos artefatos: um relatório do Power BI, um painel e um modelo semântico chamado Exemplo de Rentabilidade do Cliente. As etapas neste artigo dependem desse modelo semântico.

Captura de tela dos itens do arquivo do Power BI carregados no workspace.

Use o Python para ler dados de modelos semânticos

A API SemPy do Python pode recuperar dados e metadados de modelos semânticos localizados em um espaço de trabalho do Microsoft Fabric. A API também pode executar consultas nelas.

Seu Notebook, o modelo semântico do conjunto de dados do Power BI e o lakehouse podem estar localizados no mesmo espaço de trabalho ou em espaços de trabalho diferentes. Por padrão, o SemPy tenta acessar seu modelo semântico do:

  • O espaço de trabalho do lakehouse, se você tiver conectado um lakehouse ao Notebook.
  • O espaço de trabalho do seu Notebook, se não houver um lakehouse conectado.

Se o modelo semântico não estiver localizado em nenhum desses espaços de trabalho, você deverá especificar o espaço de trabalho do modelo semântico ao chamar um método SemPy.

Para ler dados de modelos semânticos, siga estas etapas:

  1. Liste os modelos semânticos disponíveis em seu espaço de trabalho.

    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. Liste as tabelas disponíveis no modelo semântico Exemplo de Rentabilidade do Cliente.

    df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True)
    df_tables
    
  3. Liste as medidas definidas no modelo semântico Exemplo de Rentabilidade do Cliente.

    Dica

    No código de exemplo a seguir, especificamos o espaço de trabalho a ser usado pelo SemPy para acessar o modelo semântico. Você pode substituir <Your Workspace> pelo nome do espaço de trabalho em que carregou o modelo semântico (da seção Carregar o modelo semântico em seu espaço de trabalho).

    df_measures = fabric.list_measures("Customer Profitability Sample", workspace="<Your Workspace>")
    df_measures
    

    Aqui, determinamos que a tabela Cliente é a tabela de interesse.

  4. Leia a tabela Cliente do modelo semântico Exemplo de Rentabilidade do Cliente.

    df_table = fabric.read_table("Customer Profitability Sample", "Customer")
    df_table
    

    Observação

    • Os dados são recuperados usando XMLA, o que requer que pelo menos XMLA somente leitura esteja habilitado.
    • A quantidade de dados recuperáveis é limitada por: - A memória máxima por consulta da SKU de capacidade que hospeda o modelo semântico. - O nó do driver Spark (visite tamanhos de nó para obter mais informações) que executa o notebook.
    • Todas as solicitações usam baixa prioridade para minimizar o impacto no desempenho do Microsoft Azure Analysis Services e são cobradas como solicitações interativas.
  5. Avalie a medida Receita Total para o estado e a data de cada cliente.

    df_measure = fabric.evaluate_measure(
        "Customer Profitability Sample",
        "Total Revenue",
        ["'Customer'[State]", "Calendar[Date]"])
    df_measure
    

    Observação

  6. Para adicionar filtros ao cálculo da medida, especifique uma lista de valores permitidos para uma coluna específica.

    filters = {
        "State[Region]": ["East", "Central"],
        "State[State]": ["FLORIDA", "NEW YORK"]
    }
    df_measure = fabric.evaluate_measure(
        "Customer Profitability Sample",
        "Total Revenue",
        ["Customer[State]", "Calendar[Date]"],
        filters=filters)
    df_measure
    
  7. Avalie a medida receita total por estado e data do cliente com uma consulta DAX.

    df_dax = fabric.evaluate_dax(
        "Customer Profitability Sample",
        """
        EVALUATE SUMMARIZECOLUMNS(
            'State'[Region],
            'Calendar'[Date].[Year],
            'Calendar'[Date].[Month],
            "Total Revenue",
            CALCULATE([Total Revenue]))
        """)
    

    Observação

    • Os dados são recuperados usando XMLA e, portanto, exigem que pelo menos o XMLA somente leitura esteja habilitado
    • A quantidade de dados recuperáveis é limitada pela memória disponível no Microsoft Azure Analysis Services e pelo nó de driver do Spark (consulte tamanhos de nó para obter mais informações)
    • Todas as solicitações utilizam baixa prioridade para minimizar o impacto no desempenho do Analysis Services e são cobradas como solicitações interativas
  8. Use a mágica de célula %%dax para avaliar a mesma consulta do DAX sem a necessidade de importar a biblioteca. Execute esta célula para carregar a mágica de célula %%dax:

    %load_ext sempy
    

    O parâmetro de espaço de trabalho é opcional. Ele segue as mesmas regras que o parâmetro de espaço de trabalho da função evaluate_dax.

    A magia de célula também dá suporte ao acesso de variáveis do Python com a sintaxe {variable_name}. Para usar uma chave na consulta do DAX, use um caractere de escape com outra chave (por exemplo: EVALUATE {{1}}).

    %%dax "Customer Profitability Sample" -w "<Your Workspace>"
    EVALUATE SUMMARIZECOLUMNS(
        'State'[Region],
        'Calendar'[Date].[Year],
        'Calendar'[Date].[Month],
        "Total Revenue",
        CALCULATE([Total Revenue]))
    

    O FabricDataFrame resultante está disponível por meio da variável _. Essa variável captura a saída da última célula executada.

    df_dax = _
    
    df_dax.head()
    
  9. É possível adicionar medidas aos dados recuperados de fontes externas. Essa abordagem combina três tarefas:

    • Ele resolve nomes de coluna para dimensões do Power BI
    • Ele define grupo por colunas
    • Ele filtra a medida Todos os nomes de coluna que não podem ser resolvidos no modelo semântico especificado são ignorados (consulte o recurso de sintaxe do DAX com suporte para obter mais informações).
    from sempy.fabric import FabricDataFrame
    
    df = FabricDataFrame({
            "Sales Agent": ["Agent 1", "Agent 1", "Agent 2"],
            "Customer[Country/Region]": ["US", "GB", "US"],
            "Industry[Industry]": ["Services", "CPG", "Manufacturing"],
        }
    )
    
    joined_df = df.add_measure("Total Revenue", dataset="Customer Profitability Sample")
    joined_df
    

Parâmetros especiais

Os métodos do SemPy read_table e evaluate_measure possuem mais parâmetros que são úteis para manipular a saída. Os parâmetros incluem:

  • pandas_convert_dtypes: se definido como True, pandas converterá as colunas do DataFrame resultante para o melhor dtype possível. Saiba mais em convert_dtypes. Se esse parâmetro estiver desativado, problemas de incompatibilidade de tipo entre colunas de tabelas relacionadas poderão ocorrer. O modelo do Power BI pode não detectar esses problemas devido à conversão de tipo implícito da DAX.

O SemPy read_table também usa as informações de modelo fornecidas pelo Power BI.

  • multiindex_hierarchies: se definido como True, ele converte hierarquias do Power BI em uma estrutura MultiIndex pandas.

Gravar dados consumíveis por modelos semânticos

As tabelas do Spark adicionadas a um Lakehouse são adicionadas automaticamente ao modelo semântico padrão correspondente. Este artigo demonstra como gravar dados no Lakehouse anexado. O FabricDataFrame aceita os mesmos dados de entrada que DataFrames do Pandas.

from sempy.fabric import FabricDataFrame

df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})

df_forecast.to_lakehouse_table("ForecastTable")

Com o Power BI, a tabela ForecastTable pode ser adicionada a um modelo semântico composto que inclui o modelo semântico lakehouse.