Alterações de tabelas em Direct Lake como ultrapassar?

Com a introdução do Fabric foram criadas alternativas para consumo de dados no Power BI, e outras ferramentas.

Temos agora possibilidades como as Wharehouse e Lakehouse que agregam a Data Engineering no serviço do Power BI e o acesso direto aos dados como alternativa ao import ou Direct Query, esta nova capacidade é o Direct Lake.

Neste artigo vamos debruçar-nos sobre algumas limitações do Direct Lake e como ultrapassá-las nomeadamente se não tivermos conhecimentos avançados de scripting.

Mas o que é o Direct Lake?

Direct Lake é um recurso para analisar volumes de dados muito grandes no Power BI. A base do carregamento dos dados passa no acesso direto aos ficheiros parquet diretamente de um Data Lake sem necessidade de importar ou duplicar dados num modelo do Power BI. É um caminho rápido para carregar diretamente no Power BI (Microsoft – Direct Lake Overview).

Associado a este novo recurso temos também a possibilidade de edição do modelo de dados online (Edit data models in the Power BI service (preview)) sendo que a conjugação destas duas funcionalidades proporciona uma experiência total do Power BI sem necessidade de utilização do Power BI desktop. No entanto apesar de parecer o cenário ideal para o desenvolvimento dos nossos modelos e relatórios as limitações (Know issues and limitations) ainda existem e temos duas que podemos destacar.

  • Alterações realizadas numa tabela localizada no Data Lake (novas colunas adicionadas, alterações de tipo de dados, renomeação de colunas), não são automaticamente refletidas no modelo, e teremos de remover e adicionar a tabela novamente ao modelo semântico.

Esta questão é de extrema importância pois durante o processo de desenvolvimento de um modelo semântico a recolha de requisitos apesar de extensiva, nunca está completa pelo que alterações como novas colunas, ou alteração de nomes é frequente, mas quais as implicações que temos com a remoção e introdução novamente num modelo semântico:

  • Recriação de todas as relações
  • Recriação de todas as medidas
  • Reformatação de todos os dados casos tenhamos formatos personalizados
  • Renomeação das colunas em caso de nomes diferenciados

Em síntese todas as personalizações que fizermos terão de ser refeitas, claro que podemos sempre argumentar se seguirmos um conjunto de boas práticas algumas destas questões não se colocam como por exemplo a criação de uma tabela especifica para guardar as nossas medidas ou certificarmo-nos que os nomes no Data Lake são exatamente os mesmo que queremos no nosso modelo semântico, sendo que este último tem uma outra limitação vinda do Lake House não podem ter espaços.

Outros poderão argumentar que podemos utilizar as ferramentas como o Tabular Editor (TE) ou o SQL Server Management Studio (SQMS) para fazer a edição do nosso modelo e assim ultrapassar as restrições anteriores. Este argumento é o mais válido em termos de redução do retrabalho, no entanto leva-nos a segunda limitação.

  • Modelos semânticos em modo Direct Lake criados ou alterados através de ligações XMLA não podem ser abertos no modo de edição do modelo de dados online.

Olhando para as duas limitações verificamos que a primeira opção tem maior impacto no desenvolvimento dos nossos modelos uma vez que dependendo do tamanho do modelo, número de tabelas e “personalizações” realizadas o remover tabelas implica muito maior trabalho do que perder a funcionalidade de edição do modelo online.

Vamos então verificar como podemos editar uma tabela utilizando scripts através de XMLA (TMLS Scripts) para podermos alterar a nossa tabela para adicionar, remover, formatar ou alterar dados de uma coluna.

Nesta opção que apresento temos de ter em conta os seguintes pressupostos:

  • Não domino a criação de TMLS Scritps, nem qualquer linguagem de programação (C, C#, .Net)
  • Necessitamos de utilizar uma ferramenta externa para ligação ao XMLA endpoint
  • A base da técnica é um simples Copy + Paste

Vamos então ver quais os passos a seguir para realizamos a alteração:

1) Ligar ao modelo utilizando XLMA EndPoint através do SSMS ou do TE (2.0)

2) Abrir a tabela correspondente e carregar no botão do lado direito e selecionar opções de Script (Create / Replace)

Em qualquer uma das opções o script criado está no formato JSON como podemos ver na imagem abaixo.

O formato TMLS é de leitura simplificada e cada uma das características está perfeitamente identificada pelo que a reutilização do código para introdução ou alteração de dados é simplificada assim se tivermos em contas as premissas abaixo podemos criar, alterar ou remover uma coluna ou mesmo uma tabela inteira dos nossos modelos através do copy + paste.

Número da linhaDefiniçãoCampos a editar
2Função a realizar 
4Nome da base de dados 
5Nome da Tabela 
8Nome da TabelaX
13Nome da ColunaX
15Nome da Coluna OrigemX
16FormatoX
18Lineage Tag (Coluna)X

Estes são os campos mais relevantes neste processo sendo que é preciso ter em atenção:

  • Nome da Coluna de Origem tem de existir no Data Lake
  • Nomes das colunas não podem ser repetidos
  • Lineages Tag’s não podem ser repetidas
  • Lineage Tag’s não tem um formato predefinido e não são obrigatórios

3) Em caso de criação de nova coluna copiar uma das colunas do nosso modelo, preferencialmente uma com o formato de dados que a nova coluna irá ter, no caso apresentado precisamos de copiar a informação entre a linha 12 e 27 inclusivamente

4) Em caso de modificação de dados de uma determinada coluna alterar os dados da coluna que pretendemos. Em caso de criação de nova coluna e colar os dados numa nova linha e alterar os campos:

  • name
    • sourceColumn
    • formatstring (se necessário)
    • lineagetag
    • sourcelineagetag
    • outros que se considerem relevantes

5) Correr Script

Assim caso quiséssemos criar uma coluna com base numa nova coluna chamada ClientID o nosso código ficaria da seguinte forma:

Como podem verificar mantive a lineageTag entre as duas colunas só alterei a última letra.

Assim podemos de forma rápida e sem saber criar código alterar o nosso modelo em Direct Lake sem necessidade de retrabalho, alerto mais uma vez que a utilização desta técnica inviabiliza a edição do modelo através do editor web.

Deixe um comentário