Partilhar via


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

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

Pré-requisitos

  • Obtenha uma assinatura do Microsoft Fabric. Ou inscreva-se para uma avaliação gratuita do Microsoft Fabric.

  • Entre no Microsoft Fabric.

  • Use o seletor de experiência no canto inferior esquerdo da página inicial para alternar para o Fabric.

    Captura de tela do menu do seletor de experiência, mostrando onde selecionar Ciência de Dados.

  • Vá para a experiência de Ciência de Dados no Microsoft Fabric.
  • Crie um novo bloco de notas para copiar e colar código nas células.
  • Para o Spark 3.4 e superior, o link semântico está disponível no tempo de execução padrão ao usar o Fabric 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, poderá executar o comando: python %pip install -U semantic-link
  • Adicione um Lakehouse ao seu bloco de anotações
  • Baixe o modelo semântico Customer Profitability Sample.pbix da pasta de conjuntos de dados do repositório fabric-samples e salve-o localmente.

Carregue o modelo semântico no seu espaço de trabalho

Este artigo usa o modelo semântico Customer Profitability Sample.pbix . O modelo semântico faz referência a uma empresa que fabrica materiais de marketing. Inclui dados de produtos, clientes e receitas para diferentes unidades de negócio.

  1. Abra seu espaço de trabalho no Fabric Data Science.
  2. Selecione Importar Relatório, Relatório Paginado ou Pasta de Trabalho > do computador e selecione o modelo semântico Customer Profitability Sample.pbix.

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

Após a conclusão do carregamento, seu espaço de trabalho 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 ecrã dos itens do ficheiro do Power BI carregados na área de trabalho.

Use Python para ler dados de modelos semânticos

A API Python do SemPy 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 neles.

Seu bloco de anotações, modelo semântico de conjunto de dados do Power BI e 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 de:

  • O espaço de trabalho da sua casa do lago, se você anexou uma casa do lago ao seu notebook.
  • O espaço de trabalho do seu notebook, se não houver uma casa do lago anexada.

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

Para ler dados de modelos semânticos, siga estes passos:

  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 Customer Profitability Sample .

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

    Gorjeta

    No exemplo de código a seguir, especificamos o espaço de trabalho para o SemPy usar para acessar o modelo semântico. Você pode substituir <Your Workspace> pelo nome do espaço de trabalho onde carregou o modelo semântico (na seção Carregar o modelo semântico no 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 de Clientes do modelo semântico Exemplo de Lucratividade do Cliente.

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

    Nota

    • Os dados são recuperados usando XMLA, que requer pelo menos XMLA somente leitura para ser ativado.
    • A quantidade de dados recuperáveis é limitada por: - A memória máxima por consulta da capacidade SKU que hospeda o modelo semântico. - O nó condutor do Spark (visite tamanhos dos nós para 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 relativamente ao estado e à data de cada cliente.

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

    Nota

    • Por padrão, os dados não são recuperados por XMLA, portanto, não é necessário ativar o modo de leitura.
    • Os dados não estão sujeitos às limitações de back-end do Power BI.
    • A quantidade de dados recuperáveis é limitada por: - A memória máxima por consulta da capacidade SKU que hospeda o modelo semântico. - O nó do driver Spark (visite tamanhos dos nós para mais informações) que executa o notebook.
    • Todas as solicitações são cobradas como solicitações interativas.
    • A evaluate_dax função não atualiza automaticamente o modelo semântico. Visite esta página para mais detalhes.
  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 de Receita Total de cada cliente por estado e data 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]))
        """)
    

    Nota

    • Os dados são recuperados usando XMLA e, portanto, requer pelo menos XMLA de leitura apenas para estar ativo.
    • A quantidade de dados recuperáveis é limitada pela memória disponível no Microsoft Azure Analysis Services e no nó do driver Spark (visite os tamanhos dos nós para obter mais informações)
    • Todas as solicitações usam baixa prioridade para minimizar o impacto no desempenho do Analysis Services e são cobradas como solicitações interativas
  8. Use a mágica em células %%dax para avaliar a mesma consulta DAX, sem precisar importar a biblioteca. Execute esta célula para aplicar a magia de célula %%dax.

    %load_ext sempy
    

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

    Os comandos mágicos de células também suportam o acesso às variáveis Python com a sintaxe {variable_name}. Para usar uma chave curva na consulta DAX, escape-a com outra chave curva (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. Você pode adicionar medidas aos dados recuperados de fontes externas. Esta abordagem combina três tarefas:

    • Ele resolve nomes de colunas para dimensões do Power BI
    • Define grupo por colunas
    • Ele filtra a medida Todos os nomes de colunas que não podem ser resolvidos dentro de um determinado modelo semântico são ignorados (visite o recurso de sintaxe DAX suportado 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

O SemPy read_table e evaluate_measure os métodos têm mais parâmetros que são úteis para manipular a saída. Estes parâmetros incluem:

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

O SemPy read_table também usa as informações do modelo que o Power BI fornece.

Gravar dados consumíveis por modelos semânticos

As tabelas Spark adicionadas a um Lakehouse são adicionadas automaticamente ao modelo semântico padrão correspondente. Este artigo demonstra como gravar dados no Lakehouse, que está anexado. O FabricDataFrame aceita os mesmos dados de entrada que os dataframes 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.