terça-feira, 24 de novembro de 2015

Implementando Hierarquias Irregulares no Microstrategy (Ragged Hierarchies)

Continuando o assunto de Hierarquias atípicas no Microstrategy, chegou a hora de falar sobre Hierarquias Irregulares. Este é um outro assunto cuja solução funciona para qualquer ferramenta, e também é faz parte da metodologia de Advanced Data Warehousing da Microstrategy.

Hierarquias Irregulares ou Ragged Hierarchies é algo como o que você vê abaixo:


Para todos os meus exemplos, gosto de fazer pequenos cases, com modelos de dados utilizando a ferramenta DBDesigner. Implementei um pequeno datamart no Microsoft Access, depois inseri um conteúdo fake, e fiz o mapeamento de sua camada semântica no Microstrategy, para poder exemplificar e mostrar como é na prática, tudo aquilo que estou falando.

Começamos pelo pequeno datamart abaixo, que simula a estrutura de um plano de contas fictício de uma empresa, com 4 níveis, da conta mais sintética até a mais analítica. Uma tabela temporal de mês e uma pequena fato.



Nessa estrutura, foi inserido o seguinte conteúdo, mostrado em duas partes. Este que seria um pedaço do nosso plano de contas fictício:



Primeiro o Ativo da empresa, a Conta Nível 1. Ele é dividido em 3 subgrupos: Ativo Circulante, Ativo Não Circulante e Permanente, que são as Contas Nível 2
Para este exemplo, vamos isolar o Ativo Circulante. Abrindo sua estrutura, temos as seguintes Contas Níveis 3 e 4:



Ativo Circulante é uma Conta Nível 2. Embaixo dela, temos Contas Nível 3: Clientes e Disponível. Nessas contas, seguindo a estrutura, temos em cada uma suas Contas Analíticas, na cor amarela, cada uma com um valor monetário igual a 10. 
Porém, observe, que a Conta 5, está diretamente ligada ao Nível 2 - Ativo Circulante, sem a existência de um Nível 3. Em outras palavras, a Conta 5 que é do Nível 4, está ligada diretamente ao Ativo Circulante do Nível 2.
Se você é um projetista cuidadoso, resolveu isso ainda nas camadas de datawarehouse e ETL, e este problema não "estourou" no front end. Porém, se chegou até no Microstrategy, olhe as consequências. O modelo de dados analisado foi mapeado em um projeto no developer. O primeiro cenário, é se emitirmos um relatório, somente com as contas analíticas e seus totais:



Veja que todas as contas foram retornadas, com o valor de 10 em cada uma delas, totalizando 50. Então para este nível de detalhe não teremos problema. O problema ocorre quando você adiciona outros níveis superiores no relatório, ou faz o drill entre níveis superiores:


Observe, quando adicionamos os demais níveis, a última conta, aquela que está ligada diretamente do seu Nível 4 para o Nível 2 sem passar pelo Nível 3, não aparece, pois não compõe o join. Desta forma o valor total passa a ser 40, o que é um erro.


Solução:

Para corrigir este problema é simples. Basta inserir o membro faltante entre o Nível 2 e o Nível 4:

Este novo membro é um conteúdo na tabela dim_Conta_Nivel_3, que deverá estar como pai da Conta 5 na dim_Conta_Nivel_4. Quanto a sua descrição, alguns preferem herdar o descrição do nível pai, outros preferem subir a descrição do nível filho. Eu prefiro um conteúdo como "Nível Ausente".  Com esta correção na camada de ETL, veja como fica agora nosso relatório:





Agora observe o total 50. Observe também que todas as cinco contas aparecem e o nível que estava faltando também com seu novo descritivo. Esta é a solução recomendada pela Microstrategy para hierarquias irregulares, e este conteúdo assim como o do post anterior caem na prova da MCEP.

Obrigado e boa noite

Fabio Idalgo

segunda-feira, 23 de novembro de 2015

Implementando Hierarquias Recursivas no Microstrategy (Recursive Hierarchies)

Chegou a vez de abordar a ferramenta Microstrategy. Nos próximos artigos pretendo abordar algumas técnicas que julgo interessante nesta plataforma.

Começaremos com Hierarquias Recursivas. Vale lembrar que esta técnica serve para outras ferramentas. Recentemente implementei também em um projeto Tableau.

Vou utilizar para exemplo, parte de um plano de contas fictício. Imagine a seguinte estrutura:



Esta estrutura está implementada no seguinte datamart de exemplo:



Repare que existe uma tabela de Plano de Contas, onde toda estrutura é armazenada. Ela é uma tabela recursiva. Possui um campo ID_CONTA, seja ela conta sintética ou analítica. Também possui um campo ID_CONTA_PAI, que referencia a própria tabela, quem é sua conta pai. Por fim, possui um campo ID_NIVEL_CONTA, que não são todas tabelas recursivas em um datawarehouse que tem. Explicarei das duas formas de implementar.

Observe como a tabela é preenchida:




Veja que todos os níveis estão na mesma tabela. Para fazer o mapeamento no Microstrategy ou em outra ferramenta, você precisará inicialmente saber o número de níveis existentes no modelo, no caso, são 3 níveis.  Cada um dos níveis será isolado em uma view, seja uma Logical View no Microstrategy ou uma Database View, formando a seguinte estrutura:



O código de cada view segue abaixo. Eu particularmente prefiro as database views pois, quando você visualizar o código SQL de seus relatórios microstrategy fica mais enxuto. 

Nível 1:

SELECT  ID_CONTA    AS ID_NIVEL_1,
               DS_CONTA  AS DS_NIVEL_1
FROM    dim_Plano_Conta
WHERE ID_NIVEL_CONTA=1;

Sem o campo ID_NIVEL_CONTA :

SELECT  ID_CONTA    AS ID_NIVEL_1,
               DS_CONTA  AS DS_NIVEL_1
FROM    dim_Plano_Conta
WHERE ID_CONTA_PAI IS NULL


Nível 2:

SELECT  ID_CONTA AS ID_NIVEL_2, 
               DS_CONTA AS DS_NIVEL_2, 
               ID_CONTA_PAI AS ID_NIVEL_1
FROM     dim_Plano_Conta
WHERE  ID_NIVEL_CONTA=2;

Sem o campo ID_NIVEL_CONTA :

SELECT  ID_CONTA AS ID_NIVEL_2, 
               DS_CONTA AS DS_NIVEL_2, 
               ID_CONTA_PAI AS ID_NIVEL_1
FROM     dim_Plano_Conta N2,
               inner join dim_Plano_Conta N1
               on N2.ID_CONTA_PAI = N1.ID_CONTA
WHERE  N1.ID_CONTA_PAI IS NULL;

Nível 3:

SELECT  ID_CONTA AS ID_NIVEL_3, 
               DS_CONTA AS DS_NIVEL_3, 
               ID_CONTA_PAI AS ID_NIVEL_2
FROM     dim_Plano_Conta
WHERE  ID_NIVEL_CONTA=3;

Sem o campo ID_NIVEL_CONTA :

SELECT   ID_CONTA AS ID_NIVEL_3, 
                DS_CONTA AS DS_NIVEL_3, 
                ID_CONTA_PAI AS ID_NIVEL_2
FROM     dim_Plano_Conta N3,
               inner join dim_Plano_Conta N2
               on N3.ID_CONTA_PAI = N2.ID_CONTA
              inner join dim_Plano_Conta N1
              on N2.ID_CONTA_PAI = N1.ID_CONTA
WHERE  N1.ID_CONTA_PAI IS NULL;

Depois faça o mapeamento de cada view no Microstrategy como um atributo.




Defina o Nível 2 como filho do Nível 1, e o Nível 3 como filho do Nível 2. Também defina o relacionamento do Nível 3 com a fato. Depois é só inserir os atributos e montar o relatório:



E assim finalizamos o artigo. Existe também uma maneira de implementar quando o número de níveis não é conhecido. Porém exige um capítulo aparte e eu não vejo muito sua eficácia como este método.

Obrigado

Fabio Idalgo

quinta-feira, 12 de novembro de 2015

Interagindo com Dashboards no Tableau Server

Após alguns artigos abordando criação de dashboards e análises na ferramenta Tableau Desktop, vou falar agora um pouco sobre o Tableau Server. Este produto, para os iniciantes, fica instalado em um servidor dedicado, e lá ficam publicados seus dashboards e respectivos dados para a comunidade de usuários, que por sua vez, os acessará via navegador web pela URL, ou dispositivo móvel. Válido lembrar que ele funciona em HTML 5

No artigo de hoje, vou mostrar um pouco como interagir, no navegador, com um dashboard de exemplo que acompanha o produto Tableau Server. O nome do dashboard é Executive Overview - Profitability, e falaremos desde as interações mais simples até as mais avançadas e interessantes. Segue a imagem do dashboard abaixo:



Recursos abordados:
  • filtros
  • legendas
  • gráficos
  • BI colaborativo
  • mapa interativo
  • custom views
  • agendamento de envio de dashboard por email

As primeiras interações que você pode fazer são através dos filtros, no canto esquerdo da tela. O primeiro tipo abaixo, Order Date, através de um intervalo de data, mude os ponteiros para alterar o range:



O segundo tipo, Region, é uma lista de seleção única. Você pode escolher apenas um valor, ou todos eles, escolhendo a opção (All). No Tableau Desktop é possível desativar esta opção. 


O terceiro filtro State, e terceiro tipo de filtro, é a lista de seleção múltipla. Você pode selecionar mais de uma opção ou todas. Pode fazer combinação de seleções através de cada checkbox.



Assim falamos dos filtros. No Tableau Desktop, é possível configurar os filtros em cascata, um filtrando o outro. 
Agora vamos falar das legendas. Você pode torná-las interativas clicando no pequeno ícone de lápis (ou seria uma caneta?) no canto da legenda:



Agora, clicando na primeira das opções da legenda, ela irá filtrar todos os gráficos de área. Vamos primeiro filtrar todos os pedidos lucrativos (Profitable). Repare que só a parte azul dos gráficos de área são exibidas.



Agora, vamos ver somente os pedidos não lucrativos (Unprofitable), clicando na outra opção da legenda. Somente a área vermelha dos gráficos de área irão aparecer:



Outra interação que você pode fazer é clicando em um gráfico, no caso o mapa, todos os outros refletirão o filtro daquela localidade. Para desfazer a seleção clique na localidade novamente:



Falando em mapa, observe no canto esquerdo do mapa alguns botões que permitem algumas interações adicionais. Além do zoom com os símbolos de "+" e "-", o primeiro ícone é uma lupa, que permite você pesquisar uma localidade. Vamos imaginar que eu não sei onde fica Vermont. Basta clicar na lupa, digitar o nome da localidade e pressionar enter, o mapa automaticamente trará na tela a localidade:



Clicando no ícone da "casinha", você volta a visão original. Abaixo deste ícone, tem um ícone de uma seta, que permite você escolher a maneira que deseja fazer múltiplas seleções no mapa:



Escolha a seleção retangular, e selecione uma área do gráfico contendo várias localidades conforme abaixo:



Solte o botão do mouse e veja que os gráficos abaixo refletirão todas essas localidades selecionadas. Para desfazer basta clicar em uma localidade:



Por fim, a cereja do bolo, as 3 interações que mais gosto. Embaixo do dashboard, é possível adicionar comentários e registrar informações sobre o dashboard, o tornando colaborativo, Sendo que somente você e o administrador pode apagar suas mensagens:



Outra que eu gosto muito pela simplicidade é o envio de emails. Suponha que você deseja receber este dashboard, seja diariamente, semanalmente ou quando desejar. Enquanto outras ferramentas exigem maior complexidade, no Tableau Server existe o ícone de um "envelopinho" no canto superior direito, basta você clicar, seu email já irá aparecer, e você escolhe a periodicidade que deseja receber. A lista de periodicidades é configurada pelo usuário administrador, de forma muito simples. Válido lembrar, que para este recurso funcionar, é necessário o administrador da ferramenta deixar configurado o servidor SMTP e e-mail no utilitário de configuração da ferramenta.



Por fim, a última interação que gostaria de mostrar é a opção de salvar seleções. Suponha que você faça uma determinada seleção com frequência, um conjunto de filtros aplicados ou observou algo interessante em uma análise. É um subconjunto de informações apresentadas pelo seu dashboard. Poderia ser a seleção abaixo:



Para salvar esta seleção, logo acima do título, existe uma opção com o título Remember my changes. Clique nessa opção e atribua um nome para sua visualização.



Sua seleção ficará salva em My Custom Views. Também ficará salva somente no seu usuário e você poderá excluir. Poderá ter várias visualizações salvas.
Agora suponha que você saiu do Tableau, foi embora, passou o final de semana, voltou na segunda-feira e logou novamente na ferramenta e acessou o dashboard:



Clique em Remember My Changes e lá estará sua visão:



Clique nela e como mágica sua seleção aparecerá:



E assim terminamos o artigo.

Espero que tenham gostado. Um Abraço.

Fabio Idalgo

Análises Estatísticas no Tableau parte 2 - Histogramas

Pense e responda rápido: Quantos dashboards você já viu com um gráfico de Histograma?
Eu particularmente lembro de ter visto um em uma galeria de dashboards, mas não lembro de nenhum detalhe adicional. Na ferramenta Tableau é muito fácil de ser implementado, e é possível montar análises interessantes sem ser "fera" em estatística. 

Neste artigo vamos ensinar a montar e interpretar um histograma na ferramenta Tableau.



Para este exemplo, utilizei a versão 9.0 da ferramenta e a base de exemplo que acompanha o produto. Montei rapidamente o histograma primeiro com um duplo-clique na métrica Valor da Venda:



Depois na guia Mostre-me, cliquei no gráfico de histograma. Rapidamente ele criou o histograma, e também na sessão dimensões um recurso do Tableau chamado compartimentos.



Cliquei com o botão direito no compartimento, e alterei o intervalo, de 10.000 em 10.000 para de 2.000 em 2.000 mil.



Depois arrastei a métrica CONT(Valor de Vendas) com a tecla CTRL pressionada até o rótulo. E também cliquei com o botão direito no compartimento e adicionei em filtro rápido.



Aqui já é possível fazer uma leitura do gráfico. Observe:
  • Eixo Y - contagem das vendas
  • Eixo X - cada barra representa um compartimento, de 2 em 2 mil
Dessa forma, é possível observar, que a maioria das vendas da minha base, são de 0 a 2 mil, são vendas pequenas e não vendas grandes. Podemos observar que 6.527 vendas são de 0 a 2 mil. O segundo perfil de vendas mais realizado é de 2 a 4 mil com 816 vendas. Lembrando que nossa base está por item de pedido, seria necessário que a contagem fosse feita por pedido, mas estamos apenas exemplificando. Este é um comportamento dessa base, a curva poderia ser diferente.
Como nossas vendas de 0 a 2 mil representam um número muito grande de vendas proporcionalmente, os outros compartimentos quase não aparecem. É possível desmarcar este compartimento no filtro, para observar melhor os outros comportamentos.


E por último, você pode colocar a Categoria de Produto na cor, para dividir esta contagem por este atributo:



Assim concluímos nosso artigo, com uma análise do perfil de vendas através do gráfico de Histograma. 

Por hoje é só. Abraços.

Fabio Idalgo


Análises Estatísticas no Tableau parte 1 - boxplot (ou box-whisker)

Em mais de um de nossos artigos, resolvi abordar este tema que são as análises estatísticas nos projetos de BI. Infelizmente, poucos projetos de BI se dão ao luxo de ter um estatístico na equipe ou uma consultoria envolvida. Além disso, é muito difícil encontrarmos gráficos ou conceitos mais avançados em nossos dashboards.

Meu conhecimento também é limitado na área. Porém, resolvi na ferramenta Tableau, estudar e utilizar nos projetos, dois gráficos, tão pouco explorados nas ferramentas de front-end. Vou falar um pouco do diagrama de caixa (boxplot ou box-whisker, como é chamado no Tableau) e histograma, com exemplos simples de criar e interpretar.

O primeiro deles será o boxplot ou box-whisker neste artigo:


A medida que for criando o gráfico, ficará mais claro sua utilidade. Para criar este gráfico, utilizei a base padrão que acompanha o Tableau, na versão 9.0. Primeiramente, criei uma tabela mensal de vendas por subcategorias, filtradas pelo ano de 2014:


Dupliquei a planilha, cliquei na guia Mostre-me e escolhi o gráfico box-whisker


Agora vamos interpretar o gráfico. Primeiro veja que ele mostra uma caixa para cada mês do ano de 2014. E cada pontinho é uma sub-categoria dentro daquele mês:


Repare que se colocar o mouse em outro pontinho, é outra sub-categoria. E que sua posição varia conforme o valor da venda colocado no eixo Y:


Agora vem a pergunta: o que é esta caixa?


Posicionando o mouse sobre ela vemos alguns valores, que representam cada risco da caixa:

  • O primeiro risco, o mais baixo, é o valor mínimo
  • O risco mais alto, é o valor máximo. 
  • O risco de baixo da caixa, é o 1º quartil, ou seja, 25%. 
  • O risco superior da caixa, é o 3º quartil, ou seja, 75%. 
  • Já o risco que divide a caixa em duas cores, é a mediana, ou segundo quartil, 50%.

Imagine que você está vendo as vendas daquele mês, do mínimo até o máximo. Caso ir até o risco superior da caixa por exemplo, representa 75% das vendas. Para ficar mais claro, vou voltar a tabela anterior, filtrar o mês de janeiro e classificar do menor para o maior:


Agora compare o tooltip da caixa de janeiro do boxplot com os valores de janeiros ordenados. 

  • whisker inferior = 114 (valor mínimo, subcategoria Elástico)
  • quartil inferior = 3.352 (corresponde a subcategoria Canetas e Materiais de Arte)
  • mediana = 10.897 (subcategoria Papel)
  • quartil superior = 28.833 (subcategoria Telefones e Comunicação)
  • whisker superior = 51.888 (subcategoria Máquinas de Escritório)
Duas observações importantes: A primeira é que nem sempre o valor corresponderá a uma subcategoria, observe que em junho por exemplo, o cálculo do 3º quartil está entre duas subcategorias. A outra observação que é a pergunta que você deve estar fazendo é: porque o valor máximo é o penúltimo valor da série e não o último?

Observe o tooltip da última bolinha (subcategoria) de janeiro:


Este valor é chamado de Outlier. Valores desejados de muitos projetos, Outliers são valores atípicos ou dados muito diferente do conjunto, segundo a wikipedia. E estão disponíveis facilmente neste gráfico.

Segue link com toda explicação teórica deste gráfico:

https://pt.wikipedia.org/wiki/Diagrama_de_caixa

E isso é tudo, espero que tenham gostado.

Abraços

Fabio Idalgo