Mostrando postagens com marcador Power BI. Mostrar todas as postagens
Mostrando postagens com marcador Power BI. Mostrar todas as postagens

sexta-feira, 14 de fevereiro de 2020

Sincronizando Slicers no Power BI

Slicers são componentes visuais que aplicam filtros por padrão em todos os visuais da página, mas podem ser configurados de forma customizada para afetar partes específicas do painel. São usados quando estamos em busca de um destaque maior para o filtro ou para fazer com que apenas parte dos gráficos sejam impactadas (uma vez que o PB possui uma área de filtros padrão). Além disso, ainda é possível controlar a sincronização entre eles, trazendo maior flexibilidade e atendendo cenários onde as análises estão distribuídas em várias páginas.

Antes que este recurso fosse lançado, ele se transformou em uma das ideias mais requisitadas pelos usuários, mostrando a importância e os vários cenários que ela pode ser aplicada.

O recurso funciona basicamente assim:

Todos os slicers configurados com o mesmo tipo de dado ou atributo do modelo, podem propagar os filtros marcados pelo usuário de um para o outro. Por exemplo: ao alterar o filtro "data" da página 1, outro filtro que usa a mesma coluna "data" na pagina 2 é atualizado com o mesmo valor.

Você pode utilizar por exemplo em uma página inicial que resume alguns indicadores e aplica alguns filtros. Estes filtros uma vez aplicados na pagina inicial, criam o contexto para o usuário navegar nas demais páginas já com os filtros definidos. Isso faria com que a experiência de navegação entre estas páginas ficasse mais fluida e consistente.

Para criar um slice sincronizado:

Acessar a aba "View" e habilitar a janela de sincronização.

Todas as configurações são feitas a partir desta tela.



Neste exemplo temos duas datas diferentes DueDate e OrderDate no mesmo grupo de sincronização "GrupoSincroniaFullDate", isso faz com que fiquem sincronizados na mesma página.

Outro cenário seria sincronizar em páginas diferentes, para isso marque o checkbox da página que o filtro será inserido. Verifique que automaticamente ele foi inserido e o grupo de sincronização configurado.



Com isso, ao alterar o filtro na pagina "Sync Filters" todos os filtros do mesmo grupo de sincronização tanto da página atual quanto das demais páginas serão sincronizados.

Fonte:
https://powerpivotpro.com/2018/02/connect-one-slicer-power-bi-report-pages/
https://prathy.com/2019/02/sync-slicers-sync-slicers-advanced-options/

terça-feira, 23 de abril de 2019

Monitorando Acessos ao Portal do Power BI Report Server


O Power BI Report Server é uma alternativa muito interessante para empresas que optam por permanecer on-premise, com seus dados locais, sem ter a necessidade de adquirir planos de acesso ao serviço na nuvem.

Hoje a maioria das principais funcionalidades do Power BI da nuvem está disponível na versão local, atendendo aos mais variados requisitos de negócios, sendo assim uma alternativa bastante viável.

O PB Report Server herdou toda a estrutura do antigo report server que hoje continua funcionando como um portal para ambos os tipos de relatórios. Além disso, ele é integrado com o AD e pode ser amplamente divulgado e acessado pela empresa, sem limite de usuários.

A medida que o número de usuários aumenta é importante realizar o monitoramento e para isso o report server mantém os dados de acesso registrados na base de dados do próprio gerenciador. Nesse artigo vamos destacar as principais consultas que podemos realizar nestas tabelas.
































A tabela ExecutionLogStorage concentra todo o log de acesso, que por padrão é configurado para armazenar os últimos 60 dias. Se você quer armazenar o log completo, informe -1. Todos os dias, às 2:00 o processo de remoção é acionado.

Para alterar essa configuração, acesse as propriedades do serviço e informe o parâmetro ExecutionLogDaysKept.












































Basicamente, para monitorar o log, acesse o banco de dados criado no processo de instalação do PB Report Server e utilize as tabelas:

Users: nome dos usuários de AD que possuem acessos configurados;

Catalog: catalog com os metadados dos objetos que podem ser desde pastas, imagens, relatórios paginados e paineis feitos com o power bi;

ExecutionLogStorage: Tabela com o log de acesso aos objetos do catalog


--CONSULTA

SELECT
       A.LogEntryId, --Chave da tabela de log
       A.UserName, --Usuário que acessou o relatório  
       B.path, --Caminho na estrutura de pastas
       B.Name, --Nome do relatório
       A.TimeStart, --Momento que a execução foi realizada
       A.TimeEnd,
       A.TimeProcessing,
      A.Status, --Resultado da execução Erro/Sucesso   
      A.RequestType,
      TipoRequisicao =
              CASE A.RequestType
WHEN 0 THEN 'Interactive' --Representa um acesso manual
WHEN 1 THEN  'Subscription' --Acesso agendado
WHEN 2 THEN 'Refresh Cache' --Acesso agendado
ELSE '-'
       END,
       TipoCatalogo =
   CASE [Type]
WHEN 1 THEN 'Pasta'
WHEN 2 THEN 'Relatório Paginado'
WHEN 3 THEN 'Outros'
WHEN 4 THEN 'Relatório Vinculado'
WHEN 5 THEN 'Fonte de Dados'
WHEN 6 THEN 'Modelo de Relatório'
WHEN 7 THEN 'Parte do Relatório'
WHEN 8 THEN 'Conjunto de Dados Compartilhado'
WHEN 13 THEN 'Power BI' --Novo tipo, adicionado na versão com power bi
ELSE '-'
END

FROM [dbo].[ExecutionLogStorage] A
LEFT JOIN  [dbo].[Catalog] B on A.ReportID = B.ItemID


Com a consulta acima podemos criar diversos tipos de relatórios, monitorar a quantidade de acessos, os acessos mais recentes, os relatórios mais populares entre outras métricas.
























Uma dica importante é ter cuidado ao deletar relatórios. Quando a operação é realizada, os registros de log ficam órfãos, quando for subir uma nova versão, sempre substitua o relatório atual, fazendo isso o log não é perdido.


https://blogs.msdn.microsoft.com/shiyangqiu/2016/09/12/reporting-service-execution-log-retention/


sexta-feira, 12 de abril de 2019

Power BI - Detectando Clusters em Modelos de Dados

Clusters em modelos de dados no Power BI são basicamente agrupamentos que servem para segmentar uma dimensão com base em um algoritmo de agrupamento que difere de outros algoritmos de mineração de dados, como o algoritmo Árvores de Decisão da Microsoft, em que você não precisa designar uma coluna previsível para poder criar um modelo de agrupamento.

O algoritmo de clustering treina o modelo estritamente a partir dos relacionamentos existentes nos dados e dos clusters que o algoritmo identifica.

O algoritmo Microsoft Clustering primeiro identifica os relacionamentos em um conjunto de dados e gera uma série de clusters baseados nesses relacionamentos.










Disponível no mapa de dispersão (scatter chart)


























Uma vez criado o cluster, os pontos receberão um cor específica serão adicionada à lista de campos um novo item chamado "cluster" e esse item será adicionado também à legenda.






























No nosso exemplo o algorítimo foi configurado para localizar 5 clusters de produtos






















Para aprimorar a análise, os clusters podem ser renomeados por exemplo:

































Editar "Cluster". Você pode dar nomes amigáveis e controlar a quantidade




Também podemos usar linhas de tendência para criar quadrantes (tipo quadrante mágico do gartner)























Links:
https://powerbi.microsoft.com/en-us/blog/power-bi-desktop-november-feature-summary/

https://docs.microsoft.com/en-us/sql/analysis-services/data-mining/microsoft-clustering-algorithm?view=sql- analysis-services-2017

quinta-feira, 28 de março de 2019

Dimensão com Hierarquia Auto-referenciada - Parent-Child

Uma dimensão do tipo parent-child implementa o conceito auto-referenciamento de uma árvore desbalanceada, ou seja, possui ramos com tamanhos diferentes dependendo da profundidade de cada encadeamento.

Este tipo de dimensão pode aparecer em projetos que trabalham com listas de materiais que possuem subcomponentes, em sistemas corporativos que organizam os recursos humanos em estrutura organizacionais, em contas contábeis, etc..

Os projetos criados com o modelo tradicional do analysis services multidimensional (MDX) já possuem uma configuração nativa para tratar este tipo de dimensão, basta configurar corretamente as propriedades para que funcione.

Configuração das propriedades da dimensão





























Visualizando a dimensão
















Porém, com modelos tabulares criados com DAX esse suporte nativo não existe. Para obter uma hierarquia navegável no modelo de dados, você precisa decompor os níveis até um determinado ponto para obter uma hierarquia pai-filho.

Para isso o DAX fornece funções específicas para trabalhar com uma hierarquia pai-filho usando colunas calculadas.

Hierarquias Pai-Filho em DAX


A hierarquia é implementada utilizando as funções do grupo PATH.

PATH

PATHCONTAINS

PATHITEM

PATHITEMREVERSE

PATHLENGTH


Dados de Exemplo: Este exemplo será feito com base nesta tabela, onde o código da coluna gerente é o código pai.
















1-Identificar o caminho completo: 

Utiliza a coluna Gerente para referenciar todas as relações e retornar uma string com o caminho completo com todos os níveis superiores.



















Neste exemplo, existe uma coluna com a hierarquia já criada, em algumas fontes de dados isso pode existir, se esse for o caso, o primeiro passo pode ser substituído por esta função.


















2-Descobrindo o tamanho do caminho: 

Utilizar a função PATHLENGTH para identificar o tamanho. Esse valor será útil para identificar quantos níveis devem ser criados.


















3-Criando os níveis:

Nível 1: Utilizar PARENTITEM para localizar o código do nivel 1 e fornecer o parâmetro para LOOKUPVALUE localizar o nome do profissional.

























Nível 2: A partir do nível 2 é necessário fazer uma verificação no tamanho.






























O processo se repete para quantos níveis forem necessários.

O resultado final pode ser observado em um filtro ou em uma matrix.





Fonte:
https://docs.microsoft.com/en-us/dax/parent-and-child-functions- dax
https://www.daxpatterns.com/parent-child-hierarchies/
https://docs.microsoft.com/en-us/dax/understanding-functions- for-parent-child- hierarchies-in-dax
https://www.youtube.com/watch?v=QFKTr8tAQXE&list=PLWfPHxJoa7zthSaAMlt0JkJpFeVtdHzq6&index=42



quarta-feira, 20 de março de 2019

Datas Relativas Usando Power BI Filter Visual, DAX e JavaScript

Um requisito frequente em painéis criados com Power BI é a definição de um filtro padrão para a data atual ou ano atual. Quando um painel é renderizado, ele apresenta os filtros que foram salvos por último e estes são sempre estáticos (não são alterados de forma relativa).

Para que não seja necessário re-filtrar o painel sempre que ele é carregado e para que a data seja atualizada sem intervenção manual, temos algumas alternativas para implementar um filtro padrão com datas relativas.

1-Utilizando a configuração do visual de filtros do Power BI

Quando um campo do tipo data é utilizado como filtro o Power BI, a configuração abaixo é apresentada como opção para definir datas relativas (relativas a data atual).

Clique no menu e selecione a opção relative.


















Será apresentada uma lista de opções para configuração do tipo de intervalo que será usado.

Para selecionar o ano atual escolha a opção "This". Irá por padrão manter o filtro do ano atual com base na data de hoje. No dia 01/01/2020 o filtro será alterado para o ano novo, sem que tenha que ser atualizado manualmente.
















Existe diferentes combinações de datas relativas, para períodos maiores é possível usar a opção "Last". Neste exemplo serão filtrados como padrão os últimos 5 anos com base na data de hoje 20/03/2019.






















2-Criando uma nova coluna no modelo de dados


Outra alternativa interessante é a de criar uma nova coluna utilizando DAX para identificar o ano atual. Este método é interessante pois permite que o filtro seja utilizando de forma implícita, sem que tenha que obrigatoriamente criar um visual do tipo filtro na tela do painel.

Último Ano = IF('Calendar'[Year]= MAX('Calendar'[Year]);"Último Ano";FORMAT('Calendar'[Date]; "YYYY"))

Na função acima, se o ano da linha atual for igual ao maior ano, ou seja, o ano mais recente, então defina como "Último Ano", senão, apresenta a data em um formato de ano.

Agora basta manter o filtro "Ultimo Ano" selecionado. Seja no próprio painel com um filtro ou seja internamente como filtro de pagina.



3-Usando JavaScript


Usando um custom visual chamado Power Slicer https://appsource.microsoft.com/en-us/product/power-bi-visuals/WA104382000 é possivel implementar também com funções javascript.

Este custom visual permite um maior controle sob as customizações do visual de um slice. Além disso possui recurso configuração valores padrão utilizando funções JavaScritp.

Crie um filtro com o Ano e informe na propriedade "Default Value" a função: (new Date().getFullYear()-5)

Essa função irá retornar o ano de 2019 e será decrementado por 5, resultando no ano de 2014.

Sempre que o painel for carregado, será filtrado de acordo como resultado da função javascript.













Definir filtro padrão baseado em uma data relativa, nos garante que os painéis não irão carregar dados desnecessários nos casos onde as análises são feitas predominantemente com base no ano atual. Estes métodos de se obter períodos relativos podem ser aplicadas dependendo da necessidade de cada cenário.


Vídeo:


quarta-feira, 13 de março de 2019

Curva ABC Segmentação Dinâmica com Power BI - DAX

A segmentação ABC apresentada no post anterior cria uma coluna calculada para representar o resultado da classe, o que permite a utilização dessa coluna como filtro ou como campo para apresentar em elementos gráficos. Esse é o lado bom, mas, uma coluna calculada precisa ser "calculada" em tempo de processamento do modelo e não em tempo de execução, a medida que o painel é filtrado. O problema relacionado a este padrão de implementação é o fato dele ser estático e não atualizar conforme os painéis são manipulados. Para desenvolver uma métrica dinâmica que respeite os filtros, necessariamente temos que criar medidas.

Vamos a um exemplo de como implementar a classificação ABC através de medidas.

1-Criar uma medida de RANK

Essa medida será usada para identificar os produtos que possuem valores maiores do que o produto atual.









2-Criar o acumulado das vendas até o Rank do produto atual

* para cada produto, a engine do dax cria uma tabela temporária em memória com todos os produtos com melhor rank e faz a agregação.


















3-Total geral dos produtos selecionados

Para identificar a proporção do percentual do total do valor agregado e obter a métrica para gerar a classificação ABC.










É importante dizer que a função ALLSELECT() garante que o filtro do contexto explicito do painel é considerado e a medida irá ser calculada considerando os filtros realizados pelo usuário.


4-Dividir o acumulado atual com o total geral de produtos para obter o percentual do total







5-Definir a classe com base no percentual




















Também é possível obter o mesmo resultado utilizando a função TOPN para obter o acumulado e extrair a classificação dele.












Essa medida cria uma tabela temporário com os produtos TOPN até o Rank atual do produto. Exemplo: se o rank do produto é 10 a função irá retornar uma tabela com os 10 primeiros que será usada pela CALCULATE para fazer a agregação.



Como o resultado das Classes é obtido por uma medida, podemos usar em uma matrix como no exemplo abaixo..



































Mas a princípio não é possível usar a medida em um gráfico. Uma alternativa interessante para apresentar um quantitativo agregado seria usar cards.

Para apresentar em cards temos que criar 3 novas medidas, uma para cada classe



Resultado Final






Vídeo:




Curva ABC Segmentação Estática com Power BI - DAX

Análise de curva ABC é um tipo de padrão de segmentação que leva em consideração a classificação de um item (produto, cliente, etc) por categorias (A, B, C) com base no acumulado dos totais dos maiores valores para os menores.

É uma forma de identificar o princípio de Pareto, que considera que os itens com maiores resultados são poucos, mas impactam significativamente no resultado.

Os itens da classe A teoricamente são os mais importantes para o negócio. O valor deles deve ser avaliado com mais frequência, enquanto os itens da classe C são menos importantes e os itens da classe B são opcionais.


Cenários de utilização



Segmentação de clientes: separar os clientes por categorias para auxiliar a alocação de recursos de marketing.

Gerenciamento de ativos: gerenciar os estoques, aumentar a disponibilidade de estoque e negociar preços melhores para produtos na classe A, reduzindo o tempo e os recursos para itens nas classes B.

Este padrão de implementação é estático, isso significa que a classificação ABC é definida para um item em tempo de processamento do modelo e não em tempo de execução, como ocorre com as medidas. Isso ocorre porque a implementação é feita com colunas calculadas, e colunas calculadas são previamente armazenadas no modelo.

Etapas para implementação.


1-Criar uma coluna calculada na tabela de produtos com as vendas acumuladas por produto.

Essa primeira coluna faz a agregação do acumulado dos totais de vendas de produto, levando em consideração apenas os valores superiores ao valor da linha atual.































As vendas são acumuladas do maior para o menor valor.




2-Criar uma coluna calculada na tabela produto, com a venda total geral











É necessário usar a função ALL() para garantir que não haverá a transição de contexto e o total retornado irá ignorar o filtro de produto.



3- Gerar o percentual do acumulado.



















Essa métrica será usada como parâmetro para definir a classe.




4-Definindo a classificação ABC

































Opções de visualização:

Os produtos estão ordenados pelos totais de vendas e as classes estão respeitando o acumulado de até 80% para classe A até 90% para classe B.






Outra forma de apresentar os resultados, pode ser o gráfico de linhas e colunas, que configurado de forma decrescente do acumulado evidencia a suavização da curva.





















Vídeo:



Fontes:
Power BI & DAX Avançado - Guia Completo: https://www.udemy.com/share/1002h2B0QfeF1QRw==/

https://www.daxpatterns.com/abc-classification/

https://exceleratorbi.com.au/cumulative-running-total-based-on- highest-value/

https://community.powerbi.com/t5/Quick-Measures- Gallery/Dynamic-ABC- Classification/m-p/479146#M180

Formatação condicional baseada em expressões DAX

Na época que o report server era a principal ferramenta de relatórios/painéis da Microsoft, uma das características que eu mais gostava era a possibilidade de criar expressões em quase tudo que era renderizado na tela. Isso dava uma grande flexibilidade e permitia usar a criatividade para os mais diversos requisitos dos clientes. Com o surgimento do Power BI alguns visuais passaram a ficar bem mais "engessados". Mas em releases recentes vem surgindo opções interessantes de formatações condicionais que trazem de volta certo grau de customização nos visuais. 

A partir da evolução dos recursos de formatação condicional em visuais de tabelas do Power BI tornou-se possível fazer formatações condicionais utilizando os resultados obtidos por expressões implementadas por medidas.

Vamos a um exemplo de aplicação destes recursos: Criar uma formatação condicional em colunas de uma tabela com base na lógica de uma medida. 

Formatar apenas os maiores e menores resultados. 

 1-Dados de exemplo: Lista de clientes e valores de receita. Bem simples para facilitar a visualização.




2-Criar uma medida de RANK para usar na lógica da formatação condicional. Essa será a medida que será avaliada.










3-Criar nova medida para definir a cor que será usada para a formatação condicional. 

A função SWITCH avalia as condições na sequência.










Neste momento você pode ser implementar a lógica da formatação condicional específica para sua necessidade de acordo com a medida que será monitorada. Neste exemplo é o rank, mas poderia ser qualquer outra medida. 

* o resultado precisa ser o nome de uma cor. 

Com a medida pronta, acesse as propriedades da tabela.














4-Configurar com base na medida. 

Selecionar a opção "Field Value" e a medida criada. 



















O resultado, 


































* Esse processo pode ser repetido para definir a formatação condicional também da fonte do texto da célula, de forma que contraste melhor com as cores do background. 


5-Formatar TOPN
Uma variação do nosso exemplo poderia ser destacar o TOP3 clientes.

Este exemplo está destacando apenas o 3 primeiros e os 3 últimos. 










































Mas ainda assim estamos fixando o valor dos últimos clientes. Caso a lista de cliente aumente essa medida não ira atender nosso requisito. 

Para resolver isso podemos usar uma variável e alterar a nossa medida.

















































Fonte: http://radacad.com/dax-and-conditional-formatting-better-together-find-the-biggest-and-smallest-numbers-in-the-column


Video