Nos posts anteriores apresentamos o Developer Mode no Power BI e como fazer as primeiras configurações do GIT, neste último post vamos perceber como é que a edição de um ficheiro de Power BI através de um editor de texto pode simplificar algumas das tarefas mais comuns.
Tal como vimos na primeira parte deste conjunto de posts, com a gravação no formato PBIP os ficheiros passam a estar arquivados em diversas pastas sendo que temos uma clara diferenciação entre o modelo e os relatórios, isto permite uma navegação simplificada e direcionada.
Na componente do dataset temos com a introdução deste novo formato o Tabular Model Definition Language que é uma sintaxe com um esquema de leitura simplificado. Apesar de ser preferível a edição através do tabular editor, nomeadamente pelas suas capacidades avançadas, também podemos facilmente utilizar um editor de texto.
Vejamos a imagem abaixo que nos apresenta parte do código de uma medida no nosso modelo:

Conseguimos claramente perceber as principais características da nossa medida como o seu nome, expressão e formato, sendo que a sua edição pode rapidamente ser realizada no ficheiro sem necessidade de abrir o Power BI Desktop. Neste caso alteramos o nome da métrica para Quantity PY Adj – NOVO NOME NO EDITOR:

Como podemos ver o modelo foi atualizado com a alteração:

É necessário ter cuidado com estas alterações do modelo através de um editor de texto, uma vez que, não conseguimos ter acesso (de forma direta) às dependências entre as diversas componentes do nosso modelo. Neste caso a alteração do nome da nossa métrica provocou um erro numa tabela de field parameters:

Esta situação é facilmente corrigida, no entanto, tal como referido é aconselhável utilizar o tabular editor para a edição do ficheiro model.bim de modo a mantermos a coerência do nosso modelo.
No que concerne ao relatório podemos verificar também uma leitura simplificada, neste caso no ficheiro report.json:

O código realçado mostra as propriedades da página 1 sendo que conseguimos identificar que temos duas visualizações do nosso relatório vamos olhar melhor para o código de cada uma das visualizações:
Linha 31:
"config": "{\"name\":\"232751881b7f3f6034fc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":573.3333333333334,\"y\":0,\"z\":1000,\"width\":421.1111111111111,\"height\":572.2222222222222,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"State_Province.State or Province\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"State_Province\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"State or Province\"},\"Name\":\"State_Province.State or Province\",\"NativeReferenceName\":\"State or Province\"}]},\"drillFilterOtherVisuals\":true}}",
Linha 40
"config": "{\"name\":\"9cdbc00e912f321f886a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":10,\"y\":0,\"z\":0,\"width\":278.88888888888886,\"height\":528.8888888888889,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Countries.Country\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Countries\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"Country\"},\"Name\":\"Countries.Country\",\"NativeReferenceName\":\"Country\"}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Basic'\"}}}}}],\"general\":[{\"properties\":{\"filter\":{\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Countries\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"Country\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Afghanistan'\"}}]]}}}]}}}}]}}}",
Podemos identificar neste código por exemplo:
- Tipo
- “visualType\”:\”tableEx\”
- “visualType\”:\”slicer\”
- Localização:
- “position\”:{\”x\”:573.3333333333334,\”y\”:0,\”z\”:1000
- “position\”:{\”x\”:10,\”y\”:0,\”z\”:0
- Dimensão:
- \”width\”:421.1111111111111,\”height\”:572.2222222222222
- “width\”:278.88888888888886,\”height\”:528.8888888888889
- Dados:
- {\”SourceRef\”:{\”Source\”:\”s\”}},\”Property\”:\”State or Province\”}
- {\”SourceRef\”:{\”Source\”:\”c\”}},\”Property\”:\”Country\”}
Na imagem abaixo podemos conferir então que a nossa Page 1 tem um slicer com os dados do país e uma tabela com o estado e província, além disso podemos conferir que uma vez que temos os dados filtrados no slicer a nossa tabela apresenta no seu código a referenciação a esse filtro.

- {\”Literal\”:{\”Value\”:\”‘Afghanistan’\”}}
A edição avançada deste código é possível, no entanto vamos focar-nos para já em pequenas alterações como é a mudança do nome das páginas ou a sua reordenação.
Vamos exemplificar que parte do código temos de alterar para renomear páginas e alterar a ordem das mesmas:

Os campos identificados são aqueles que nos vão permitir alterar a informação do nome e da ordem assim se substituirmos os valores por os abaixo apresentados o nosso relatório vais ser atualizados:

Podemos também facilmente eliminar ou copiar páginas bastando para isso selecionar o bloco de código correspondente e apagar ou copiar e colar.

O modo developer permite a publicação direta para o serviço através do DevOps, no entanto podemos guardar o PBIP como PBIX novamente, mantendo todas as nossas alterações e ter uma versão que pode ser publicada pelos métodos “normais” seja no Power BI Desktop ou no serviço.
Além das edições que exemplifiquei acima também realizei testes através do editor de texto para:
- Redimensionamento de páginas/visualizações
- Reposicionamento de visualizações
- Ocultar/mostrar páginas /visualizações
- Cópia de páginas entre relatórios
- Criação de visualizações
- Alteração de campos em visualizações
Como podemos verificar com esta nova opção o Power BI permite uma maior flexibilização da forma como desenvolvemos os nossos modelos e relatórios e permite um acréscimo de produtividade.