quinta-feira, 8 de abril de 2021

Médias Móveis Dinâmicas com Calculation Groups do Power BI

 As médias móveis são medidas muito interessantes para auxiliar a análise de tendência e entender como implementar e dar dinamismo na escolha das medidas que serão usadas como referência é o tema deste post.

Para alcançar esse objetivo vamos usar a feature calculation groups para dar esse dinamismo.  O resultado final fará com que o modelo permita que o usuário escolha qualquer medida e tenha diversas opções de médias móveis.


1-Criar a medida em destaque com DATESINPERIOD













2-Depois de criar a medida no DAX Studio e testar, vamos acessar o Tabular Editor e criar um calculation group com um item para cada janela de tempo, 3, 6, 12 meses, e substituir a medida [Sales Amount] pela função SELECTEDMEASURE().
























Com o calculation group criado, os itens com as opções de medias móveis podem ser usados como legenda ou filtro nos painéis. É importante lembrar de sempre criar um calculation item "Valor" genérico para representar o valor padrão.















Codigo: https://dax.do/rIWfJKRUUN343z/

Vídeo: https://youtu.be/QAYbEXteNdI


















segunda-feira, 5 de abril de 2021

Modificadores - USERELATINSHIP ativa um relacionamento inativo no modelo

Usando em medidas CALCULATE para ativar que por padrão estão inativos.

Um exemplo comum é quanto temos mais de uma data relacionada aos fatos que queremos compartilhar a tabela de datas para que seja possível calcular na mesma linha do tempo eventos que aconteceram no mesmo fato, como data do vencimento e data da entrega.














Exemplo: medidas de total de vendas considerando datas diferentes.




















Mas e quando estamos criando código DAX no contexto de linha?

Podemos pensar em usar a função RELATED para buscar o valor da data. mas ao criar uma coluna calculada o mecanismo de DAX utiliza sempre o relacionamento padrão, isso faz com que por exemplo a data retornada seja aquela do relacionamento ativo. Então a melhor saída é recorrer a relacionamentos virtuais com LOOKUP.

Para contornar essa limitação, a função LOOKUP atende. Ela faz uma relação entre as chaves de data sem que exista uma relação física criada.

* onde [DueDateKey]  foi igual a [DateKey] retorna o nome do dia da semana.






Modificadores do CALCULATE - CROSSFILTER e a mudança do sentido do relacionamento no modelo

As funções modificadoras do calculate trazem uma funcionalidades adicionais aos filtros que podem ser usados para modificar o contexto. Em resumo, é como se além de manipular os filtros você pudesse manipular a configuração do próprio modelo de dados, como a direção do relacionamento usando a função CROSSFILTER.

Essa função faz com que uma medida navegue em um relacionamento customizado.

Neste exemplo o relacionamento físico é unidirecional, mas com a função podemos "forçar" o relacionamento bidirecional entre vendas e produtos mesmo sem que esteja configurado no modelo.





Ao filtrar a Cor de um produto não é possível calcular a quantidade de clientes porque o filtro de cor não chega até Customer por causa da direção padrão do relacionamento de Customer com Sales.

Mas se usar o CROSSFILTER o DAX força o relacionamento ambos os sentidos




Com isso é possível totalizar a quantidade de clientes por qualquer atributo de Product mesmo que por padrão esse relacionamento não se propague.



segunda-feira, 22 de março de 2021

Diferenças entre CALCULATEDTABLE e FILTER em DAX

Qual é verdadeira diferença entre CALCULATETABLE e FILTER se ambas retornam um tabela e aplicam uma expressão como filtro? A resposta é depende, depende da existência ou não de contexto de filtro.

Se não houver contexto de filtro elas funcionarão de forma semelhante, retornam 99 linhas com os produtos da cor vermelha.

  





Mas quanto elas são avaliadas em um contexto de filtro onde uma medida está sendo avaliada a sequencia de execução é diferente, o que muda o resultado.

No caso da CALCULATEDTABLE, primeiramente o filtro é aplicado e depois a tabela do primeiro argumento é criada mantendo o contexto de filtro.
















No caso de filter isso não acontece. Filter primeiramente cria a table e depois aplica o filtro. Isso faz com que o resultado seja diferente.






 








Outra diferença é que FILTER aceita expressões de filtro em medidas e CALCULATEDTABLE não.









Os códigos deste exemplo estão em: Dax code




quarta-feira, 17 de março de 2021

Portfólio de projetos públicos

Neste post eu trago exemplos de projetos realizados utilizando o conjunto de ferramentas de BI da Microsoft.


Projeto OCID

Este projeto apresenta estatísticas da área de direitos humanos do estado do ES. 

Tecnologias utilizadas:

Fonte de dados: SQL Server

ETL: Power Query

Modelo: Power BI

Painel: Power BI

















Painel Covid19 Espírito Santo

Este projeto foi realizado com o objetivo de dar transparência aos dados da evolução da pandemia no estado.

Tecnologias utilizadas:

Fonte de dados: MySql, Sql Server, .csv, MinIO

Data warehouse: SQL Server

ETL: Integration Services, Power Query

Modelo: Power BI

Painel: Power BI


















Painel de Vacinação

Este projeto foi desenvolvido para dar transparência aos dados de distribuição de doses para a população dos grupos prioritários.

















Anuário 2020 Rede Gazeta

Este projeto foi desenvolvido divulgar dos principais indicadores econômicos do estado, como parte do já tradicional conjunto de grandes reportagens sobre o panorama econômico do estado. O layout de página foi restrito o que fez com que fosse necessário trabalhar muito com calculation groups para alternar entre a dezenas de medidas nos mesmos mapas e tabelas.
























Painel Chamados

Este é um exemplo de um painel para gestão de serviços de TI com os principais indicadores de prazos de atendimentos, categorias, grupos, etc..



















Painel de Telefonia:

Exemplo de painel de telefonia com as principais estatísticas de quantidades de atendimentos, abandonos e tempos médios.




IASES Adolescentes

Perfil de entradas e saídas

Observatorio digital da socioeducação

Neste projeto, são apresentadas diversas estatísticas socioeconômicas do perfil dos menores acautelados e a evolução histórica do fluxo da demanda de ressocialização.









terça-feira, 9 de março de 2021

Colunas Calculadas Para Tabela Calendário: Dias desde o início do ano, Dias até o final do ano, Dias desde o início do trimestre e dias até o final do trimestre

Um exemplo de como criar esse tipo de coluna calculada para incrementar a tabela de calendário.

Dias desde o início do ano e Dias até o fim do ano:

"Dias Desde o Início do Ano", DATEDIFF ( STARTOFYEAR ( 'Date'[Date] ), 'Date'[Date], DAY ) + 1

A função STARTOFYEAR retorna a data que representa o primeiro dia do ano do contexto de linha da coluna, com isso, usando a função DATEDIFF conseguimos obter a diferença. Como o primeiro valor é zero, precisamos adicionar 1.

Para fazer a contagem reversa seguimos a mesma lógica, só que desta vez usamos a função ENDOFYEAR.

"Dias Até o fim do Ano", DATEDIFF ( 'Date'[Date], ENDOFYEAR ( 'Date'[Date] ), DAY ),

Para fazer fazer as colunas de inicio e fim do trimestre, usamos as funções STARTOFQUARTER e ENDOFQUARTER.

Veja como ficou o resultado final:

https://dax.do/nC0pJNKP7q6Hj0/
Link para o código: https://dax.do/nC0pJNKP7q6Hj0/


KEEPFILTERS: Removendo repetições do total retornado por uma CALCULATE

Quando um filtro é aplicado em um CALCULATE por padrão ele sobrescreve/faz um merge com o contexto de filtro do painel, com isso, para garantir que o filtro do painel seja mantido a função KEEPFILTERS é usada.

Se tem um contexto de filtro na CALCULATE e o mesmo atributo aplica um filtro no visual por padrão o que vale é da CALCULATE mas KEEPFILTERS inverte isso.

Faz um merge dos filtros da media com os filtros dos visuais e não sobrescreve com o filtro da calculate.

Sem usar KEEPFILTERS o resultado se repete na coluna utilizada como filtro no CALCULATE.


Usando KEEPFILTERS o filtro continua sendo aplicado mas quando encontra a coluna usada no filtro ele volta a incluir ela como filtro. Ou seja, mantém o filtro. É como se ele adicionasse o filtro que foi removido quando a função calculate foi usada.