Neste post, vou falar sobre alternativas para realizar a Atualização de Nível de Workspace no Power BI e no Fabric, usando o novo item disponível, Data Pipelines além de uma abordagem que utiliza o Power Automate para alcançar esse objetivo.

De tempos em tempos, a Microsoft anuncia suas intenções quanto a novos recursos em que estão trabalhando e os prazos esperados que tentam cumprir. Destaco a palavra tentam, porque quando o Release 2021 wave 1 foi anunciado, fiquei realmente muito empolgado com a atualização de nível de workspace para conjuntos de dados e fluxos de dados, como você pode ver aqui.

Infelizmente, esse recurso simplesmente sumiu, mas em uma transmissão ao vivo do Guy in a Cube (não consigo lembrar a data, mas foi no final do primeiro semestre de 2021), Matthew Roche na verdade disse que eles achavam que poderiam entregá-lo, mas não conseguiram. Depois disso, a cada nova onda de lançamentos, a primeira coisa que procurava era por esse recurso que nunca mais voltou. Talvez eles soubessem que o Fabric estava a apenas alguns anos de ser anunciado…

O fato é que agora, com o Fabric, temos a melhor ferramenta de orquestração: o item Data Pipeline. Mas entre o lançamento do Fabric, a única alternativa real era usar o Power Automate para fazer isso.

Se você tem o Fabric disponível, pule para o final deste poste veja a abordagem dos Data Pipelines. Se não, ainda pode usar algumas das técnicas que tínhamos que usar nos velhos tempos.

 

A primeira tentativa de alcançar isso foi a lógica de encadeamento por trás dos dataflows

Nota: Isso se aplica apenas aos Dataflows Gen1. Dataflows Gen2, uma vez que é um item exclusivo do Fabric, não observei esse comportamento de encadeamento a seguir.

Como um recurso exclusivo do Power BI Premium, temos a capacidade de fazer referência a entidades vinculadas nos dataflows gen1 mais próximos à fonte do mesmo workspace. Isso produz uma sequência bonita na visualização de linhagem, mas também tem um efeito interessante: orquestração interna da atualização dos dataflows.

Toda vez que você aciona o botão de atualização de um dataflow mais próximo da fonte, digamos Dataflow A1, todos os outros dataflows que seguem adiante (B e C) serão atualizados em sequência.

Isso parece ótimo, mas tem algumas ressalvas:

i) Se você tem alguma cadeia que possui duas fontes para o mesmo dataflow, você não pode escolher a ordem de atualização.

A cadeia só avança, o que significa que se você atualizar o dataflow A1, ele bloqueará os dataflows B e C para a atualização e só desbloqueará quando toda a cadeia completar a atualização. Não há como dizer no Power BI Service: apenas atualize A1 e A2 em paralelo e depois atualize B e C. Se você tentar isso, receberá esta mensagem de erro:

Não é possível adquirir o bloqueio do modelo ‘WorkspaceID/DataflowID’ porque ele está em uso no momento.

Portanto, você precisa primeiro atualizar a primeira cadeia A1 -> B -> C e, em seguida, quando a primeira cadeia terminar, atualizar a segunda cadeia A2 -> B -> C.

ii) Ele só atualiza os dados que foram alterados pela entidade vinculada.

Isso significa que possui algumas otimizações e o tempo geral de atualização será mais rápido, mas ao mesmo tempo, se C tiver uma fonte externa, digamos, alguma fonte da Web, a cadeia A1 -> B -> C, quando C começar a ser atualizado, dependendo de como você construiu suas consultas, ele pode não se conectar à fonte da Web, apenas atualizando as consultas internas do dataflow C que dependem dos dados vinculados do B. Às vezes é desejável, às vezes não é.

iii) Se alguma das atualizações dos Dataflows (seja A1, B ou C) falhar, há um recurso de reversão que simplesmente não atualiza nenhum dos dataflows, mesmo que A1 e B tenham sido atualizados com sucesso. Isso é excelente e terrível ao mesmo tempo. Excelente, porque na maioria das vezes, quando algo dá errado, você realmente deseja que seus dados voltem a um estágio estável anterior, mas, por outro lado, é um pesadelo para depurar o erro. Vamos imaginar que o erro ocorreu no Dataflow C. Como os dados de A1 e B foram realmente revertidos, é difícil reproduzir o cenário para que você possa tentar corrigir o problema.

Para depurar, a melhor solução é na verdade quebrar o vínculo entre o dataflow que falhou e o dataflow mais próximo da fonte, atualizar aqueles que tiveram sucesso para obter os dados mais atualizados e, em seguida, solucionar o problema com o dataflow problemático com os dados reais em que ocorreu o erro. As duas principais alternativas para quebrar os vínculos são:

a) Desativar o carregamento para a consulta vinculada

b) Alterar a forma como a consulta vinculada é acessada, por exemplo, usando parâmetros. Em vez de escrever algo como isto:

Você pode salvar os GUIDs em parâmetros e reescrever as consultas assim:

Ainda temos um problema. Isso resolve apenas a parte dos dataflows da atualização de nível de workspace. No Power BI, servimos dados em Datasets por meio de relatórios, certo?

Para alcançar esta última etapa, tenho visto inúmeras pessoas fazendo com que seu último dataflow seja direcionado para o mecanismo de cálculo aprimorado, para que possa ser usado como fonte de consulta direta para os Datasets do Power BI. Por favor, não faça isso. Você não está seguindo a melhor prática de usar dados no modo Import e, pior ainda, dependendo da forma como seu modelo é configurado e suas expressões DAX são calculadas, a inserção de uma tabela de fatos de outra fonte de dados na verdade introduz relacionamentos limitados que podem interferir nas medidas previamente validadas tornando-as ERRADAS. Além disso, é certo que você experimentará um desempenho pior.

 

Usando o Power Automate para Alcançar a Atualização de Nível de Workspace

O que eu não sabia era que já existia uma alternativa do Power Automate para alcançar o mesmo objetivo anunciado aqui, que você poderia usar para fazer a orquestração do seu workspace.

Agora temos a possibilidade de usar um gatilho e ação de Power BI Dataflows. Isso significa que eu poderia iniciar uma atualização de um dataflow em um fluxo do Power Automate e detectar quando a atualização fosse concluída.
Imagem com as condições definidas para ocorrer quando o status de atualização for igual a sucesso.

Dessa forma, você não só saberia quando uma atualização é bem-sucedida ou falha, mas também poderia aninhar vários fluxos juntos e alcançar a atualização de nível de workspace que você realmente precisava. Gostaria de agradecer ao meu colega Luiz por recentemente me esclarecer que poderíamos alcançar isso em um ÚNICO fluxo. Minha ignorância no Power Automate não me permitia adicionar um gatilho no meio de um fluxo. Portanto, o padrão que você deve criar usando o Power Automate, para cada fluxo, é:

i) Primeiro, crie um novo fluxo que possa ser iniciado a partir do Power BI Desktop, como você pode ver aqui, e agrupe este Power Automate dentro de um escopo

ii) Salve o escopo na área de transferência

iii) Cole o escopo do modelo no ramo yes quantas etapas forem necessárias

No final, você terá um conjunto encadeado de ações para iniciar a atualização, bem como o gatilho que aguarda a conclusão da atualização. É importante observar que uma atualização completa não significa que ela teve sucesso. É por isso que temos controle e uma mensagem no Teams para alertar alguém caso ela falhe.

Como última etapa, muito melhor do que usar o Power BI em consulta direta ao seu último dataflow é iniciar uma ação de atualização de conjunto de dados do Power BI no Power Automate. O problema é que você só pode iniciar uma atualização, sem saber quando ela termina nem se ela termina com sucesso ou não.

A melhor solução para saber quando a atualização do conjunto de dados terminou foi descrita por Imke aqui.

 

O estado da arte da Orquestração de Nível de Workspace: Data Pipelines do Fabric

Esteja você começando a usar o Fabric com uma carga de trabalho existente do Power BI ou usando o Fabric em sua capacidade máxima, os Data Pipelines são o seu principal orquestrador.

Se você já construiu sua solução com Dataflows Gen1 e conjuntos de dados importados, pode usar os Data Pipelines para escolher a ordem da atualização. Atualmente, ainda não temos uma atividade específica para atualizar conjuntos de dados, mas ouvi dizer que ela estará disponível em breve. Enquanto isso, você pode seguir um padrão possível, mas mais complicado, aqui.

Cada caixa é chamada de atividade. No final da atividade, você tem 4 possibilidades:

ao ignorar caso a atividade não tenha sido avaliada
em caso de êxito caso a atividade tenha sido bem-sucedida
em caso de falha caso a atividade tenha falhado
pós a conclusão no caso em que a atividade não foi ignorada (portanto, ela obteve êxito ou falhou)

Portanto, é fácil clicar, arrastar e soltar e construir sua lógica de orquestração.

Infelizmente, no momento em que estou escrevendo isso, a atividade de atualização do conjunto de dados ainda não está pronta, mas foi demonstrada na Conferência da Plataforma Microsoft Power 2023, portanto, está chegando em breve. Você pode realmente aproveitar a Atualização aprimorada com a API REST do Power BI para fazer isso usando a atividade da web.

Os Data Pipelines são muito mais poderosos do que apenas orquestração, que é o foco deste post no blog, e também permitem que você use parâmetros, leia metadados para projetar pipelines de orquestração realmente flexíveis e tenha uma atividade de cópia de ponta que será adicionada ao Dataflow Gen2 em breve (por favor, não desapareça novamente).

 

Portanto, neste post, apresentei as melhores alternativas para fazer uma atualização de nível de workspace usando Power BI Premium, Power BI + Power Automate e abordagens do Fabric.