E aí, tudo bem com você!?
Hoje falarei sobre como ganhar agilidade utilizando o Tabular Editor junto com o Power BI.
Antes de começar, vou te passar o link onde deixo as melhores lives do canal para você maratonar:
– Playlist com lives antigas: https://powerbiexperience.com/pt/playlist-lives-semanais/
Clique Aqui para se tornar aluno do curso mais completo de Power BI do mundo, e tenha acesso a essa live e vários outros conteúdos que são disponibilizados exclusivamente para os alunos do Power BI eXperience.
Tabular Editor
O Tabular Editor é Editor Offline de Modelos Tabulares para Power BI e Analysis Services.
Com essa ferramenta você pode manipular medidas, colunas calculadas, pastas, perspectivas e traduções.
Documentação:
https://docs.tabulareditor.com/
Instalação: https://github.com/otykier/TabularEditor/releases/tag/2.15.2
Vamos aos Cases!
Copiar medidas entre 2 modelos
Após instalar o Tabular Editor, você precisará acessar o menu Ferramentas Externas e clicar em Tabular Editor do arquivo .pbix de origem e de destino (onde colaremos as medidas).
Agora basta você selecionar todas as medidas que você você quer copiar e colar no .pbix de destino:
Vê se não esquece de clicar em Salvar na janela onde você colou as medidas, hein!
Dica:
Sempre tenha um backup do arquivo .PBIX que estiver trabalhando porque se quebrar o modelo você consegue recuperar alguma coisa.
Bora para a próxima aplicação!
Cria uma medida de soma para cada coluna
Basicamente vamos utilizar esse código em C#. Copie ele e cole em Advanced Scripting.
foreach(var c in Selected.Columns)
{
var newMeasure = c.Table.AddMeasure(
"Soma de " + c.Name, // Name
"SUM(" + c.DaxObjectFullName + ")",// DAX expression
c.DisplayFolder // Display Folder
);
// Set the format string on the new measure:
newMeasure.FormatString = "0.00";
// Provide some documentation:
newMeasure.Description = "This measure is the sum of column " + c.DaxObjectFullName;
// Hide the base column:
c.IsHidden = true;
}
Repare que no final do código tem um “cIsHidden = true”. Isso faz com que a coluna que você tiver utilizando para criar a medida de Soma fique oculta no arquivo PBIX. Isso evita que você a utilize sem querer no seu modelo. Se precisar que ela apareça, basta ir no arquivo PBIX e exibi-la novamente.
Agora que já colou o código no Advanced Scripting, vem a mágica! Selecione na esquerda com a tecla “CTRL” ativada todas as colunas que você precisa ter uma medida de soma associada e em seguida clique em RUN. Veja o o resultado abaixo:
Incrível, né?!
Formatar medidas
Imagine que você tenha criado as medidas com pressa e escreveu de qualquer jeito, sem usar as boas práticas de identação e quebra de linhas por exemplo.
Tem um jeito de consertar isso de uma vez só!
Vamos ao exemplo! Veja a medida bagunçada:
Volte no Tabular Editor, cole o código abaixo em Advanced Scripting e clique em RUN (não esqueça de salvar também):
Model.AllMeasures.FormatDax();
Veja como ficou! ?
Está gostando?! Bora continuar!
Incluir fórmula na descrição de medidas
Neste exemplo vamos rodar um script para colocar na descrição das medidas a sua própria fórmula.
Para isso, basta copiar o código a seguir, colar em Advanced Scripting e rodar:
foreach (var m in Model.AllMeasures) { m.Description = m.Expression; }
Veja o resultado:
Essa funcionalidade é especialmente útil quando você está criando um relatório em cima de um Conjunto de dados. É que ao importar um Conjunto de dados as medidas ficam disponíveis para você utilizá-las nos no seu modelo mas não aparece o código de cada uma delas não. Com esse truque você vai conseguir conseguir ver a fórmula de cada uma delas porque elas estarão na descrição!
Mover colunas para uma pasta específica
Nós sempre criamos uma pasta chamada “Medidas” para deixá-las num lugar fácil de acharmos, certo?! Mas existe também a opção de movermos todas as colunas de cada tabela para uma Pasta. Assim, somente as medidas ficarão fora dessa pasta.
Nesse caso vamos chamar essa pasta de “_Colunas”. Mesmo esquema agora: copie o código abaixo, cole no Advanced Scripting.
foreach (var c in Model.AllColumns) { c.DisplayFolder = "_Colunas"; }
Agora basta clicar em RUN e Salvar para refletir as mudanças no arquivo PBIX!
Olha como ficou:
Próximo case!
Esconder colunas utilizadas em relacionamentos
Uma boa prática é ocultar as colunas da tabela fato utilizadas em relacionamentos.
O código que faz isso é esse:
foreach (var r in Model.Relationships) {
r.FromColumn.IsHidden = true;
}
Adivinha o que precisa fazer agora?! Copiar, colar, rodar e salvar!
Resultado com as colunas ocultas:
Mostrar Filtros aplicados
Muitas vezes o usuário do seu relatório não conhece com funciona o Power BI e você precisa mostrar os filtros aplicados nos visuais. O código abaixo faz isso.
Copie esse código aqui embaixo e cole no Advanced Scripting do Tabular Editor:
var dax = "VAR MaxFilters = 3 RETURN "; var dumpFilterDax = @"IF ( ISFILTERED ( {0} ), VAR ___f = FILTERS ( {0} ) VAR ___r = COUNTROWS ( ___f ) VAR ___t = TOPN ( MaxFilters, ___f, {0} ) VAR ___d = CONCATENATEX ( ___t, {0}, "", "" ) VAR ___x = ""{0} = "" & ___d & IF(___r > MaxFilters, "", … ["" & ___r & "" items selected]"") & "" "" RETURN ___x & UNICHAR(13) & UNICHAR(10) )"; // Loop through all columns of the model to construct the complete DAX expression: bool first = true; foreach(var column in Model.AllColumns) { if(!first) dax += " & "; dax += string.Format(dumpFilterDax, column.DaxObjectFullName); if(first) first = false; } // Add the measure to the currently selected table: Selected.Table.AddMeasure("DumpFilters", dax);
Selecione uma tabela e rode o script:
Lá no Power BI você precisará colocar a medida que acabamos de criar no Tabular Editor (DumpFilters) como Tooltip do Visual, veja:
Dica:
Para ver outros exemplos, dê uma olhada aqui.
Calculation Groups
Chega de criar medidas que são exatamente iguais e só mudam o primeiro argumento! Retrabalho nunca mais! Vamos aos exemplos práticos!
Medidas de inteligência de tempo
Vá no Tabular Editor, em Tables, e siga os passos abaixo:
Criaremos quatro Calculation Items com nomes: Atual, PY, YoY e YoY %.
Em cada item você precisará inserir a medida abaixo no Expression Editor do Tabular Editor:
- Atual: é o valor atual da medida
SELECTEDMEASURE()
- PY: é o ano anterior daquela medida
CALCULATE ( SELECTEDMEASURE(), SAMEPERIODLASTYEAR ( Data[DataID] ) )
- YoY: representa diferença entre ano atual e o ano anterior
VAR vCurrent = SELECTEDMEASURE() VAR vPY = CALCULATE ( SELECTEDMEASURE(), SAMEPERIODLASTYEAR ( Data[DataID] ) ) VAR vResult = IF ( vPY && vCurrent, vCurrent - vPY ) RETURN vResult
- YoY %: representa a variação percentual do ano atual sobre o ano anterior
VAR vCurrent = SELECTEDMEASURE() VAR vPY = CALCULATE ( SELECTEDMEASURE(), SAMEPERIODLASTYEAR ( Data[DataID] ) ) VAR vYoY = IF ( vPY && vCurrent, vCurrent - vPY ) RETURN DIVIDE( vYoY, vPY )
Após salvar, volte no Power BI Desktop e veja como iremos utilizar esse grupo de medidas:
Para utilizarmos isso numa matriz por exemplo, devemos colocar a medida principal (ex: Faturamento) em Valores e a medida do Calculation Groups em Colunas.
Ah, um detalhe! Para o valor de YoY% ficar em percentual você precisa especificar o formato assim:
Quando tiver medidas com diferentes formatos, por exemplo: reais, inteiro e decimal, você pode criar uma expressão para especificar esses formatos com base no nome da medida, veja:
Múltiplos pequenos
Um outro exemplo de aplicação do Calculation Groups é quando utilizamos o recurso de Múltiplos Pequenos.
Vamos inserir um gráfico de barras empilhadas e adicionar “Medidas” em Múltiplos Pequenos:
Para deixar os gráficos em três colunas separados por linha tracejada basta editar a formatação do gráfico assim:
Medidas Diversas
Repita exatamente o mesmo que fizemos para criar as medidas de inteligência de tempo e crie um novo Calculation Group, clicando com o botão direito em Tables e escreva “Medidas Diversas” em seu nome.
Os itens que você precisa criar são esses:
- Atual
SELECTEDMEASURE()
- Média diária
AVERAGEX(
VALUES('Data'[DataID]),
SELECTEDMEASURE()
)
- Máximo diário
Máximo diário= MAXX( VALUES('Data'[DataID]), SELECTEDMEASURE() )
- Mínimo diário
Mínimo Diário=
MINX(
VALUES('Data'[DataID]),
SELECTEDMEASURE(
)
- Top 5 dias
Top 5 dias = CALCULATE( SELECTEDMEASURE(), TOPN( 5, VALUES('Data'[DataID]), SELECTEDMEASURE() ) )
Veja um exemplo do que podemos fazer com esses grupos de medidas:
Repare que utilizei os dois grupos de medidas que criamos anteriormente nos visual de filtro ali no topo. O primeiro está com seleção obrigatória e única. O filtro debaixo está livre.
Olhe que bacana a matriz fica se você tiver mais de uma medida no campo Valores:
Ah, uma coisa importante! Defina a ordem de precedência de cada Calculation Group aqui:
Um valor mais alto significa uma maior precedência de aplicação; o Calculation Group com a precedência mais alta é aplicado primeiro.
Coloque o primeiro grupo com precedência “1” e o segundo com “0”.
Vamos para o próximo exemplo!
Medidas Diferentes Datas
Vamos supor que a gente precise criar medidas que considerem outras datas além de DataEmissao. Veja que temos 2 relacionamentos inativos no modelo:
Crie o Calculation Group chamado: “Medidas Diferentes Datas” e depois adicione os itens abaixo:
- DataEmissao
SELECTEDMEASURE()
- DataVencimento
CALCULATE( SELECTEDMEASURE(), USERELATIONSHIP( 'Vendas'[DataVencimento], 'Data'[DataID] ) )
- DataVisita
HTML clipboard
CALCULATE( SELECTEDMEASURE(), USERELATIONSHIP( 'Vendas'[DataVisita], 'Data'[DataID] ) )
Para não confundir com os demais Calculation Groups que criamos antes (e tinha o nome “Medida”), vou renomear para “Data Utilizada”:
Vamos dar uma olhada como ficará nossa matriz utilizando Data Utilizada em Colunas:
Vamos para o nosso último case!
Medidas para Comparação
Vamos supor que você quer que usuário escolha a medida que ele vai adicionar no gráfico para realizar a comparação com outra variável que já estará no gráfico.
Crie o Calculation Group chamado: “Medidas para Comparação” e depois adicione os itens abaixo:
- Cobertura Clientes
IF( SELECTEDMEASURENAME() = "Faturamento", [Faturamento], [Cobertura Clientes] )
- SKUs Vendidos
IF( SELECTEDMEASURENAME() = "Faturamento", [Faturamento], [SKUs Vendidos] )
- Notas Emitidas
IF( SELECTEDMEASURENAME() = "Faturamento", [Faturamento], [Notas Emitidas] )
Por fim, adicione uma medida com nome “KPI Selecionado”:
Agora basta você inserir um filtro no topo da página utilizando “KPI” em Valores. Depois adicione um Gráfico de colunas agrupadas e linhas com “Faturamento” em Valores de Coluna e “KPI Selecionado” em Valores de Linha. Confira abaixo:
Agora dica final: teste você mesmo!
A melhor forma de verificar se você compreendeu mesmo o que foi apresentado aqui é colocando a mão na massa!
Espero que tenha gostado do conteúdo! Ele foi baseado na live #58. Comenta aqui embaixo se você gosta desse tipo de conteúdo e sua sugestão para a próxima live.
Lembretes finais:
– Nosso encontro ocorre toda terça-feira às 19h aqui: Lives Semanais.
– Para não perder nenhuma novidade acesse o Canal do Telegram: Clique aqui
Abraços,
Leonardo.