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
Obtenha uma assinatura do Microsoft Fabric. Ou, inscreva-se para uma avaliação gratuita do Microsoft Fabric.
Entre no Microsoft Fabric.
Use o alternador de experiência no lado esquerdo da sua página inicial para mudar para a experiência de Ciência de Dados Synapse.
- 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.
- Abra seu espaço de trabalho na Ciência de Dados do Fabric
- Selecione Carregar > Procurar e selecione o modelo semântico Exemplos de Rentabilidade do Cliente.pbix.
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.
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:
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
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
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.
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.
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
- Por padrão, os dados não são recuperados usando XMLA e, portanto, não exigem que a leitura de dados XMLA esteja habilitada.
- Os dados não estão sujeitos às limitações do back-end do Power BI.
- 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 são cobradas como solicitações interativas
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
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
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()
É 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árioTableName[ColumnName]
num_rows
: o número de linhas a serem geradas no resultadopandas_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.