Partilhar via


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

Neste artigo, você aprenderá a ler dados e 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 lado esquerdo da sua página inicial para alternar para a experiência Synapse Data Science.

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

  • Visite a experiência de Ciência de Dados no Microsoft Fabric.
  • Criar um novo bloco de notas para copiar/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 modelo semântico localmente

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

Este artigo usa o modelo semântico Customer Profitability Sample.pbix . Este modelo semântico faz referência a uma empresa que fabrica materiais de marketing. Ele contém dados de produto, cliente e receita correspondente para várias unidades de negócios.

  1. Abra seu espaço de trabalho no Fabric Data Science
  2. Selecione Carregar > Procurar e selecione o modelo semântico Customer Profitability Sample.pbix .

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

Quando o carregamento estiver concluído, seu 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 ecrã a mostrar os 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:

  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 Customer a partir do modelo semântico Customer Profitability Sample .

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

    Nota

    • Os dados são recuperados usando XMLA. Isso requer pelo menos XMLA somente leitura para ser habilitado.
    • 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 os tamanhos dos nós para obter mais informações) que executa o bloco de anotações
    • 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 da Receita Total para o 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 usando XMLA e, portanto, não exigem que XMLA somente leitura seja habilitado.
    • 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 os tamanhos dos nós para obter mais informações) que executa o notebook
    • Todas as solicitações são cobradas como solicitações interativas
  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 da 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]))
        """)
    

    Nota

    • Os dados são recuperados usando XMLA e, portanto, requer pelo menos XMLA somente leitura para ser habilitado
    • 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 da %%dax célula para avaliar a mesma consulta DAX, sem a necessidade de importar a biblioteca. Execute esta célula para carregar %%dax a magia da célula:

    %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.

    A magia da célula também suporta o acesso de variáveis Python com a {variable_name} sintaxe. Para usar uma chave na consulta DAX, escape-a com outra chave (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:

  • fully_qualified_columns: Para um valor "True", os métodos retornam nomes de coluna no formulário TableName[ColumnName]
  • num_rows: O número de linhas a serem saídas no resultado
  • pandas_convert_dtypes: Para um valor "True", os pandas convertem as colunas DataFrame resultantes para o melhor convert_dtypes dtypepossível. Se esse parâmetro estiver desativado, podem 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ícito DAX

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

  • multiindex_hierarchies: Se "True", ele converte as hierarquias do Power BI em uma estrutura Pandas MultiIndex

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 exemplo demonstra como gravar dados no Lakehouse 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 com o modelo semântico Lakehouse.