Compartilhar via


Ler de modelos semânticos e gravar dados consumíveis pelo Power BI usando python

Neste artigo, você aprenderá a ler dados e metadados, além de avaliar medidas em modelos semânticos usando a biblioteca SemPy do Python no Microsoft Fabric. Você também aprenderá a gravar dados que podem ser consumidos pelos modelos semânticos.

Pré-requisitos

  • Visite a experiência de Ciência de Dados no Microsoft Fabric.
  • Crie um novo notebook, para copiar/colar o código nas 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 chamado Exemplos de Rentabilidade do Cliente.pbix da pasta de conjuntos de dados do repositório fabric-samples e salve o modelo semântico 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. Esse modelo semântico faz referência a materiais de marketing de produção da empresa. Ele contém dados de receita de produtos, clientes e correspondentes para várias unidades de negócios.

  1. Abra seu espaço de trabalho na Ciência de Dados do Fabric
  2. Selecione Carregar > Procurar e selecione o modelo semântico Exemplos de Rentabilidade do Cliente.pbix.

Captura de tela que mostra a interface para carregar um modelo semântico no espaço de trabalho.

Quando o upload estiver concluído, o espaço de trabalho terá 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 que mostra os itens do arquivo do Power BI carregado no espaço de trabalho.

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:

  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 o XMLA. Isso requer que pelo menos o XMLA somente leitura seja 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 do Spark (consulte tamanhos de nó para obter mais informações) que executa o notebook
    • Todas as solicitações utilizam 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. Você também pode avaliar a medida Receita Total por estado e data do cliente com uma consulta do 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:

  • fully_qualified_columns: para um valor "Verdadeiro", os métodos retornam nomes de coluna no formulário TableName[ColumnName]
  • num_rows: o número de linhas a serem geradas no resultado
  • pandas_convert_dtypes: para um valor "Verdadeiro", o Pandas converte as colunas DataFrame resultantes para o melhor dtypeconvert_dtypes possível. 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 do DAX

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

  • multiindex_hierarchies: se "Verdadeiro", ele converte as Hierarquias do Power BI em uma estrutura MultiIndex do 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. Esse exemplo demonstra como gravar dados no Lakehouse anexado. O FabricDataFrame aceita os mesmos dados de entrada que os dataframes do Pandas.

from sempy.fabric import FabricDataFrame

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

df_forecast.to_lakehouse_table("ForecastTable")

Com Power BI, a tabela ForecastTable pode ser adicionada a um modelo semântico composto com o modelo semântico Lakehouse.