0% acharam este documento útil (0 voto)
810 visualizações111 páginas

Capítulo

1. O documento apresenta um capítulo sobre exploração de ETL e modelagem de dados no Power BI, abordando tópicos como uso de parâmetros, granularidade de dados, rateio de valores, tabela calendário e busca de cotação de moeda via API. 2. O capítulo também inclui exercícios para aplicar os conceitos aprendidos. 3. O material é parte de um treinamento de Power BI e destina-se a ajudar os alunos a consolidar os conhecimentos adquiridos nas aulas.

Enviado por

Leonan Nunes
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
810 visualizações111 páginas

Capítulo

1. O documento apresenta um capítulo sobre exploração de ETL e modelagem de dados no Power BI, abordando tópicos como uso de parâmetros, granularidade de dados, rateio de valores, tabela calendário e busca de cotação de moeda via API. 2. O capítulo também inclui exercícios para aplicar os conceitos aprendidos. 3. O material é parte de um treinamento de Power BI e destina-se a ajudar os alunos a consolidar os conhecimentos adquiridos nas aulas.

Enviado por

Leonan Nunes
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 111

caioferreira2002@outlook.

com

CAPÍTULO:  1
caioferreira2002@outlook.com

POWER BI
MÓDULO 2
Prezado(a) aluno(a), seja bem-vindo(a) ao treinamento de Power BI da DATAB. Você tomou uma das
decisões mais importantes em sua carreira: valorizar a análise de dados e estudar o principal software
que vai direcionar seus processos de exploração de dados.

Esse material é um conteúdo integrante complementar do curso de Power BI da DATAB. A principal


trilha de conhecimento transmitida no curso pode ser consultada diretamente aqui (exceto trilhas
complementares). Utilize esse material em conjunto com o treinamento, consultando-o sempre que
necessário para relembrar e solidificar as técnicas aprendidas. Seu principal aprendizado continua
sendo as aulas, onde conseguimos aprofundar e flexibilizar as explicações, e aqui você conseguirá
relembrar conceitos de forma resumida e acompanhar exercícios e desafios propostos no curso.

É altamente recomendado que você faça download dos arquivos do curso (mencionados nas aulas
iniciais na plataforma da DATAB) e pratique juntamente conosco, dessa forma, seu aprendizado será
consolidado de diferentes formas: vendo, ouvindo, lendo, praticando e discutindo suas dúvidas.

Sempre que assistir uma aula, certifique-se que possa praticar com o Power BI aberto. Dessa forma,
dúvidas e erros surgirão e elas poderão ser explicadas logo abaixo de cada aula para que receba nosso
suporte e consiga concluir com sucesso os exercícios propostos.

Após aprender conceitos essenciais do Power BI com os assuntos do Módulo 1, você está preparado
para dar passos mais longos e explorar níveis de complexidade e volume maiores.

Com a base estruturada em seu aprendizado sobre como o Power Query e as outras funcionalidades
do Power BI se integram, nesse estágio você deve compreender corretamente o uso das etapas
de transformação e que a aplicação do Power Query deve ser predominantemente voltada para
tratamento de dados. Você também já deve ter solidificado em seu aprendizado que a parte analítica
de transformar dados em informação é realizada por meio de funções DAX e visualização em diversos
gráficos.

As principais complexidades de alteração de contexto de filtro em cálculos utilizando a CALCULATE


e funções iterantes serão exploradas com mais profundidade nesse módulo 2. Entretanto, antes
de iniciar essa jornada, você precisa saber muito bem sobre modelagem de dados e o formato
necessário para utilizá-los e é nesse assunto que vamos começar aprofundando no Power Query.

Depois da estruturação desses dois pilares: tratamento de dados e análise, aplicaremos os resultados
em visualizações com consistência para extrair ricas informações de cálculos para responder questões
de negócios. Seja bem-vindo(a) ao Power BI Módulo 2 da DATAB.

Um abraço,
caioferreira2002@outlook.com

Esse material é de uso exclusivo do ALUNO(A) DATAB.

Nenhuma parte desse material, sem autorização prévia por escrito dos autores, poderá ser
reproduzida ou transmitidas sejam quais forem os meios empregados: eletrônicos, mecânicos,
gravação, impresso ou quaisquer outros.

Todos os direitos reservados e protegidos pela lei 9.610 de 19/02/1998.

Esse material pertence ao aluno(a) matriculado(a) no treinamento de Power BI realizado pela


DATAB INTELIGÊNCIA E ESTRATÉGIA. Sua divulgação ao público ou reprodução não é
permitida.

Caso tenha recebido esse material por distribuição livre, o que é proibido, entre em contato
com comercial@databinteligencia.com.br para denúncia.

Todas as marcas e imagens de hardware, software e outros utilizados e/ou mencionados nesta

DADOS DA PUBLICAÇÃO

POWER BI: MÓDULO 2 • 1ª edição 2021

DATAB INTELIGÊNCIA E ESTRATÉGIA • CNPJ: 29.162.953/0001-38

São Caetano do Sul, São Paulo / Brasil

www.databinteligencia.com.br
caioferreira2002@outlook.com

SUMÁRIO
CAPÍTULO 1: EXPLORANDO O ETL E A MODELAGEM DE DADOS......................................... 7

1.1  USANDO PARÂMETROS...............................................................................................................................8

1.2  GRANULARIDADE.......................................................................................................................................11

AGRUPANDO VALORES......................................................................................................................................12

USANDO FUNÇÕES DA LINGUAGEM M.........................................................................................................15

COMO CONHECER MAIS FUNÇÕES................................................................................................................16

1.3  RATEANDO VALORES.................................................................................................................................17

MESCLANDO TABELAS......................................................................................................................................19

MEMORIZANDO TABELAS................................................................................................................................ 22

CRIANDO FÓRMULAS COM EXPRESSÕES MATEMÁTICAS.........................................................................24

MEDIDAS E APLICAÇÃO VISUAL.......................................................................................................................27

MEDIDAS E APLICAÇÃO VISUAL (EXERCÍCIO 1).............................................................................................28

1.4 TABELA CALENDÁRIO..................................................................................................................................30

CALENDARIO DINÂMICO................................................................................................................................. 30

CALENDÁRIO FISCAL..........................................................................................................................................32

COLUNA DATA.....................................................................................................................................................32

COLUNA DATA FISCAL...................................................................................................................................... 33

COLUNA ANO FISCAL....................................................................................................................................... 34

COLUNA NOME DO MÊS.................................................................................................................................. 35

COLUNA MÊS...................................................................................................................................................... 36

COLUNA TRIMESTRE..........................................................................................................................................37

REMOVENDO A COLUNA DATA FISCAL E DETECTANDO TIPO DE DADOS............................................ 38

RELACIONANDO AS TABELAS CALENDÁRIOS............................................................................................. 38

MEDIDAS E APLICAÇÃO VISUAL (EXERCÍCIO 2)............................................................................................ 40


caioferreira2002@outlook.com

1.5  BUSCANDO COTAÇÃO DO DÓLAR VIA API.............................................................................................42

ANALISANDO OS PARÂMETROS DA API........................................................................................................ 46

MESCLANDO COM A TABELA CALENDÁRIO................................................................................................ 48

DIAS ÚTEIS, FINAIS DE SEMANA E FERIADOS................................................................................................49

MEDIDAS E APLICAÇÃO VISUAL (EXERCÍCIO 3)............................................................................................ 50

CAPÍTULO 3: EXPLORANDO A LINGUAGEM DAX.................................................................. 53

3.1 CONTEXTO DE LINHA VERSUS CONTEXTO DE FILTRO............................................................................53

HORA DE PRATICAR 1 (DAX)............................................................................................................................ 58

3.2  MÚLTIPLOS RELACIONAMENTOS E RELAÇÕES INATIVAS.......................................................................58

HORA DE PRATICAR 2 (DAX).............................................................................................................................61

3.3 CRIANDO TABELAS VIRTUAIS.....................................................................................................................62

3.4  FUNÇÕES ITERANTES E TABELAS VIRTUAIS.............................................................................................64

HORA DE PRATICAR 3 (DAX)............................................................................................................................ 66

3.5  FILTRANDO TABELAS VIA DAX..................................................................................................................66

3.6 USANDO FUNÇÕES ITERANTES PARA “CORREÇÕES” DO TOTAL..........................................................70

HORA DE PRATICAR 4 (DAX).............................................................................................................................72

3.7 CRIANDO TABELA DE SEGMENTAÇÃO .....................................................................................................73

HORA DE PRATICAR 5 (DAX).............................................................................................................................78

3.8 ACUMULADOS ............................................................................................................................................78

YEAR-TO-DATE.....................................................................................................................................................78

QUARTER E MONTH-TO-DATE..........................................................................................................................81

ACUMULADO AO LONGO DO TEMPO...........................................................................................................82

ACUMULADO MÓVEL........................................................................................................................................ 85

MÉDIA MÓVEL......................................................................................................................................................87

HORA DE PRATICAR 6 (DAX).............................................................................................................................87

3.9  PARAMETRIZANDO MEDIDAS....................................................................................................................88

ENTENDENDO O PARÂMETRO....................................................................................................................... 90

APLICANDO EM UM GRÁFICO..........................................................................................................................91
caioferreira2002@outlook.com

HORA DE PRATICAR 7 (DAX)............................................................................................................................ 92

3.10  RANKING....................................................................................................................................................93

COMPARANDO DUAS MEDIDAS DIFERENTES NO MESMO RANKING.....................................................95

INVERTENDO A ORDEM DO RANKING...........................................................................................................96

EMPATES. E O PRÓXIMO RANKING?................................................................................................................97

CRITÉRIOS DE DESEMPATE............................................................................................................................... 98

HORA DE PRATICAR 8 (DAX)............................................................................................................................ 99

CAPÍTULO 4: SEGURANÇA EM NÍVEL DE LINHA (RLS).......................................................... 101

CAPÍTULO 5: SOLUÇÕES DO HORA DE PRATICAR............................................................... 105

HORA DE PRATICAR (1).....................................................................................................................................105

HORA DE PRATICAR (2).....................................................................................................................................106

HORA DE PRATICAR (3).....................................................................................................................................107

HORA DE PRATICAR (4).....................................................................................................................................107

HORA DE PRATICAR (5).................................................................................................................................... 108

HORA DE PRATICAR (6).....................................................................................................................................109

HORA DE PRATICAR (7).................................................................................................................................... 110

HORA DE PRATICAR (8)..................................................................................................................................... 110


caioferreira2002@outlook.com
caioferreira2002@outlook.com

CAPÍTULO

1
EXPLORANDO O ETL
Capítulo 1: EXPLORANDO O ETL E A
E A MODELAGEM
MODELAGEM DE DADOS
DE DADOS

Tratar e modelar os dados pode ser uma das tarefas mais árduas durante o desenvolvimento de um
projeto no Power BI. Isso se dá devido aos dados extraídos para elaboração dos relatórios serem
provenientes das mais diversas fontes e terem formas e estruturas diferentes. Por isso, tratá-los requer
aplicar as mais variadas técnicas. Mas manter os dados estruturados corretamente facilitam muito a
criação das métricas no Power BI. E por essa é uma tarefa essencial no desenvolvimento de projetos
de BI.

No módulo 1 aprendemos que o Power Query Editor é a ferramenta dentro do Power BI que facilita a
execução das tarefas de tratamento e transformação de dados. Um ponto muito importante em relação
ao Power Query Editor é que ele utiliza a linguagem M para escrever cada etapas de transformação que
aplicamos através dos botões e ícones que clicamos, e conhecer melhor essa linguagem nos abrirá um
leque de possibilidades além dos recursos disponíveis na interface gráfica do editor.

Neste capítulo faremos um contato maior com a linguagem M e com algumas situações recorrentes no
processo de ETL, e aprender como podemos utilizar a barra de fórmulas e o editor avançado a nosso
favor no processo de tratamento e modelagem no Power BI.

Para explorar melhor os recursos do Power Query Editor e da linguagem M vamos utilizar praticamente o
mesmo modelo que criamos no módulo 1, com a exceção que iremos importar uma nova tabela Metas.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 9

Vamos utilizar o arquivo de Power BI disponibilizado nas primeiras aulas dessa sessão do Módulo 2.
Esse é o modelo já construído sem a tabela metas.

Abra o Power Query Editor para iniciarmos, clicando no menu Página Inicial → Transformar Dados.

1.1  USANDO PARÂMETROS


Com o Power Query Editor já aberto, vamos explorar algumas consultas já criadas. Perceba que neste
arquivo já temos 9 consultas criadas, porém em seis delas apresenta uma espécie de erro.
caioferreira2002@outlook.com

10 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Isso ocorreu porque o caminho base, que é onde estão salvos todos os arquivos que foram utilizados
neste modelo está apontando para um local que está no computador de quem criou o relatório este
Power BI. Para corrigir, basta clicar no parâmetro já criado com o nome CaminhoBase e informar o
caminho da pasta Dados no seu computador.

Com o caminho corrigido as consultas deixarão de apresentar os erros.

Os parâmetros são um tipo de consulta que contém um valor armazenado, que pode ser utilizado em
diversas outras situações durante a criação de uma consulta. No exemplo anterior, o parâmetro foi
utilizado para definir um caminho em comum que todas as consultas utilizam para apontar onde está
armazenado arquivo a ser conectado.

Para criar um parâmetro, no Power Query Editor clique em Página Inicial → Gerenciar Parâmetros →
Novo Parâmetro.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 11

Na caixa de diálogo que será exibida, informe o nome do novo parâmetro, o tipo de dado e um valor
atual. No exemplo, o nome do parâmetro é Caminho Base, o tipo é Texto e o valor atual é o caminho
da pasta Dados.

Com o parâmetro criado, podemos utilizar o seu valor para compor o caminho de um arquivo, determinar
filtros em tabelas ou até criar colunas condicionais.

Vamos aplicar o parâmetro criado na conexão do arquivo Metas.xlsx.

Clique em Página Inicial → Nova Fonte → Excel, importe o arquivo Metas.xlsx que está salvo na
pasta Dados e em seguida selecione a tabela Metas e clique no botão OK.
caioferreira2002@outlook.com

12 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Esse processo é semelhante ao processo de conectar com qualquer fonte de dados que já realizamos
anteriormente. Mas agora vamos fazer uma adaptação no caminho do arquivo para utilizar o valor que
está armazenado no parâmetro CaminhoBase.

Na lista de etapas clique na engrenagem da etapa Fonte para alterar suas opções. Na caixa de diálogo
que será exibida marque a opção Avançadas. Em seguida, na primeira caixa de texto informe o
parâmetro CaminhoBase – para permitir a seleção do parâmetro é necessário alterar a opção ao lado da
caixa de texto. Na segunda caixa de texto digite \Metas.xlsx, conforme mostrado na imagem a seguir:

Clique em OK e a sua conexão com o arquivo metas está atrelado ao caminho definido no parâmetro.
Certifique-se de clicar na última etapa da consulta para visualizar os dados.

1.2  GRANULARIDADE

A granularidade é uma das mais importantes definições na modelagem de dados e requer muita
atenção. Um grão informacional é o menor nível de detalhamento da informação e é definido
conforme as necessidades apuradas na fase de levantamento de requisitos do projeto. A granularidade
é determinada para cada tabela fato, já que normalmente essas tabelas possuem informações e
granularidades diferentes.

Existe uma relação entre o detalhamento das informações e a granularidade de uma tabela. Quanto
menor a granularidade isso significa que maior será o detalhamento dos dados, e por consequência
maior o volume de dados, também. E quanto maior a granularidade, menor será o detalhamento
e menor o volume de dados. Podemos notar então que, a granularidade e o detalhamento são
inversamente proporcionais.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 13

É a definição do tamanho do grão que nos permitirá a execução das ações conhecidas como drill down
e roll up (drill up). Essas são operações que estão relacionadas com a sumarização e o detalhamento
dos grãos. Através do drill down diminuímos o nível de granularidade e aumentamos os detalhes. Já
com o roll up fazemos o processo oposto, aumentando o nível de granularidade e diminuindo o nível
de detalhamento das informações.

A definição da granularidade é muito importante pois afeta diretamente no volume de dados


armazenados, na velocidade das consultas e no nível de detalhamento das informações. Se por um
lado a menor granularidade deixa mais flexível para se obter respostas, pelo outro lado maior também
será o volume e menor a velocidade das consultas. Já quanto menor for o detalhamento, menor será o
volume e maior o agrupamento dos dados, melhorando a performance. Por isso não adianta definir o
menor grão possível se a sua necessidade informacional não requer tanto detalhamento.

Conclui-se que deve ser analisado o equilíbrio entre detalhamento e performance para que a
granularidade seja modelada com a melhor eficiência e eficácia para as consultas dos usuários, sempre
levando em consideração as necessidades levantadas no começo do projeto. De nada adianta deixar a
granularidade alta sem que seja alcançado o grão exigido pelo negócio.

Vamos a uma aplicação prática.

AGRUPANDO VALORES

Na tabela Metas que importamos no exemplo anterior temos uma coluna denominada Canal onde está
estipulado qual é canal de vendas daquela meta.

Se analisarmos um pouco mais a fundo, na outra tabela fato presente – Vendas, não temos essa
granularidade dos dados. Isso indica que até é possível filtrar as metas pelo canal de vendas, mas não
será possível filtrar as vendas, impedindo essa comparação entre os dois fatos.

Por essa razão, vamos aumentar o tamanho do grão da tabela Metas, agrupando as informações pelas
de maneira que a informação da coluna Canal seja removida, sem perder a referência dos valores.

Para agrupar valores no Power Query Editor clique em Página Inicial → Agrupar por. Na caixa de
diálogo que será exibida vamos determinar os agrupamentos e as agregações.

Os agrupamentos são as colunas que desejamos agrupar, de forma que no resultado não haja
repetições formadas pelo conjunto das colunas. Informe as colunas Data Meta, Cod.Unidade, Cod.
Produto e Rev. Para isso é necessário clicar na opção Avançadas.
caioferreira2002@outlook.com

14 DATAB • TREINAMENTO POWER BI • MÓDULO 2

As agregações são as novas colunas geradas a partir do agrupamento. Neste caso queremos que os
valores na coluna Vl.Total sejam somados, retornando uma nova coluna de mesmo nome.

Digite Vl.Total no campo nome da nova coluna, em operação selecione Soma e em coluna selecione
a coluna Vl.Total.

Clique em OK para aplicar o agrupamento dos dados.

Um cuidado muito importante que tomamos foi não agrupar dados de revisões diferentes
armazenados na coluna Rev, que indica o histórico de alteração das metas. Isso demonstra que nesta
tabela pode haver “versões diferentes” para uma mesma meta. Se não levarmos essa informação
em consideração os valores de todas as revisões seriam somados gerados dados completamente
errôneos.

O próximo passo agora é manter apenas as metas da versão mais recente. Precisamos filtrar apenas a
última versão de cada meta, e faremos isso com um novo agrupamento de dados.

Clique novamente em Página Inicial → Agrupar por. Agora vamos fazer um agrupamento sem
agregados os dados. Clique na opção avançadas e informe as colunas Data Meta, Cod.Unidade e
Cod.Produto no agrupamento.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 15

Como não vamos agregar as informações dessa vez, na agregação digite Dados para o nome da nova
coluna, e em operação selecione todas as linhas. Clique em OK.

O resultado será uma tabela contendo as três colunas agrupadas, e um coluna chamada dados contendo
outra tabela. Se você clicar ao lado da palavra Table em cada célula será possível visualizar o conteúdo
da tabela. Perceba que é exibido exatamente cada uma das revisões para cada linha da meta.

Nosso objetivo agora é extrair apenas a meta da revisão com maior número.
caioferreira2002@outlook.com

16 DATAB • TREINAMENTO POWER BI • MÓDULO 2

USANDO FUNÇÕES DA LINGUAGEM M

Para extrair apenas o maior registro da tabela presente na coluna Dados vamos utilizar uma função da
linguagem M chamada Table.Max que retorna a maior linha da tabela usando uma de suas colunas
como critério de comparação.

Para isso, vamos criar uma coluna personalizada onde a fórmula será inserida. Clique em Adicionar
Coluna → Coluna Personalizada. Atribua o nome Registro para a nova coluna, e insira a fórmula a seguir:

= Table.Max([Dados], “Rev.”)

A nova coluna criada extrairá o registro que contém o maior valor na coluna Rev. presente em cada uma
das tabelas na coluna Dados.

Perceba que no registro retornado pela função Table.Max, já temos todas as informações que
precisamos. Então podemos manter apenas a coluna registro nesta tabela.

Clique com o botão direto sobre o cabeçalho da coluna Registro e escolha a opção Remover Outras Colunas.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 17

Em seguida expanda os valores da coluna registro. Como não precisaremos da informação da coluna
Rev. você pode desmarcar essa informação. Lembre-se também de não usar o nome da coluna original
como prefixo.

E por fim, selecione todas as colunas da tabela e clique em Transformar → Detectar Tipo de Dados.

COMO CONHECER MAIS FUNÇÕES

A função Table.Max é só um exemplo das mais de 600 funções disponíveis na linguagem M que
poderão facilitar o seu processo de tratamento de dados no Power Query Editor.

Se quiser conhecer mais sobre cada uma das funções da linguagem M acesse a documentação oficial
no site da Microsoft no link https://docs.microsoft.com/pt-br/powerquery-m/power-query-m-function-
reference. Todas as funções estão listadas e divididas em 24 categorias facilitando a consulta e o
aprendizado.

Mas não se preocupe, você não precisa aprender todas de uma vez. O processo de aprendizado da
linguagem M é como o processo de aprendizado de um novo idioma. Muitas das funções (ou palavras)
que você aprender vai ser a medida que avança no estudo e na aplicação. Neste curso ainda vamos
aplicar mais algumas funções.
caioferreira2002@outlook.com

18 DATAB • TREINAMENTO POWER BI • MÓDULO 2

1.3  RATEANDO VALORES

Se compararmos as granularidades das tabelas fatos Vendas e Metas, chegamos à conclusão de


que ambas as tabelas possuem os grãos de data, unidade e produto, permitindo essas comparações
entre os fatos. Porém apenas na tabela Vendas existe o grão para vendedor. Isso implicaria na
impossibilidade de comparar os fatos pela dimensão de vendedor ou qualquer outra classificação
nesta tabela, como os supervisores, por exemplo.

O ideal é que cada meta tivesse sida definida também para cada vendedor, para possibilitar essa
comparação. Como não temos essa informação neste nível de granularidade, uma estratégia possível
é ratear o valor das metas para cada um dos vendedores.

Um cuidado importante é ratear as metas pelo número correto de vendedores em cada período, pois
os vendedores ativos variam ao longo do tempo.

Para isso, é necessário saber quais os vendedores estavam ativos em cada mês. Vamos duplicar a
tabela Vendas para gerar uma lista de vendedores por mês.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 19

Renomeie a nova tabela gerada para AuxVendedorMes. Como essa será uma tabela auxiliar, não é
necessário que ela seja carregada para o Power BI. Clique com o botão direito na tabela e deixe a
opção Habilitar Carga desabilitada.

Para obter os vendedores ativos em cada mês, precisamos apenas das colunas Data Pedido e Cod.
Vendedor. Então selecione as essas colunas e em seguida remova as outras colunas.

A tabela Vendas possui uma granularidade de data diária, enquanto a tabela metas possui uma
granularidade mensal. Para isso, vamos transformar todas as datas de pedidos para o primeiro dia de
cada mês, para equivaler as granularidades.

Selecione a coluna Data Pedido, e clique em Transformar → Data → Mês → Início do Mês.

Como um mesmo vendedor pode efetuar várias vendas em um mesmo mês, vamos remover as
duplicidades para que tenhamos apenas uma linha para cada vendedor em cada mês.
caioferreira2002@outlook.com

20 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Selecione as duas colunas e clique em Página Inicial → Remover Linhas → Remover Duplicatas.

Pronto! Agora já temos a relação de todos os vendedores ativos em cada um dos meses. O próximo
passo será vincular essa informação com a tabela Metas.

MESCLANDO TABELAS

Cruzar dados entre tabelas é muito comum durante o processo de tratamento e modelagem dos
dados. Quando precisamos trazer informação de uma tabela para outra tabela no Power Query Editor
utilizamos o recurso Mesclar Consultas.

Para fazer o rateio é necessário trazer os dados de vendedores ativos da tabela AuxVendedorMes
para a tabela Metas. Clique na tabela Metas no painel de consultas a esquerda e depois no menu
Página Inicial → Mesclar Consultas.

Na caixa de diálogo que é exibida temos que informar quais campos as tabelas têm em comum.
Precisamos então relacionar o campo Data Meta da tabela Metas com Data Pedido da tabela
AuxVendedorMes. Para isso, selecione a tabela AuxVendedorMes na caixa de opções, e depois clique
sobre o nome dos campos.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 21

O Power Query Editor irá fazer um cálculo de correspondências entre as duas tabelas, verificando
quantos registros presentes na primeira tabela possuem correspondências na segunda tabela. Esse
cálculo pode demorar um pouco dependendo do volume de dados nas duas tabelas.

Para esse exemplo, podemos perceber que foram encontradas correspondências para todas as 2174
linhas presentes na tabela Metas.

Uma opção importante presente nesta caixa de diálogo é o Tipo de Junção. Essa configuração é
essencial para correta mesclagem dos valores. Existem 6 tipos de junção diferentes e elas denominam
a primeira tabela como esquerda e a segunda como direita:

• Externa esquerda: Todas as linhas da primeira tabela e aquelas que


correspondem na segunda tabela.

• Externa direita: Todas as linhas da segunda tabela e aquelas que


correspondem com a primeira tabela.

• Externa completa: Todas as linhas de ambas tabelas.

• Interna: Apenas linhas correspondentes de ambas tabelas.

• Anti esquerda: Apenas as linhas da primeira tabela que não


correspondem com a segunda tabela.

• Anti direita: Apenas as linhas da segunda tabela que não correspondem


com a primeira tabela.

Para este exercício, vamos deixar a opção externa esquerda habilitada, pois queremos manter todas
as linhas de metas. Clique em OK para finalizar.

O resultado será uma nova coluna chamada AuxVendedoresMes contendo tabelas com os
vendedores ativos para cada linha de meta.
caioferreira2002@outlook.com

22 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Com as tabelas de vendedores ativos em cada mês obtidas, vamos criar uma coluna que retorne o
valor da quantidade de vendedores, contando quantas linhas cada tabela retornada possui. Para isso
adicionaremos uma coluna personalizada usando a função Table.RowCount para realizar a contagem
de linhas. Clique em Adicionar Coluna → Coluna Personalizada e adicione a fórmula a seguir:

= Table.RowCount([AuxVendedorMes])

Clique em OK para inserir a nova coluna.


caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 23

MEMORIZANDO TABELAS

Depois de aguardar algum tempo, provavelmente você notará que o Power Query Editor está
demorando mais que o normal para carregar os dados. É possível observar na barra de status o
volume das informações sendo carregadas enquanto algumas bolinhas animam a tela mostrando que
os dados ainda estão sendo processados.

O primeiro indício de que há algo errado é o volume de informações sendo carregadas. Na imagem
a anterior é possível notar que já haviam sido carregadas mais de 1,2 gigabytes de dados do arquivo
vendas.xls enquanto o arquivo vendas.xlsx possui pouco menos de 32 megabytes de tamanho. Isso
acontece, pois, para avaliar o resultado da função Table.RowCount, o Power Query recorre a tabela
AuxVendedorMes, que por sua vez recorre ao arquivo vendas.xlsx, fazendo que seja recarregado
sempre que um novo cálculo é avaliado.

Como a fórmula é avaliada para cada linha da tabela Metas, o arquivo vendas.xlsx seria carregado
8398 vezes (número de linhas da tabela). E isso poderia variar conforme a tabela metas tivesse o
número de linhas alterado.

A solução para essa situação é armazenar o resultado da tabela AuxVendedorMes na memória,


evitando que ela sofra alterações externas durante a avaliação. Dessa maneira ela seria carregada
apenas a primeira vez, e todas as avaliações posteriores utilizariam a informação na memória. Para
isso vamos utilizar a função Table.Buffer da linguagem M.

Na consulta que estamos criando, nós instanciamos a tabela AuxVendedorMes na etapa anterior –
Consultas Mescladas. Clique sobre o nome desta etapa no painel config. consulta.

Na barra de fórmulas é possível visualizar a fórmula da linguagem M que fez a mesclagem das tabelas
utilizando a função Table.NestedJoin. Se a barra de fórmulas estiver oculta, clique em Exibição →
Barra de Fórmulas.

= Table.NestedJoin(#“Tipo Alterado1”, {“Data Meta”}, AuxVendedorMes,


{“Data Pedido”}, “AuxVendedorMes”, JoinKind.LeftOuter)
caioferreira2002@outlook.com

24 DATAB • TREINAMENTO POWER BI • MÓDULO 2

É possível notar no terceiro argumento da função Table.NestedJoin o nome da tabela


AuxVendedorMes que foi usada no processo de mesclar consultas. Vamos indicar que queremos que
esta tabela seja armazenada em memória inserindo-a dentro da função Table.Buffer, alterando a
fórmula conforme demonstrado a seguir:

= Table.NestedJoin(#“Tipo Alterado1”, {“Data Meta”}, Table.Buffer(AuxVende-


dorMes), {“Data Pedido”}, “AuxVendedorMes”, JoinKind.LeftOuter)

Após editar a fórmula, pressione enter e aguarde o carregamento dos dados. O arquivo vendas.xlsx
começará a ser carregado novamente, porém desta vez apenas uma vez, fazendo com que o processo
termine assim que atingir o seu tamanho de aproximadamente 32 megabytes.

Volte para a etapa Personalização Adicionada1 e verifique se a coluna Qtde que criamos foi
calculada corretamente.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 25

CRIANDO FÓRMULAS COM EXPRESSÕES MATEMÁTICAS

As colunas personalizadas permitem não só apenas fórmulas com funções, mas é possível criar
cálculos com expressões matemáticas como multiplicações, divisões, adições ou qualquer outra
expressão. Vamos adicionar uma nova coluna dividindo o valor da coluna Vl.Total pela coluna
Qtde. Clique em Adicionar Coluna  Coluna Personalizada e digite a fórmula com a expressão
matemática dividindo as duas colunas.

= [Vl.Total] / [Qtde]

Atribua o nome Vl.Meta para a nova coluna e clique em OK.


caioferreira2002@outlook.com

26 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Com os valores de rateio das metas calculados para cada um dos vendedores, agora é só expandir a
coluna AuxVendedorMes trazendo o Cod.Vendedor replicando as informações para cada um dos
vendedores dentro da tabela.

As divisões são exatas e podem resultar em valores com muitas casas decimais. Não há nenhum
problema em trabalhar com os valores com muitas casas decimais pois podemos formatar a exibição
dos valores na visualização de dados.

É possível também arredondar os valores no Power Query, mas é importante ter em mente
que as transformações realizadas através do editor de consultas transformam os dados, e um
arredondamento eliminaria a precisão dos valores, acarretando pequenas diferença nos valores
agregados.

Se ainda assim preferir proceder com o arredondamento, selecione a coluna Vl.Meta e clique em
Transformar → Arredondamento → Arredondar e informe o número de casas desejadas.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 27

Por fim, podemos remover as colunas Vl.Total e Qtde que não são mais necessárias na tabela e
teremos a tabela a seguir como resultado. Clique em Página Inicial → Fechar e Aplicar.

Após carregada a tabela Metas crie os relacionamentos necessários.

• Metas[Data Meta]  Calendario[Data]

• Metas[Cod.Vendedor]  Vendedores[Cod.Vendedor]

• Metas[Cod.Produto]Produtos[Cod.Produto]

• Metas[Cod.Unidade]Unidades[Cod.Unidade]
caioferreira2002@outlook.com

28 DATAB • TREINAMENTO POWER BI • MÓDULO 2

MEDIDAS E APLICAÇÃO VISUAL

Usando os conhecimentos já adquiridos no módulo 1, crie as seguintes medidas:

Soma Metas = SUM(Metas[Vl.Meta])

% Metas = IF([Soma Vendas] > 0 , [Soma Vendas] / [Soma Metas] - 1)

Dica: Para evitar que meses vazios apareçam com percentual ne-
gativo no gráfico, utilizamos a função condicional IF para calcular
o percentual apenas quando a medida [Soma Vendas] for maior
que zero.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 29

MEDIDAS E APLICAÇÃO VISUAL (EXERCÍCIO 1)

Com as medidas criadas, vamos inseri-las em dois visuais dos tipos gráfico de área e gráfico de
colunas clusterizado, conforme os esquemas abaixo:

VISUAL 1 – GRÁFICO DE ÁREA

Campos:

• Eixo: Calendario[Nome do Mês]

• Valores: [% Metas]

Formato:

• Eixo X: ativado na Cor: branca

• Eixo Y: desativado

• Cores dos dados: #744EC2

• Rótulo de dados: ativado, na Cor: branca, no Tamanho do texto: 8pt

• Formas

o Largura do traço: 4

o Mostrar marcador: ativado

o Tamanho do marcador: 6

o Cor do marcador: #C7B8E7

• Título: desativado

• Tela de fundo: desativado

VISUAL 2 – GRÁFICO DE COLUNAS CLUSTERIZADO


Campos:

• Eixo: Calendario[Nome do Mês]

• Valor: [Soma Vendas] e [Soma Metas]

Formato:

• Legenda: ativado na Posição: superior e Cor: branca

• Eixo X: ativado na Cor: branca

• Eixo Y: desativado

• Cores dos dados: Soma Vendas: #744EC2 e Soma Metas: # 9071CE


caioferreira2002@outlook.com

30 DATAB • TREINAMENTO POWER BI • MÓDULO 2

• Rótulo de dados: ativado, na Cor: branca, Ultrapassar texto: ativado e Tamanho


do texto: 8pt

• Título: desativado

• Tela de fundo: desativado

Resultado esperado dos gráficos e formatações:


caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 31

1.4 TABELA CALENDÁRIO

CALENDARIO DINÂMICO

No módulo 1 aprendemos a criar uma tabela calendário usando uma consulta em branco através do
código da linguagem M. Porém, a tabela criada é estática, pois digitamos exatamente as datas inicial
e final para gerar a tabela.

O grande problema dessa prática é que à medida que os dados da tabela Vendas forem sendo
atualizados, o período pode ficar defasado. O ideal é que consigamos buscar o período da tabela
Vendas para gerar a tabela calendário dinamicamente.

O código que utilizamos no módulo 1 para gerar a lista de datas da tabela calendário foi o seguinte:

let
DataInicial = #date(2016, 01, 01),
DataFinal = #date(2020, 12, 31),
QtdeDias = Duration.Days(DataFinal - DataInicial) + 1,
Lista = List.Dates(DataInicial, QtdeDias, #duration(1,0,0,0)),
in
Lista

Abra o Power Query Editor clicando em Página Inicial → Transformar Dados, em seguida selecione
a tabela Calendario, e depois clique em Página Inicial → Editor Avançado para visualizar o código
completo da tabela gerada.

O objetivo é buscar a menor e a maior data existente na coluna Data Pedido da tabela Vendas,
usando-as como valores para gerar a tabela calendário. Para isso vamos criar uma lista contendo
todas as datas na coluna Data Pedido e em seguida utilizar as funções List.Min e List.Max para
retornar o menor e o maior valor dessa lista, respectivamente.

Com a tabela Calendário aberta no editor avançado, vamos adicionar uma etapa para retornar a lista
de datas logo após a instrução let.

ListaDatas = List.Buffer(Vendas[Data Pedido]),


caioferreira2002@outlook.com

32 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Dica: Semelhante a função Table.Buffer que estudamos ante-


riormente, a função List.Buffer armazena uma lista na memória
evitando que ela sofra alterações externas durante a avaliação
dos cálculos.

Com a lista de datas criada, vamos utilizá-la para buscar o maior e menor valor da lista usando as
funções List.Min e List.Max. Altere os códigos das etapas DataInicial e DataFinal, de acordo
com o código a seguir:

DataInicial = List.Min(ListaDatas),
DataFinal = List.Max(ListaDatas),

Clique em Concluído para finalizar a edição do código. Agora a tabela Calendario é gerada
dinamicamente conforme a menor e maior data tabela Vendas.

É recomendável que a tabela calendário abranja períodos completos, evitando começar no meio
de um mês, ou até mesmo do ano. Garantir que os períodos estejam completos pode evitar que as
funções de inteligência temporal do DAX retornem valores incorretos.

Na base de dados atual, a primeira venda foi realizada no dia 25/06/2016, fazendo com que o
calendário se inicie no mesmo dia, e o ideal é que o data inicial do calendário fosse o primeiro dia do
ano – 01/01/2016. Podemos obter esse resultado usando uma função da linguagem M que retorna o
primeiro dia o ano de uma data – Date.StartOfYear.

Abra mais uma vez o editor avançado no menu página inicial, e altere a fórmula da etapa DataInicial.

DataInicial = Date.StartOfYear(List.Min(ListaDatas)),

De forma semelhante, podemos utilizar a função Date.EndOfYear para retornar o último dia do ano.

DataFinal = Date.EndOfYear(List.Max(ListaDatas)),

Com as alterações feitas é garantido que a tabela calendário sempre iniciar-se-á no primeiro dia do
ano e terminar-se-á no último dia do ano da menor e da maior data de vendas, respectivamente.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 33

Explore outras funções de manipulação de datas da linguagem M. Consulte a documentação oficial


no link https://docs.microsoft.com/pt-br/powerquery-m/date-functions para conhecer outras funções.

Segue uma lista de algumas funções da categoria Datas que podem ser muito úteis.

• Date.AddMonths – adiciona meses a uma data.

• Date.StartOfMonth – retorna o primeiro dia de um mês de uma data.

• Date.EndOfMonth – retorna o último dia de um mês de uma data.

• Date.IsInCurrentYear – retorna TRUE quando a data está no ano atual.

• Date.ToText – retorna uma data no formato no texto.

CALENDÁRIO FISCAL

Na grande maioria das empresas todo ano o alto escalão se reúne (ou pelo menos deveria fazer isso)
para analisar o que ocorreu no ano que se passou e planejar quais serão as metas para o ano seguinte
dentro de determinado prazo.

Esse prazo pode ser de janeiro a dezembro, abril a março ou até de julho a junho. A data inicial
em si não importa, sendo mais importante a sua duração. Esse prazo de um ano é conhecido na
contabilidade como ano fiscal.

No Power BI também é possível analisar e comparar dados através dos anos fiscais. Para isso,
devemos criar uma tabela específica de Calendário Fiscal que contemple os períodos desejados.

Primeiro, certifique-se que esteja no Power Query Editor. Caso já tenha fechado o editor, clique
em Página Inicial → Transformar Dados. Com o editor aberto, vamos criar uma nova consulta em
branco clicando em Página Inicial → Nova Fonte → Consulta Nula e renomeie a consulta para
CalendarioFiscal.

COLUNA DATA

Para a criação da tabela de calendário fiscal vamos utilizar o mesmo período que abrange a tabela de
calendário civil, que já temos no modelo. Então, para gerar a coluna de datas não é necessário repetir
todo o processo da primeira tabela. Vamos apenas utilizar uma função que selecione uma coluna que
já existe em outra tabela e traga para a consulta atual. Essa função é a Table.SelectColumns.

Com a consulta CalendarioFiscal selecionada vamos digitar a fórmula abaixo. Caso a barra de
fórmulas esteja desabilitada no seu editor, habilite-a em Exibição → Barra de Fórmulas.

= Table.SelectColumns(Calendario, “Data”)

Após digitar a fórmula e pressionar enter, o resultado deve ser uma coluna idêntica a coluna Data que
já temos na tabela calendário. O próximo passo agora é adicionar as novas colunas.
caioferreira2002@outlook.com

34 DATAB • TREINAMENTO POWER BI • MÓDULO 2

COLUNA DATA FISCAL

Como citado anteriormente, os períodos fiscais podem ser diferentes de uma empresa para outra.
Para o nosso exemplo, vamos tomar como definição que o ano fiscal começa no dia 01/07. Isso
significa que julho será o mês 1, agosto o mês 2 e assim por diante, criando uma defasagem de 6
meses em relação ao calendário civil.

Para facilitar a criação das colunas extras da nova tabela calendário, vamos criar uma coluna auxiliar
que retornará uma data equivalente da data civil para a data fiscal. Por exemplo: a data 1º de janeiro
(01/01) é equivalente ao 1º dia do sétimo mês (01/07) no calendário fiscal.

O que temos que fazer é subtrair 6 meses da data atual, para obter a nova data. E para isso vamos
utilizar a função Date.AddMonths adicionando uma coluna personalizada. Clique em Adicionar
Coluna → Coluna Personalizada e atribua o nome Data Fiscal à nova coluna, e digite a fórmula a
seguir:

= Date.AddMonths([Data], -6)

A função Date.AddMonths possui dois argumentos – o primeiro é a data à qual queremos adicionar
os meses, e o segundo é o número de meses que serão adicionados. O segundo argumento pode
receber um valor negativo quando se desejar subtrair meses da data.

Clique em OK para finalizar a adição da coluna.


caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 35

COLUNA ANO FISCAL

Como os anos fiscais não iniciam em janeiro e terminam em dezembro, normalmente eles têm uma
nomenclatura específica para identificar o ano que se iniciou e terminou o ciclo. Não existe uma regra
específica, e cada empresa pode adotar uma nomenclatura diferente. Para esse exemplo vamos
utilizar o padrão com os anos inicial e final separados por uma barra.

Por exemplo, a data 08/09/2017 faz parte do ano fiscal que se iniciou em 01/07/2017 e terminou em
30/06/2018. Por isso, falaremos que pertence ao ciclo 2017/2018. Já a data 03/02/2019 faz parte do
ano fiscal que se iniciou em 01/07/2018 e terminou em 30/06/2019. Desta maneira, falaremos que
pertence ao ciclo 2018/2019.

Com a regra definida, vamos criar uma coluna personalizada com o nome Ano Fiscal que retorne os
valores desejados. Clique em Adicionar Coluna → Coluna Personalizada.

= let
ano1 = Date.Year([Data Fiscal]),
ano2 = ano1 + 1,
anofiscal = Text.From(ano1) & “/” & Text.From(ano2)
in
anofiscal

Como podemos perceber é possível criar colunas personalizadas utilizando a estrutura let..in da
linguagem M. Essa semântica facilita a divisão de um cálculo em subetapas. A regra é criar cada
fórmula após a instrução let, separando-as por vírgulas, e para finalizar, após a instrução in retornar o
nome da etapa final que será o resultado do cálculo.

Vamos à explicação das linhas de código.

ano1 = Date.Year([Data Fiscal]),


caioferreira2002@outlook.com

36 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Na etapa ano1 utilizamos a função Date.Year para extrair apenas o valor numérico do ano da
coluna Data Fiscal.

ano2 = ano1 + 1,

Com o valor do ano inicial extraído, na etapa ano2 adicionamos 1 ao valor calculado anteriormente.

anofiscal = Text.From(ano1) & “/” & Text.From(ano2)

A etapa anofiscal é a junção dos valores ano1, uma barra e ano2 utilizando o operador de
concatenação (& comercial). É importante notar que para realizar a junção de textos, todos os
valores devem ser do tipo texto. Como os valores obtidos nas etapas ano1 e ano2 são numéricos, foi
utilizada a função Text.From para fazer a conversão para dos números para texto.

in
anofiscal

Por fim, após o bloco in definimos que o resultado retornado do cálculo será o obtido na etapa anofiscal.

COLUNA NOME DO MÊS

A próxima coluna que será adicionada é o nome do mês. Os nomes dos meses serão extraídos da
coluna Data e não da Data Fiscal, visto que os nomes dos meses não mudam em um ano fiscal,
apenas a sua ordenação.

Para isso, selecione a coluna Data e depois clique em Adicionar Coluna → Data → Mês → Nome
do Mês. Uma outra alternativa seria utilizar a função Date.MonthName adicionando uma coluna
personalizada.

= Date.MonthName([Data])
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 37

COLUNA MÊS

A coluna com o número do mês é útil para classificar os nomes dos meses nas visualizações no Power
BI. Porém, no calendário fiscal devemos fazer uma adaptação, tendo em vista que os meses iniciam a
contagem a partir do mês de julho (no caso do nosso exemplo).

Sendo assim, vamos utilizar a coluna Data Fiscal, que criamos anteriormente, para extrair o número do
mês. Selecione a coluna Data Fiscal e em seguida clique em Adicionar Coluna → Data → Mês → Mês.

De forma semelhante, outra alternativa seria utilizar a função Date.Month através de uma coluna
personalizada.

= Date.Month([Data Fiscal])
caioferreira2002@outlook.com

38 DATAB • TREINAMENTO POWER BI • MÓDULO 2

COLUNA TRIMESTRE

De forma semelhante aos meses, temos que levar em consideração que os trimestres também iniciam
a contagem a partir de julho ao adicionar a coluna trimestre. Sendo assim, mais uma vez vamos utilizar
a coluna Data Fiscal para extrair o número do trimestre. Selecione a coluna Data Fiscal e em seguida
clique em Adicionar Coluna → Data → Trimestre → Trimestre do Ano.

Se preferir, podemos adicionar a letra “T” antes do número do trimestre. Selecione a coluna Trimestre
que acabamos de criar e em seguida clique no menu Transformar → Formato → Adicionar Prefixo,
informe a letra “T” na caixa de texto exibida e clique em OK.

É possível também obter o mesmo resultado através da coluna personalizada com a seguinte fórmula:

= “T” & Text.From(Date.QuarterOfYear([Data Fiscal]))


caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 39

REMOVENDO A COLUNA DATA FISCAL E DETECTANDO TIPO DE DADOS

A coluna Data Fiscal foi criada para facilitar a adição dos cálculos do Ano Fiscal, Mês e Trimestre, mas
não é necessária no modelo final. Sendo assim vamos removê-la da tabela.

Clique com o botão direito sobre o nome da coluna Data Fiscal no cabeçalho da tabela e clique na
opção Remover.

Não podemos esquecer de determinar o tipo de dado das colunas. Selecione todas as colunas e
clique em Transformar → Detectar Tipo de Dados.

Pronto, a tabela CalendarioFiscal está finalizada. Para carregá-la no Power BI clique em Página
Inicial → Fechar e Aplicar.

RELACIONANDO AS TABELAS CALENDÁRIOS


caioferreira2002@outlook.com

40 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Com a nova tabela CalendarioFiscal adicionada ao modelo, precisamos relacioná-la com as demais.
Se analisarmos os relacionamentos da tabela Calendario, é possível perceber que esta possui
relacionamento diretos com as tabelas fatos Metas e Vendas.

Uma saída seria criar os mesmos relacionamentos entre as tabelas fatos e a tabela CalendarioFiscal.
Nesta situação, dois novos relacionamentos seriam adicionados ao modelo, um para cada tabela fato.

Porém há uma alternativa melhor. A tabela CalendarioFiscal é uma extensão da tabela Calendario,
pois possuem as mesmas chaves primárias. Para cada valor em uma tabela, temos uma linha
correspondendo na outra tabela com a mesma chave. Isso nos permite faze um relacionamento direto
entre as tabelas calendários através das suas chaves primárias. Crie a relação, arrastando o campo
Data da tabela CalendarioFiscal para cima do campo Data da tabela Calendario.

Uma relação um para um será criada com direção bidirecional. Isso permitirá que sempre que a tabela
CalendarioFiscal sofrer um filtro, o filtro se propague para a tabela Calendário e na sequência se
propague para todas as tabelas Fatos relacionadas à essa tabela.

A relação bidirecional também garantirá que todos os filtros aplicados na tabela Calendario se
propaguem para a tabela CalendarioFiscal e vice-versa.

Nesta situação não há problema em utilizar a relação bidirecional pois as tabelas possuem relação
direta através das suas chaves primárias.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 41

MEDIDAS E APLICAÇÃO VISUAL (EXERCÍCIO 2)

Usando os conhecimentos já adquiridos anteriormente, insira e formate os gráficos a seguir:

VISUAL 1 – GRÁFICO DE COLUNAS CLUSTERIZADO


Campos:

• Eixo: CalendarioFiscal[Ano Fiscal], Calendário[Ano] e Calendario[Nome do Mês]

• Valor: [Soma Vendas]

Formato:

• Eixo X: ativado, na Cor: branca, com Concatenar rótulos: desativado, com Título:
desativado e Linhas de grade: ativado

• Eixo Y: ativado, na Cor: branca, com Linhas de grade: ativado

• Cores dos dados: #744EC2

• Rótulo de dados: desativado

• Título: desativado

• Tela de fundo: desativado

VISUAL 2 – MATRIZ
Campos:

• Linhas: Calendario[Ano] e Calendario[Nome do Mês]

• Valores: [Soma Vendas], [Soma Metas], [% Meta] e [Qtde Clientes]

Formato:

• Grade, na Cor da estrutura de tópicos: #6B007B e Linhas de grade: ativado

• Cabeçalhos da coluna na Cor da fonte: branca e Cor da tela de fundo: #230948

• Cabeçalhos da linha, na Cor da fonte: #230948, e Cor da tela de fundo: branca,


com Ícones +/-: ativado, Cor do ícone: #230948 e Tamanho do ícone: 9pt

• Valores, na Cor da tela de fundo: branca, Alternar cor da tela de fundo:


#DCD5E6 e Estilo de linha em tiras: ativado

• Subtotais, com Cor da fonte: #230948 e Tamanho do texto: 10pt

• Total Geral, com Cor da fonte: #230948 e Tamanho do texto: 10pt


caioferreira2002@outlook.com

42 DATAB • TREINAMENTO POWER BI • MÓDULO 2

• Título: desativado

• Tela de fundo: desativado

VISUAL 3 – MATRIZ
Campos:

• Linhas: CalendarioFiscal[Ano Fiscal] e CalendarioFiscal[Nome do Mês]

• Valores: [Soma Vendas], [Soma Metas], [% Meta] e [Qtde Clientes]

Formato:

• Grade, com Cor da estrutura de tópicos: #6B007B e Linhas de grade: ativado

• Cabeçalhos da coluna, com Cor da fonte: branca e Cor da tela de fundo: #230948

• Cabeçalhos da linha, com Cor da fonte: #230948, Cor da tela de fundo: branca,
Ícones +/-: ativado, Cor do ícone: #230948 e Tamanho do ícone: 9pt

• Valores, com Cor da tela de fundo: branca, Alternar cor da tela de fundo:
#DCD5E6 e Estilo de linha em tiras: ativado

• Subtotais com Cor da fonte: #230948

• Total Geral com Cor da fonte: #230948

• Título: desativado

• Tela de fundo: desativado

Resultado esperado:
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 43

1.5  BUSCANDO COTAÇÃO DO DÓLAR VIA API

API – em inglês, Application Programming Interface – é uma forma de integrar sistemas e funcionam
como uma espécie de “ponte” que conectam diferentes aplicações, podendo ser utilizadas para
os mais variados tipos de negócio e em diferentes interfaces. Uma das interfaces das APIs são as
consultas de dados oferecidos por outras aplicações.

No nosso exemplo, vamos utilizar uma API pública oferecida pelo Banco Central do Brasil (BCB)
para consultar as cotações históricas do dólar, para aplicá-las na conversão dos valores de vendas no
nosso modelo. Cada API possui as suas particularidades e normalmente oferece uma documentação
completa sobre o seu uso, detalhando parâmetros, resultados e suas limitações.

A API que iremos utilizar possui uma interface web que está disponível no link https://olinda.bcb.
gov.br/olinda/servico/PTAX/versao/v1/aplicacao#!/recursos/CotacaoDolarPeriodo, onde é possível
simular uma consulta e copiar a URL que retornará os dados para os parâmetros simulados. Será essa
URL que iremos utilizar para conectar aos dados no Power BI.

Informe o período entre janeiro/2016 a dezembro/2020 (no formato MM-DD-AAAA), e clique no


botão Copiar URL.
caioferreira2002@outlook.com

44 DATAB • TREINAMENTO POWER BI • MÓDULO 2

De volta ao Power BI, vamos utilizar o conector Web para trazer as informações fornecidos pela API.
Clique em Página Inicial → Obter Dados → Web, cole a URL que copiou do site da API na caixa de
texto e clique em OK.

O Power Query Editor será aberto e uma nova consulta será criada. Renomeie a consulta para
CotacaoDolar.

O resultado obtido da consulta à API foi um registro conteúdo duas informações – @data.context e
value. O primeiro valor é apenas a URL que utilizamos para conectar, enquanto a segunda informação
é uma lista de valores, que é justamente o que estamos procurando. Clique sobre o link com a palavra
List para obter os dados da lista.

Agora podemos visualizar uma lista contendo vários registros. Cada registro desse é a cotação de
uma data. Para visualizar o conteúdo do registro, clique na parte em branco ao lado da palavra
Record (não clique em cima da palavre record).
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 45

Para expandir todos os registros, precisamos converter a lista em uma tabela. No faixa de opções
clique em Ferramentas de Lista  Transformar  Para a Tabela, e em seguida clique em OK já
caixa de diálogo que será exibida.

Com a lista convertida em tabela, é possível expandir todas as colunas dos registros. Clique no
ícone com duas setas no cabeçalho da coluna e selecione todas as colunas que deseja expandir.
Desmarque a opção para usar o nome da coluna original como prefixo e clique em Ok.

Agora temos uma tabela com as cotações de compra e venda do dólar, além da data e hora da
cotação. Próximo passo é classificar os tipos de dados das colunas. Vamos começar pela coluna
dataHoraCotacao.
caioferreira2002@outlook.com

46 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Precisamos apenas da referência da data de cotação, então vamos tentar converter os dados da
coluna para o tipo Data. Clique no ícone ABC123 ao lado no nome da coluna e escolha o tipo Data.

A resultado da operação foi vários erros gerados. Isso ocorreu pois o Power Query não conseguiu
converter os valores que estão no formato de data/hora diretamente para data. Para corrigir essa situação,
primeiro teremos que fazer a conversão para data/hora e em seguida fazer a conversão para data.

Clique no novamente no ícone do formato e escolha a opção Data/Hora. Perceba que como há
havíamos feito uma alteração de tipo nesta coluna imediatamente anterior a essa alteração, o
Power Query nos solicita se desejamos apenas substituir a alteração atual, ou criar uma nova etapa
mantendo a alteração anterior, e em seguida fazendo uma nova transformação.

Clique em Substituir Atual para substituir a alteração anterior por essa nova alteração que estamos
solicitando.

Com o tipo da coluna definido como data/hora, vamos alterar o tipo novamente definindo agora
como data. Novamente será perguntado se desejamos substituir a alteração anterior. Agora vamos
alterar o tipo mantendo a alteração anterior. Clique em Adicionar nova etapa.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 47

Para finalizar, defina os tipos de dados das colunas cotacaoCompra e cotacaoVenda para número decimal.

ANALISANDO OS PARÂMETROS DA API

Na barra de fórmulas é possível perceber que o resultado da tabela retornou apenas 100 linhas,
quando era esperando todas as cotações entre janeiro/2016 e dezembro/2020.

Isso ocorreu devido a um parâmetro de limitação de linhas que passamos juntamente da URL ao
conectarmos à API. Vamos da ruma analisada na URL que conectamos.

https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/CotacaoDolar-
Periodo(dataInicial=@dataInicial,dataFinalCotacao=@dataFinalCotacao)?@da-
taInicial=’01-01-2016’&@dataFinalCotacao=’12-31-2020’&$top=100&$format=json

Nota-se que os parâmetros de consulta foram informados na própria URL da conexão – dataInicial,
dataFinalCotacao, top e format. E foi justamente o parâmetro top que limitou a quantidade total de
registros retornados pela API. Você pode remover esse parâmetro da URL para que não haja limitação
de linhas no resultado.
caioferreira2002@outlook.com

48 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Para alterar a URL de conexão, clique na engrenagem da etapa Fonte.

Agora remova a parte &$top=100 (destacada na imagem) da URL. Essa deve ser a URL final:

https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/CotacaoDo-
larPeriodo(dataInicial=@dataInicial,dataFinalCotacao=@dataFinalCotacao)?@
dataInicial=’01-01-2016’&@dataFinalCotacao=’12-31-2020’&$format=json

Clique em OK para aplicar a mudança. Selecione a última etapa da consulta para visualizar o
resultado. Agora é possível notar que o resultado retornou mais de 999 linhas, como esperado.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 49

MESCLANDO COM A TABELA CALENDÁRIO

Como a informação que estamos importando está diretamente ligada ao calendário, não é necessário
importar mais uma tabela o Power BI. Podemos atrelar a cotação do dólar de cada data, com as datas
da tabela calendário evitando mais uma relação e mais uma tabela no modelo. Isso também nos
permitirá replicar as cotações do último dia útil para as datas que não existe cotação. Vamos utilizar
um recurso que já aprendemos para fazer isso – Mesclar Consultas.

Primeiro selecione a tabela Calendario no painel de consultas, e depois clique em Página Inicial →
Mesclar Consultas. Selecione a tabela CotacaoDolar para mesclar, e em seguida indique as colunas
Data e dataHoraCotacao como chave entre as tabelas. Mantenha o tipo de junção como externa
esquerda. Por último, clique em OK.

Com as tabelas mescladas, vamos expandir as informações que desejamos obter. Clique nas duas
setas próximo ao cabeçalho da coluna gerada e escolha os campos cotacaoCompra e cotacaoVenda.
Lembre-se também de desmarcar a opção para usar o nome da coluna original como prefixo.
caioferreira2002@outlook.com

50 DATAB • TREINAMENTO POWER BI • MÓDULO 2

DIAS ÚTEIS, FINAIS DE SEMANA E FERIADOS

Os dados de cotação do dólar somente possuem informação para os dias úteis. Isso fará com que algumas
linhas fiquem com o valor null, indicando que existe uma cotação nula (ou vazia) para aquela data.

Se precisar separar os dias úteis e não úteis na tabela calendário, uma boa estratégia seria criar uma
coluna condicional usando a informação/falta de informação para identificar os dias úteis e não úteis.
Porém, neste exemplo, por definição de negócio, vamos replicar a cotação do dia útil anterior para os
dias não úteis subsequentes.

Perceba que com a expansão das colunas de cotação, a ordem cronológica das linhas na tabela pode
ter sofrido alteração. Para garantir que vamos replicar as informações corretamente, primeiro vamos
classificar as datas em ordem crescente. Selecione a coluna Data, e em seguida cliquem Página
Inicial → Classificar em Ordem Crescente.

Para replicar as cotações para as células vazias abaixo, selecione as colunas cotacaoCompra e
cotacaoVenda e clique em Transformar → Preenchimento → Para Baixo.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 51

Antes de carregarmos as alterações para o Power BI, precisamos desabilitar a carga da tabela
CotacaoDolar, visto que as informações já estão replicadas na tabela Calendario. Clique com o
botão direto na tabela CotacaoDolar e desmarque a opção Habilitar Carga. Por fim clique em Página
Inicial → Fechar e Aplicar.

MEDIDAS E APLICAÇÃO VISUAL (EXERCÍCIO 3)

Usando os conhecimentos já adquiridos anteriormente, crie a seguintes medidas:

Soma Vendas USD =


SUMX(
Vendas,
Vendas[Qtde]*Vendas[Vl.Unitario]/RELATED(Calendario[cotacaoVenda])
)

Dica 1:
A função RELATED retorna um valor relacionado de outra
tabela.

USD Compra =
AVERAGEX(
Calendario,
IF(Calendario[Data] <= TODAY(), Calendario[cotacaoCompra])
)

Dica 2:
A função AVERAGEX é utilizada para calcular a cotação de
compra média do período. A condicional IF limita a cotação
apenas até a data do dia atual, retornando vazios para datas
futuras.
caioferreira2002@outlook.com

52 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Com as medidas criadas, vamos criar e formatar os gráficos a seguir:

VISUAL 1 – GRÁFICO DE ÁREA


Campos:

• Eixo: Calendario[Data]

• Valores: [USD Compra]

Formato:

• Eixo X: ativado, na Cor: branca e Linhas de grade: ativado

• Eixo Y: ativado, na Cor: branca e Linhas de grade: ativado

• Cores dos dados: #744EC2

• Rótulo de dados: desativado

• Formas com Largura do traço: 1

• Título: desativado

• Tela de fundo: desativado

VISUAL 2 – GRÁFICO DE ÁREA


Campos:

• Eixo: Calendario[Ano] e Calendario[Nome do Mês]

• Valores: [Soma Vendas] e [Soma Vendas USD]

Formato:

• Eixo X: ativado, na Cor: branca e Linhas de grade: ativado

• Eixo Y: ativado, na Cor: branca e Linhas de grade: ativado

• Cores dos dados:

o Soma Vendas: # 9071CE

o Soma Vendas USD: #E044A7

• Rótulo de dados: desativado

• Formas com Largura do traço: 1

• Título: desativado

• Tela de fundo: desativado


caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 53

O resultado esperado das configurações anteriores é esse:


caioferreira2002@outlook.com

CAPÍTULO

Capítulo 3: E X PLO R A N D O
LINGUAGEM DAX
3 A

EXPLORANDO
A LINGUAGEM
DAX

A linguagem DAX por ser uma linguagem de expressões faz com que muitos usuários vejam semelhanças
com as fórmulas e funções do Excel. Porém, pelo modelo de dados do Power BI ser um modelo tabular,
a linguagem DAX funciona através de contextos. Entender e aplicar esses contextos corretamente faz
total diferença ao criar métricas e analisar dados no Power BI.

O objetivo desse capítulo é explorar e entender com uma maior profundidade a linguagem DAX e os
seus contextos. Vamos utilizar o arquivo m2-parte2.pbix que você recebeu junto com os arquivos do
curso. Esse é praticamente o mesmo modelo de dados que fomos construindo desde o módulo 1.

3.1 CONTEXTO DE LINHA VERSUS CONTEXTO DE FILTRO


A maior diferença entre cálculos realizados em colunas calculadas ou em medidas é o contexto
aplicado. As medidas utilizam o contexto de filtro, e por isso, por padrão, são influenciadas por
qualquer filtro que seja aplicado ao modelo. Já as colunas calculadas utilizam o contexto de linhas e
não sofrem influência de nenhum filtro, exceto da própria linha.

Para vermos essa aplicação na prática vamos criar o mesmo cálculo duas vezes, sendo o primeiro
aplicado como medida e segundo como uma coluna calculada em uma tabela.

Nosso objetivo é classificar os vendedores em quatro classes diferentes de acordo com o volume de
vendas realizado conforme as regras a seguir:

• Para vendas até 100.000 o resultado será “Classe D”

• Para vendas até 1.000.000 o resultado será “Classe C”

• Para vendas até 10.000.000 o resultado será “Classe B”

• Para vendas acima de 10.000.000 o resultado será “Classe A”

• Vendedores que não realizaram vendas ainda serão classificados como “Novato”
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 55

Vamos começar criando uma coluna na tabela Vendedores. Clique no botão Dados e selecione a
tabela Vendedores. Em seguida clique em Ferramentas de Tabela → Nova Coluna.

A barra de fórmulas será exibida para que possamos digitar a fórmula.

É possível utilizar tanto a função IF quanto a função SWITCH para criação das condicionais. Com a
função IF será necessária uma expressão para cada condição. Para cada teste lógico informamos um
valor a ser retornado caso o teste lógico seja verdadeiro. A fórmula usando a função IF fica assim:

Classe =
IF([Soma Vendas] > 10000000 ; “Classe A” ;
IF([Soma Vendas] > 1000000 ; “Classe B” ;
IF([Soma Vendas] > 100000 ; “Classe C” ;
IF([Soma Vendas] > 0 ; “Classe D” ;
“Novato”))))

Com a função SWITCH no argumento expressão passamos um valor que desejamos obter, e em
seguida pares de valores e resultados. Quando a expressão for encontrada no valor, o resultado
correspondente será retornado.

A diferença entre as duas funções é que ao utilizar SWITCH é possível colocar todas as condições
dentro de uma única função. Sua aplicação consiste em passar um valor na expressão e expressões
que podem resultar esse valor com suas respostas correspondentes.
caioferreira2002@outlook.com

56 DATAB • TREINAMENTO POWER BI • MÓDULO 2

A aplicação da fórmula usando a função SWITCH fica assim:

Classe =
SWITCH(
TRUE(),
[Soma Vendas] > 10000000 , “Classe A” ,
[Soma Vendas] > 1000000 , “Classe B” ,
[Soma Vendas] > 100000 , “Classe C” ,
[Soma Vendas] > 0 , “Classe D” ,
“Novato”
)

Informamos que desejamos obter a resposta para quando a expressão retornar verdadeiro – TRUE().
Em seguida informamos pares de argumentos com testes lógicos e as respostas que serão retornadas
quando o teste lógico retornar verdadeiro.

Como a fórmula está sendo criada em uma coluna, o contexto de linha é aplicado. Para avaliar a
expressão o Power BI calcula o valor da medida [Soma Vendas] para cada linha da tabela e então
compara com os valores. Tanto na função IF quanto na função SWITCH, o motor de cálculo DAX para
de avaliar as expressões seguintes quando encontra um valor verdadeiro.

Por isso para criar as faixas de intervalos é necessário testar apenas os limites superiores de cada
faixa, iniciando-se da maior até a menor faixa. O último valor especificado será sempre a exceção, ou
seja, quando todas as expressões testadas forem falsas, será retornado o último valor.

Com a coluna criada, vamos criar agora uma medida com a mesma fórmula. Selecione a tabela
medidas, e clique em Ferramentas da tabela → Nova medida.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 57

Na barra de fórmulas que será exibida, digite a mesma fórmula usada para criar a coluna.

Classe =
SWITCH(
TRUE(),
[Soma Vendas] > 10000000 , “Classe A” ,
[Soma Vendas] > 1000000 , “Classe B” ,
[Soma Vendas] > 100000 , “Classe C” ,
[Soma Vendas] > 0 , “Classe D” ,
“Novato”
)

Com a coluna e a medida criadas, insira-as em um visual de tabela.


caioferreira2002@outlook.com

58 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Dica: Não é possível criar várias medidas com o mesmo nome,


mas é possível ter uma medida e uma coluna com o mesmo
nome desde que estejam armazenadas em tabelas diferentes

Perceba que tanto a medida quanto a coluna retornaram os mesmos valores ao serem inseridas no
visual. Isso aconteceu pois não há nenhum filtro aplicado ao relatório. Para visualizarmos a diferença
de aplicação dos filtros é necessário aplicar pelo menos um filtro.

Sendo assim, vamos aplicar um filtro no campo data. Utilizando a segmentação de dados disponível,
selecione o período de 01/01/2018 a 31/12/2019.

Os valores serão recalculados para o novo filtro especificado.

Agora é possível notar que há diferença retornada através da medida e da coluna calculada. Ao
avaliar a expressão [Soma Vendas] para fazer a comparação a medida levou em consideração os
filtros aplicados. Por isso, o vendedor Lucas Carvalho que antes era um vendedor “Classe A”, no
período selecionado realizou 6.782.825,13 em vendas, colocando-o como um vendedor “Classe B” no
período. Como o cálculo realizado na coluna não é influenciado pelo filtro, o valor de [Soma Vendas]
utilizado na avaliação da expressão é o valor total de 13.386.479,40 (antes do filtro ser aplicado),
colocando-o como um vendedor “Classe A”.

Entender essa diferença de avaliação é muito importante, pois em várias situações serão necessárias a
aplicação de cálculos tanto no contexto de linha – utilizando funções iterantes, por exemplo – quanto
no contexto de filtro, utilizando funções agregadoras.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 59

HORA DE PRATICAR 1 (DAX)

A) Criar a medida [Freq. Cliente] usando a função SWITCH, de acordo com os seguintes abaixo e insira
no visual ao lado:

• [Qtde Pedidos] até 10 o resultado deverá ser “Baixa”

• [Qtde Pedidos] até 40 o resultado deverá ser “Média”

• [Qtde Pedidos] acima de 40 o resultado deverá ser “Alta”

B) Em um visual de matriz, insira a medida e os campos conforme esquema a seguir

3.2  MÚLTIPLOS RELACIONAMENTOS E RELAÇÕES INATIVAS


Uma necessidade comum ao trabalhar com análise de dados é comparar valores por diferentes
campos em uma tabela que utilizam a mesma tabela dimensão relacionada. Por padrão, a linguagem
DAX utiliza a relação ativa para propagar os filtros e para avaliar suas expressões. Porém, quando
existe a necessidade de relacionar dois ou mais campos entre duas tabelas, somente uma dos
relacionamentos será definido como ativo, e os demais como inativos.

Outra situação que pode impedir que uma relação entre duas tabelas seja definida como ativa é a
existência de um caminho ambíguo para propagação dos filtros. E para proteger o funcionamento
correto do painel, o Power BI evita que sejam definidos mais de um relacionamento ou caminho
ativos entre duas tabelas.

Mas existe uma solução para essa situação. É possível ativar um relacionamento inativo utilizando
uma função específica – a USERELATIONSHIP – apontando as colunas das extremidades do
relacionamento.

Para esse primeiro exercício vamos calcular a quantidade de admissões e demissões de vendedores
ao longo do tempo. Para isso vamos utilizar as colunas Data.Admissao e Data.Demissao presentes na
tabela Vendedores.
caioferreira2002@outlook.com

60 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Primeiro devemos criar a relação entre as tabelas Vendedores e Calendario, já que a função
USERELATIONSHIP ativa apenas relacionamentos existentes. Vamos começar pelo campo
Vendedores[Data.Admissao] arrastando-o para sobre o campo Calendario[Data].

Perceba que mesmo não existindo uma relação entre as tabelas Calendario e Vendedores,
automaticamente o Power BI definiu a relação que criamos como inativa, representada pela linha
pontilhada. Isso ocorreu devido a uma possível ambiguidade que seria criada no modelo no caminho
entre as tabelas Calendario e Vendas. Se analisarmos os relacionamentos e suas direções, seria
possível percorrer o caminho entre as tabelas Calendario e Vendas por dois caminhos diferentes. Um
primeiro passando pela tabela Vendedores, e um segundo mais curto saindo da tabela Calendario e
indo diretamente até a tabela Vendas.

A alternativa será ativar o relacionamento via linguagem DAX.

Insira uma nova medida com a fórmula DAX a seguir:

Admissões =
CALCULATE(
COUNTROWS(Vendedores),
USERELATIONSHIP(Calendario[Data],Vendedores[Data.Admissao])
)

A função CALCULATE é utilizada sempre que necessitamos alterar o contexto de um cálculo. Como
por padrão a linguagem DAX utiliza os relacionamentos ativos para avaliar uma expressão, será
necessário alterar o contexto através da função CALCULATE.

O primeiro argumento da função CALCULATE é a expressão. Em outras palavras é o cálculo que


desejamos fazer. Para isso utilizamos a função COUNTROWS que retornará a quantidade de linhas na
tabela especificada, que neste caso é a tabela Vendedores.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 61

Com a expressão a ser calculada especificada, vamos definir o segundo argumento da função
CALCULATE que é o novo contexto da expressão. Para ativar um relacionamento inativo é utilizado
a função USERELATIONSHIP apontando as duas colunas que compõe o relacionamento. Importante
lembrar que para que a função USERELATIONSHIP funcione, a relação inativa deve existir no modelo.

Vamos repetir o mesmo processo para calcular a quantidade de vendedores demitidos. Primeiro crie a
relação entre as colunas Calendario[Data] e Vendedores[Data.Demissao].

E em seguida crie uma nova medida para calcular as demissões:

Demissões =
CALCULATE(
COUNTROWS(Vendedores),
USERELATIONSHIP(Calendario[Data],Vendedores[Data.Demissao])
)

Para visualizar os valores das medidas criadas, vamos inserir um gráfico de colunas clusterizado com o
esquema de campos a seguir:

• Eixo: Calendario[Ano]

• Valor: [Admissões] e [Demissões]


caioferreira2002@outlook.com

62 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Utilize os conhecimentos já adquiridos para alterar as formatações do gráfico:

HORA DE PRATICAR 2 (DAX)

A) Criar o relacionamento entre os campos Calendario[Data] e Vendas[Data.Faturamento]

B) Criar a medida [Soma Faturamento] para calcular a soma de vendas pela Data.Faturamento

C) Em um visual de matriz, insira as medidas e campos conforme esquema a seguir:


caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 63

3.3 CRIANDO TABELAS VIRTUAIS


Muitas funções da linguagem DAX retornam uma tabela de valores. Apesar de essas tabelas não
serem úteis para inserir valores diretamente em um visual, com elas podemos criar tabelas virtuais que
podem ser utilizadas aninhadas com outras funções onde é solicitada uma tabela como argumento.

Uma dessa funções é a VALUES, que gera uma tabela com valores distintos a partir de uma coluna ou
tabela especificada.

Para entender melhor o funcionamento da função VALUES e das tabelas virtuais vamos criar a medida
a seguir:

Qtde Pedidos VALUES = VALUES(Vendas[Pedido])

Ao tentar inserir a medida criada em um visual obteremos um erro.

O erro ocorre pois os visuais aceitam apenas medidas que podem ter os seus resultados agregados,
diferente do que é fornecido pela função VALUES que é uma lista de valores. Se clicar no link Ver
detalhes será exibida uma mensagem explicativa sobre o erro.

A medida criada irá gerar uma tabela com os números de cada pedido (sem repetição). Podemos
então utilizar a função COUNTROWS para contar as linhas da tabela virtual gerada pela função VALUES
e obter a quantidade de pedidos. Vamos alterar a medida criada anteriormente.

Qtde Pedidos VALUES = COUNTROWS(VALUES(Vendas[Pedido]))


caioferreira2002@outlook.com

64 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Perceba que a função VALUES foi utilizada dentro de uma função onde o seu argumento pede uma tabela.

A contagem de linhas fará que o resultado da medida criada seja sempre uma agregação – a
contagem de pedidos únicos da tabela Vendas. O cálculo que criamos é uma variação do mesmo
cálculo que pode ser obtido utilizando a função DISTINCTCOUNT.

Qtde Pedidos = DISTINCTCOUNT(Vendas[Pedido])

Vamos comparar o valor das duas medidas utilizando o visual de matriz.


caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 65

3.4  FUNÇÕES ITERANTES E TABELAS VIRTUAIS


O exemplo aplicado anteriormente foi apenas didático já que o mesmo resultado poderia ser obtido
diretamente com a função DISTINCTCOUNT. Vamos ver uma aplicação mais prática para calcular a
Média Mensal de Vendas.

Vamos imaginar a tabela hipotética Vendas a seguir:

Calculando a média da coluna Vl.Total o resultado seria ponderado pelo número total de linhas de
vendas, obtendo o valor 30 como resultado da média de cada venda. Se o objetivo é calcular o valor
da Média Mensal de Vendas é necessário primeiro calcular a soma de vendas para cada um dos
meses, e somente depois obter a média.

A função AVERAGEX será responsável por executar exatamente esse cálculo.

No primeiro argumento informamos a tabela com a lista de meses que é gerada usando a função
VALUES, e no segundo argumento solicitamos que para cada linha dessa tabela seja calculada a
[Soma Vendas]. Por fim a função AVERAGEX efetua a média dos valores calculados.

Para obtermos o valor médio mensal de vendas crie a medida a seguir:

Média Mensal Vendas =


AVERAGEX(
VALUES(Calendario[Ano e Mês]),
[Soma Vendas]
)
caioferreira2002@outlook.com

66 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Para visualizar os valores para a medida criada, vamos criar um gráfico de colunas clusterizado com
o esquema de campos e formatação como indicados:

• Campos

o Eixo: Calendario[Ano]

o Valor: [Média Mensal Vendas]

• Formatação

o Eixo Y: desativado

o Rótulo de dados: ativado

As tabelas virtuais são importantes em diversos cálculos onde precisamos gerar análises em que os
contextos são diferentes dos apresentados no visual ou nas tabelas físicas do modelo. Além da função
VALUES, existem diversas outras funções que são capazes de gerar tabelas. Exemplos de funções que
retornam tabelas podemos citar a FILTER, DATESBETWEEN, DATESINPERIOD, SUMMARIZECOLUMNS,
TOPN dentre outras. Algumas dessas funções ainda serão abordadas neste treinamento.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 67

HORA DE PRATICAR 3 (DAX)

Considerando os conhecimentos acumulados dos módulos 1 e 2, e sabendo que um mesmo pedido


pode conter mais de um produto diferente, podendo então existir várias linhas na tabela Vendas
referente ao mesmo pedido, faça o que se pede:

A) Criar uma medida para calcular o Ticket Médio (valor médio de um pedido).

B) Criar uma medida para calcular o Maior Ticket (maior valor de um pedido).

C) Inserir as medidas criadas em uma matriz conforme o esquema especificado a seguir:

3.5  FILTRANDO TABELAS VIA DAX


Vimos que a função CALCULATE é muito importante na linguagem DAX pois permite que alterar o
contexto de avaliação de uma expressão. Através dos argumentos de filtros da função CALCULATE é
possível determinar quais filtros devem ser aplicados durante o cálculo.

Vamos criar a medida a seguir para calcular as vendas da categoria de produtos “Manteiga”.

Vendas Manteiga A =
CALCULATE([Soma Vendas],Produtos[Categoria]=“Manteiga”)

No primeiro argumento da função CALCULATE especificamos o cálculo que desejamos realizar,


que neste caso foi a [Soma Vendas]. No segundo argumento explicitamos um filtro a ser aplicado,
informando que desejamos que a coluna Categoria da tabela Produtos seja igual a “Manteiga”.

Isso fará com que o resultado da medida [Soma Vendas Manteiga A] retorne apenas as vendas da
categoria Manteiga, ignorando qualquer outra categoria de produtos.

Vamos inserir a medida [Soma Vendas Manteiga A] em visual de matriz, juntamente com a medida
[Soma Vendas] e distribuir os valores pelas Categorias de produtos.
caioferreira2002@outlook.com

68 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Quando definimos um filtro diretamente no argumento da função CALCULATE, a expressão será


avaliada forçando que o contexto seja sempre o mesmo informado. Isso fará com que todos os
contextos de categorias sejam considerados o mesmo do argumento especificado.

Outra forma de filtrar valores na linguagem DAX é utilizando a função FILTER.

Através da função FILTER é possível especificar uma tabela do modelo de dados e uma expressão
de filtro que será avaliada para cada linha da tabela. Apenas o que for considerado verdadeiro será
considerado na avaliação da expressão.

Vamos calcular novamente a soma de vendas da categoria manteiga utilizando a função CALCULATE e
FILTER, juntas.
Crie uma medida com a fórmula a seguir:

Vendas Manteiga B =
CALCULATE(
[Soma Vendas],
FILTER(
Produtos,
Produtos[Categoria] = “Manteiga”
)
)

O primeiro argumento da função FILTER pede uma tabela. Como queremos filtrar apenas os
produtos da categoria “Manteiga” devemos informar a tabela Produtos. O segundo argumento da
função é a expressão de filtro. Neste argumento devemos informar uma expressão lógica que será
avaliada para cada linha da tabela informada retornando VERDADEIRO (true) ou FALSO (false). Apenas
as linhas com resultado verdadeiro serão retornadas na tabela filtrada.

Acrescente a medida [Vendas Manteiga B] no visual criado no passo anterior e vamos comparar os
resultados.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 69

Perceba que com a utilização da função FILTER, o contexto não foi forçado como quando utilizamos
o filtro diretamente na função CALCULATE. Isso ocorre, pois, a função FILTER apenas filtra os valores
já obtidos dentro do contexto atual. Dessa maneira apenas no contexto da categoria “Manteiga” e
no contexto “Total” retornam alguma linha na tabela filtrada. Nos demais contextos o filtro retorna
uma tabela vazia, e por isso o resultado da [Soma Vendas] também é vazio.

Outra característica importante da função FILTER é que ela permite, além das colunas, utilizar
também uma medida como composição de um argumento de filtro, enquanto diretamente na função
CALCULATE somente é possível utilizar colunas.
Imagine a seguinte situação: precisamos obter a [Soma Vendas] apenas dos clientes que tenham mais
de 75 mil reais em vendas. Vamos utilizar a função FILTER para retornar uma tabela que atenda o
critério especificado juntamente com a função CALCULATE para retornar o valor da [Soma Vendas].

Vamos criar a medida com a fórmula a seguir:

Vendas Clientes>75k =
CALCULATE(
[Soma Vendas],
FILTER(
Clientes,
[Soma Vendas] > 75000
)
)

Agora, para analisarmos os resultados, vamos inserir a medida [Vendas Clientes>75k] em visual de
matriz e distribuir os valores pelas pelos anos.
caioferreira2002@outlook.com

70 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Analisando os resultados, em um primeiro momento pode parecer que existe alguma inconsistência
no cálculo visto que o resultado é pouco mais de 93 milhões, enquanto nenhum dos valores anuais
é maior do que 7 milhões. Porém os resultados estão corretos, pois estão sendo levados em
consideração os contextos em que estão sendo calculados.

Para entender melhor o funcionamento da medida criada, imagine a o conjunto de dados hipotético
a seguir:

Quando utilizamos a função FILTER na tabela Vendedor com a expressão de filtro determinada como
[Soma Vendas] > 75000, apenas as linhas em que essa expressão for verdadeira será utilizada para
calcular o valor de [Soma Vendas] estipulado na função CALCULATE.

Em resumo, a linguagem DAX irá calcular a [Soma Vendas] para cada vendedor, para verificar se deve
incluí-lo na [Soma Vendas] final, conforme os critérios.

Ao inserir a medida em um visual que está dimensionado por ano, o cálculo será realizado para cada
um dos contextos de anos.

Utilizando os dados hipotéticos da tabela acima, primeiro vamos calcular a [Soma Vendas] apenas no
ano 2016, filtrando a tabela Clientes onde a [Soma Vendas] > 75000.

No contexto do ano 2016, podemos observar que apenas os Vendedores Ana e Ravi devem ser
incluídos no cálculo, pois foram os únicos que atingiram a condição especificada no filtro. O
Resultado para o ano 2016 seria 162.000, equivalente as somas de 78.000 da Ana e 84.000 do Ravi.

Agora vamos aplicar o mesmo cálculo para no ano 2017.

Novamente, apenas os vendedores Ana e Ravi atingiram a condição especificada no filtro. O


resultado para o ano 2017 seria 166.000.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 71

Agora vamos considerar o contexto Total onde as vendas de 2016 e 2017 estão totalizadas.

Nesta situação, os vendedores Ana, Maria e Ravi atenderiam a expressão de filtro especificada, pois
todos atingiram a [Soma Vendas] mínima de 75.000. O resultado total seria 413.000.

Para este conjunto de dados, teríamos então o seguinte resultado em um visual de matriz distribuído
por ano:

O maior aprendizado ao trabalhar com fórmulas, funções e expressões DAX é entender que cada
expressão é avaliada em cada contexto onde está inserida. E os contextos são sempre modificados
pelos filtros. Entenda cada conjunto de filtros como um contexto diferente.

3.6 USANDO FUNÇÕES ITERANTES PARA “CORREÇÕES” DO TOTAL

No exercício anterior mostramos que o resultado total, apesar de parecer errôneo, está sendo
calculado corretamente para cada um dos contextos. Porém, se você ainda acredita que o resultado
exibido no total é falho, vamos analisar a diferença entre as duas necessidades informacionais
apresentadas:

• Calcular a [Soma Vendas] dos Clientes que compraram mais de 75.000.

• Calcular a [Soma Vendas] dos Clientes que compraram mais de 75.000 no ano.

Se não tivéssemos a referência dos anos, o resultado total seria exatamente o mesmo já obtido.
Agora, se o objetivo for somar as vendas apenas dos clientes que compraram mais de 75.000 em cada
ano, precisamos reescrever a fórmula considerando o cálculo para cada ano. E faremos isso utilizando
as funções SUMX e VALUES.

A função SUMX é responsável por efetuar um cálculo para cada linha de uma tabela especificada e
depois somar todos os resultados encontrados. Como queremos obter a [Soma Vendas] dos clientes
que obtiveram mais de 75.000 em cada ano, vamos precisar de uma tabela com a lista dos anos, que
será gerada com a função VALUES.
caioferreira2002@outlook.com

72 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Crie a medida [Vendas Clientes >75k Anual] com a seguinte fórmula:

Vendas Clientes>75k Anual =


SUMX(
VALUES(Calendario[Ano]),
CALCULATE(
[Soma Vendas],
FILTER(
Clientes,
[Soma Vendas] > 75000
)
)
)

Perceba que nesta nova medida o argumento de expressão da função SUMX é exatamente o mesmo
da medida que criamos anteriormente. A diferença é que agora o cálculo será realizado para cada
linha da tabela de anos – gerada através da função VALUES – e somente depois os resultados serão
somados pela função SUMX.

Poderíamos, inclusive, reaproveitar a medida criada anteriormente na nova medida.

Vendas Clientes>75k Anual =


SUMX(
VALUES(Calendario[Ano]),
[Vendas Clientes>75k]
)

Acrescente a medida [Vendas Clientes>75k Anual] no visual criado no passo anterior e vamos
comparar os resultados.

Se compararmos as duas medidas, os resultados obtidos nos contextos de cada ano são exatamente
os mesmos, porém o resultado no contexto total é diferente. Isso ocorre, pois primeiro é gerado uma
tabela com a lista de anos (VALUES), para depois calcular a [Soma Vendas] com os filtros aplicados
(FILTER), e por fim os resultados são somados (SUMX). Considerando o contexto individual em cada
ano, a lista de anos é composta apenas pelo próprio ano, então a soma dos valores é exatamente o
valor do ano. Já no total, a lista de ano é composta por todos os anos, então é calculada a expressão
da com o filtro, e por último o valor é somado.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 73

Dica: Substitua a função SUMX pelas as funções iterantes AVE-


RAGEX, MINX e MAX e compare as diferenças nos resultados.

HORA DE PRATICAR 4 (DAX)

Considerando os conhecimentos acumulados dos módulos 1 e 2, e sabendo que um mesmo pedido


pode conter mais de um produto diferente, podendo então existir várias linhas na tabela Vendas
referente ao mesmo pedido, faça o que se pede:

A) Criar a medida [Pedidos 5+ Produtos] para calcular a [Qtde Pedidos] que contém 5 ou mais
produtos diferentes.

B) Inserir a medida criada em uma matriz conforme o esquema especificado a seguir:


caioferreira2002@outlook.com

74 DATAB • TREINAMENTO POWER BI • MÓDULO 2

3.7 CRIANDO TABELA DE SEGMENTAÇÃO


Sabemos que a diferença entre criar uma medida e uma coluna está principalmente nos contextos,
e como os cálculos são ou não influenciados pelos filtros aplicados ao modelo. Outra diferença
entre usar uma coluna e uma medida para criar uma classificação é que não é possível inserir uma
medida um visual como categorização, e nem utilizar os seus valores para aplicar filtros utilizando uma
segmentação de dados.

Isso faz com que tenhamos um dilema e uma decisão a tomar. Criar o cálculo como coluna para que
os valores possam ser utilizados como categorização em um visual sem que os resultados sejam
influenciados pelos filtros, ou criar uma medida para que os resultados sejam influenciados pelos
filtros, mas não possam ser utilizados como categorização em um gráfico.

A verdade é que é possível manter a melhor alternativa das duas opções desde que você crie uma
tabela com os resultados possíveis, e uma medida para fazer a agregação dos valores.

Nosso objetivo será classificar os clientes em 5 grupos de fidelidade – Bronze, Prata, Ouro, Platina
e Diamante – de acordo com a quantidade de pedidos realizados e criar um gráfico que mostre a
quantidade de clientes em cada grupo, conforme critérios se seguir:

• Clientes com até 50 pedidos serão classificados com “Bronze”.

• Clientes com até 100 pedidos serão classificados como “Prata”.

• Clientes com até 200 pedidos serão classificados como “Ouro”.

• Clientes com até 300 pedidos serão classificados como “Platina”.

• Clientes acima de 300 pedidos serão classificados como “Diamante”.

Primeiro, vamos criar uma tabela com o nome Fidelidade e especificar cada uma das faixas de
agrupamento. Para inserir a tabela clique em Página Inicial  Inserir Dados. Informe os dados
conforme a imagem.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 75

Com a tabela criada, vamos criar uma medida que utilize a função CALCULATE para mudar o contexto
da medida [Qtde Clientes], e a função FILTER para filtrar a tabela Clientes considerando apenas
aqueles que atendem a condição onde a [Qtde Pedidos] esteja no intervalo especificado na tabela
Fidelidade.

Qtde Clientes Fidelidade =


CALCULATE(
[Qtde Clientes],
FILTER(
Clientes,
[Qtde Pedidos] > MIN(Fidelidade[Min]) &&
[Qtde Pedidos] <= MAX(Fidelidade[Max])
)
)

Insira a medida criada em um visual de matriz conforme o esquema de campos exibido na imagem a
seguir.

Perceba que mesmo sem existir uma relação criada entre as tabelas Clientes e Fidelidade, o resultado
foi calculado corretamente. Isso foi possível pois a função FILTER foi responsável por filtrar a tabela
Clientes conforme a expressão de filtro de indicamos.

No primeiro argumento da função CALCULATE foi especificada a medida a ser calculada – [Qtde
Clientes] – que faz uma contagem distinta de vendedores. O segundo argumento é o contexto em
que a medida deve ser calculada. Para contar os clientes em cada faixa de fidelidade é necessário
aplicar um filtro à tabela Clientes para que retorne apenas os clientes que atendem o critério da faixa.
Para isso utilizamos a função FILTER.

Na função FILTER o primeiro argumento especificado foi a tabela Clientes, e o segundo foi a
expressão de filtro. Um detalhe importante é que para recorrer aos valores mínimo e máximo das
faixas de fidelidade foram utilizadas duas funções agregadoras – MIN e MAX, respectivamente. Isso
foi necessário, pois a função FILTER está no contexto de linha da tabela Clientes, e não tem acesso
aos valores da tabela Fidelidade, já que não existe uma relação entre as tabelas. Ao usar uma função
agregadora, os valores das colunas Fidelidade[Min] e Fidelidade[Max] serão resumidos em um único
caioferreira2002@outlook.com

76 DATAB • TREINAMENTO POWER BI • MÓDULO 2

valor, possibilitando a comparação com a medida [Qtde Pedidos] que está sendo avaliada para cada
linha da tabela Clientes. Ao inserir a medida criada em um visual onde há a segmentação das faixas
de fidelidade, os limites mínimo e máximo são calculados conforme os contextos do visual.

Para entender melhor o funcionamento dessa agregação e da função FILTER, considere o modelo
de dados a seguir, com os valores de [Qtde Pedidos] e [Qtde Clientes] já avaliados para os clientes
hipotéticos.

Agora vamos analisar como o cálculo da medida [Qtde Clientes Fidelidade] foi executado. Primeiro
vamos considerar a primeira linha do visual, com o contexto apenas da faixa de fidelidade “Bronze”.
Aplicando o filtro a todos os clientes, o resultado para a medida [Qtde Clientes] seria 2, pois apenas
os clientes Ana e Maria atendem aos critérios.

Perceba que para calcular a expressão MIN(Fidelidade[Min]) foi considerado apenas o valor de
linha Bronze, já que os demais valores não estão no contexto. O mesmo acontece com a expressão
MAX(Fidelidade[Max]). Uma dica importante é o operador && que equivale ao mesmo que uma
junção E. Utilizaríamos o operador || se fosse necessário utilizar um junção do tipo OU.

Se mudarmos o contexto da fidelidade para Platina, de forma semelhante, o resultado para a [Qtde
Clientes] seria 1.

E é possível efetuar o cálculo para todos os contextos na tabela Fidelidade.


caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 77

Por fim, vamos considerar o contexto total, quando todas as faixas serão consideradas. Perceba que
as agregações MIN e MAX agora retornam os valores 0 e 999999, respectivamente, pois todas as linhas
da tabela fidelidade são consideradas no contexto total. O resultado neste contexto seria 8 para a
medida [Qtde Clientes].

Com medida e tabela criadas é possível utilizar as segmentações em qualquer tipo de visual, como por
exemplo um gráfico de roscas para exibir a composição da carteira de clientes por grupo de fidelidade.

Para incrementar a análise, vamos calcular a soma de vendas de todos os clientes em cada faixa de
fidelidade. Basta replicar a mesma lógica, trocando apenas a expressão que será avaliada pela função
CALCULATE. O contexto de filtro será o mesmo que aplicamos na medida anterior, visto que as regras
para cada faixa de fidelidade são as mesmas.

Soma Vendas Fidelidade =


CALCULATE(
[Soma Vendas],
FILTER(
Clientes,
[Qtde Pedidos] > MIN(Fidelidade[Min]) &&
[Qtde Pedidos] <= MAX(Fidelidade[Max])
)
)

Insira a nova medida na composição do visual de matriz com as faixas de fidelidade que criamos no
primeiro exemplo deste capítulo.
caioferreira2002@outlook.com

78 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Dica: utilize o recurso Classificar Coluna Por para ordenar os gru-


pos de fidelidade em ordem de importância.

Vá até o modelo de exibição Dados, selecione a coluna Fidelidade na tabela Fidelidade, e clique em
Ferramentas de coluna → Classificar por coluna. Por fim, selecione a coluna Max ou Min.

Os valores numéricos da coluna serão utilizados para determinar a ordem de classificação da coluna
Fidelidade. Ao voltar ao modo de visualização de relatório será possível observar que a ordem das
faixas modificou conforme o limite de cada faixa.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 79

HORA DE PRATICAR 5 (DAX)

A) Criar a medida [Ticket Médio Fidelidade] para retornar ticket médio dos clientes em cada faixa de
fidelidade.

B) Inserir as medidas [Ticket Médio Fidelidade] e [Soma Vendas Fidelidade] em um visual de


matriz segmentado pelas coluna Fidelidade[Fidelidade] e Clientes[Cliente], conforme esquema
demonstrado:

3.8 ACUMULADOS
É muito comum analisarmos métricas por períodos, principalmente quando elas possuem um objetivo
até certa data que deve ser atingido e variação de performance ao longo dos dias. Uma das métricas
periódicas mais comuns no mercado são os acumulados, podendo ser anual, também conhecido
como YTD (Year-to-date), acumulado trimestral conhecido como QTD (Quarter-to-date), ou até mesmo
acumulados em períodos móveis, como por exemplo dos últimos 12 meses, conhecido como MAT
(Moving annual total).

Porém, é importante salientar que as funções para cálculos acumulados não se limitam apenas
a somas, podendo ser utilizado qualquer agregador, como por exemplo a média acumulada
dos últimos 3 meses, o maior valor dos últimos 6 meses etc. O que vamos controlar é o período
acumulado, deixando a encargado da expressão indica no primeiro argumento da CALCULATE
executar a agregação.

Vamos começar criando uma métrica para gerar a soma de vendas acumulada no ano.

YEAR-TO-DATE

A função responsável gerar o período acumulado dentro do ano é a DATESYTD. O único argumento
obrigatório desta função é a coluna de datas. Esta coluna deve conter todas as datas possíveis e
sem repetição. Neste caso estamos nos referindo a chave primária da tabela calendário, a coluna
Calendario[Data].
caioferreira2002@outlook.com

80 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Crie a medida com a fórmula a seguir:

Soma Vendas YTD =


CALCULATE(
[Soma Vendas],
DATESYTD(Calendario[Data])
)

O cálculo a ser realizado pela medida criada será o mesmo já realizado pela medida [Soma Vendas],
porém o contexto será modificado de forma que o período a ser somado considere todas as datas
desde o dia 01/01 do ano atual até o fim do contexto inserido.

Para verificarmos os resultados obtidos pela nova medida vamos criar um visual de tabela conforme o
esquema a seguir:

Perceba que o cálculo da [Soma Vendas] é considerado apenas o contexto atual inserido no visual,
enquanto a medida [Soma Vendas YTD] retorna o total acumulado dentro do ano até o contexto atual.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 81

Um outro argumento que podemos informar na função DATESYTD é o Year-end-date que se refere
qual dia do ano será considerado o último dia do ano para efeito do acúmulo. Por exemplo, imagine
que deseja acumular os valores anuais começando no dia 01/07 e ir acumulando até o dia 30/06.
Devemos então informar a data 30/06 como o último dia do ano à função DATESYTD. Com a mudança
a medida ficaria assim:

Soma Vendas YTD =


CALCULATE(
[Soma Vendas],
DATESYTD(Calendario[Data],“30/06”)
)

Na linguagem DAX existe também a função TOTALYTD que equivale a junção das funções CALCULATE
e DATESYTD, e permite criar o acumulado anual com uma fórmula mais enxuta.

A fórmula usando a função TOTALYTD pode ser escrita assim:

Soma Vendas YTD =


TOTALYTD([Soma Vendas],Calendario[Data])

Perceba que é necessário informar os mesmos argumentos – a expressão e a coluna de datas. Se


precisar informar o último dia do ano, você pode utilizar o terceiro argumento da função.

Soma Vendas YTD =


TOTALYTD([Soma Vendas],Calendario[Data],“30/06”)
caioferreira2002@outlook.com

82 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Utilizando a mesma função podemos calcular a média mensal de vendas acumulada do ano, apenas
apontando a medida que calcula a média mensal de vendas no primeiro argumento. Crie a medida
abaixo e coloque-a no visual de tabela que utilizamos no exemplo anterior.

Média Mensal Vendas YTD =


TOTALYTD([Média Mensal Vendas],Calendario[Data])

A média mensal apresentada pela medida [Média Mensal Vendas YTD] equivale a média de mensal
de todos os meses do ano até o mês do contexto atual.

QUARTER E MONTH-TO-DATE

De forma semelhante é possível criar o acumulado de períodos diferentes, como trimestral ou mensal.
As funções equivalentes são DATESQTD para o período trimestral DATESMTD para mensal. Também é
possível utilizar as funções TOTALQTD e TOTALMTD, respectivamente.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 83

A fórmula abaixo cria um acumulado trimestral da [Soma Vendas].

Soma Vendas QTD =


TOTALQTD([Média Mensal Vendas],Calendario[Data])

ACUMULADO AO LONGO DO TEMPO

Em algumas situações limitar a data final do acumulado a um período específico do calendário, como
o ano ou trimestre, não é o ideal. Muitas vezes é necessário que o acumulado seja realizado através
dos anos, como por exemplo para uma contagem de estoque ou fluxo de caixa. Em situações como
essas o mais viável é utilizar a função DATESBETWEEN para especificar o início e término do período
que queremos considerar no cálculo.

A sintaxe da função DATESBETWEEN possui três argumentos. O primeiro é a coluna de datas, e os dois
últimos são as datas inicial e final, respectivamente.

Por exemplo, se desejar criar uma medida para retornar a soma de vendas do ano de 2017, a fórmula
ficaria assim:

Soma Vendas 2017 =


CALCULATE(
[Soma Vendas],
DATESBETWEEN(
Calendario[Data],
“2017/01/01”,
“2018/12/31”
)
)
caioferreira2002@outlook.com

84 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Perceba que nos argumentos StartDate e EndDate as datas foram informadas no padrão aaaa/
mm/dd. Porém, ao utilizar uma função com as datas literalmente digitadas não temos uma medida
dinâmica, e o valor retornado será sempre referente ao período informado.

Podemos usar a função DATESBETWEEN e aplicar outras funções para determinar o período desejado,
conforme a necessidade informacional.

Vamos criar uma função que irá retornar o acumulado desde o dia 01/01/2016 até a maior data do
contexto atual. Isso quer dizer que quando o contexto do visual for, por exemplo, julho/2018, o
período que a função DATESBETWEEN deve considerar deve ser 01/01/2016 até 31/07/2018, já que esta
é a maior data de julho/2018.

Para retornar a maior data de um contexto, vamos utilizar a função MAX e como argumento informar a
coluna de datas. A fórmula completa ficará assim:

Soma Vendas ACC =


CALCULATE(
[Soma Vendas],
DATESBETWEEN(
Calendario[Data],
“2016/01/01”,
MAX(Calendario[Data])
)
)

Dica: utilize o painel de filtros para remover os períodos em branco do


visual.

Perceba que mesmo com a virada do ano a medida continuou acumulando os períodos.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 85

O resultado é exatamente o esperado. Contudo, ainda forçamos o cálculo a começar em uma data
específica que foi 01/01/2016. O ideal é que a função assuma a menor data possível automaticamente.
E o segredo para fazer isso é informar o valor BLANK() no argumento StartDate da função
DATESBETWEEN. Fazendo as devidas correções, a fórmula ficará assim:

Soma Vendas ACC =


CALCULATE(
[Soma Vendas],
DATESBETWEEN(
Calendario[Data],
BLANK(),
MAX(Calendario[Data])
)
)

De forma análoga, podemos utilizar a função MIN para retornar a menor data do contexto atual, e
aplicar o valor BLANK() no argumento EndDate para criar uma medida de decréscimo. Desta forma,
o período avaliado será o primeiro dia do contexto atual até a última data disponível no calendário.

Podemos utilizar a seguinte fórmula para calcular o decréscimo:

Soma Vendas DCC =


CALCULATE(
[Soma Vendas],
DATESBETWEEN(
Calendario[Data],
MIN(Calendario[Data]),
BLANK()
)
)

Dica: utilize a função condicional IF para suprimir as linhas onde a [Soma


Vendas] está vazia.
caioferreira2002@outlook.com

86 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Soma Vendas DCC =


IF([Soma Vendas] > 0,
CALCULATE(
[Soma Vendas],
DATESBETWEEN(
Calendario[Data],
MIN(Calendario[Data]),
BLANK()
)
))

ACUMULADO MÓVEL

Outros indicadores técnicos muito utilizados em análises de tendência são os acumulados e médias
móveis. Através de uma métrica móvel podemos obter um resultado de uma métrica no decorrer de
um período definido. Em resumo, o período analisado irá se mover com o passar o tempo.

Uma das métricas desse tipo mais comum é o acumulado dos últimos 12 meses. Com ela é possível
sempre analisar um período de 12 meses com o passar do tempo. Sempre que um novo mês entra no
cálculo, o mês mais antigo é retirado, e assim por diante.

Mas esse tipo de métrica não se aplica apenas ao período de 12 meses. É possível determinar o
período de intervalo desejado. Para criar cálculos com períodos móveis com a linguagem DAX
utilizamos a função DATESINPERIOD em conjunto com a função CALCULATE.

A função DATESINPERIOD possui 4 argumentos – Coluna de datas, data inicial, número de períodos e
intervalo. Para criar um período móvel, a estratégia será semelhante a outros cálculos que já criamos.
Vamos utilizar como referência a maior data do contexto atual utilizando a função MAX, e informar o
número de períodos desejados para voltar, que para este exemplo será 12 meses.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 87

A fórmula da nova medida será a seguinte:

Soma Vendas U12M =


CALCULATE(
[Soma Vendas],
DATESINPERIOD(
Calendario[Data],
MAX(Calendario[Data]),
-12,
MONTH
)
)

Semelhante às outras funções de inteligência temporal, informamos a coluna Data da tabela


Calendario como a coluna de datas solicitada. A data inicial será sempre a maior data do contexto
atual. No terceiro argumentos informamos o número de períodos que queremos avançar ou retornar.
O número está negativo pois o objetivo é calcular a métrica nos 12 meses anteriores a data inicial. No
quarto e último argumento foi informado o tamanho do período que pode ser DAY, MONTH, QUARTER
ou YEAR, representando DIA, MÊS, TRIMESTRE ou ANO, respectivamente.
caioferreira2002@outlook.com

88 DATAB • TREINAMENTO POWER BI • MÓDULO 2

MÉDIA MÓVEL

O cálculo da média móvel consiste na aplicação da mesma função DATESINPERIOD para definir o
período, bastando apontar na função CALCULATE uma medida ou expressão que calcule a média
desejada.

Vamos calcular a média mensal móvel de vendas dos últimos 3 meses. Como já temos a medida
[Média Mensal Vendas] vamos utilizá-la na fórmula, que ficará assim:

Média Móvel 3M =
CALCULATE(
[Média Mensal Vendas],
DATESINPERIOD(
Calendario[Data],
MAX(Calendario[Data]),
-3,
MONTH
)
)

HORA DE PRATICAR 6 (DAX)

A) Criar a medida [Qtde Clientes YTD] para retornar o acumulado anual da quantidade de clientes.

B) Criar a medida [Média Móvel 6M] para calcular média móvel mensal dos últimos 6 meses.

C) Inserir as medidas [Qtde Clientes], [Qtde Clientes YTD] e [Qtde Clientes Móvel 6M] em um visual
de tabela distribuídas pelas colunas Calendario[Ano] e Calendario[Nome do Mês], conforme o
esquema exibido a seguir:
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 89

3.9  PARAMETRIZANDO MEDIDAS


Até o momento, fizemos análises apenas com os valores presentes na base de dados importada
para o Power BI, mas também podemos realizar influências em cálculos com entradas externas
selecionadas pelo usuário do relatório. Utilizando a ferramenta Parâmetros, é possível permitir que o
usuário crie e analise cenários rapidamente apenas informando os valores desejados em uma variável.

No exemplo anterior criamos a medida [Média Móvel 3M] que retorna a média mensal de vendas
dos últimos 3 meses. Porém, ao invés de mantermos sempre 3 meses na média, podemos oferecer
ao usuário um parâmetro onde ele possa selecionar a quantidade de meses que deseja utilizar para
calcular a média mensal de vendas.

Primeiro vamos criar um parâmetro e definir o intervalo e o formato do valor que o usuário poderá
selecionar. Clique no menu Modelagem → Novo Parâmetro.

Uma caixa de diálogo será exibida onde poderemos informar os dados do parâmetro.

Devemos informar um nome para o parâmetro, o tipo de dados, o valor mínimo e máximo e um
incremento, além de um valor padrão. Informe os valores a seguir:

• Nome: Meses

• Tipo de dados: Número inteiro

• Mínimo: 2

• Máximo: 12

• Incrementar: 1

• Padrão: 2
caioferreira2002@outlook.com

90 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Com as definições acima o usuário poderá selecionar qualquer número inteiro entre 2 e 12,
incrementando de 1 em 1. Caso o usuário pudesse selecionar apenas números pares, teríamos que
definir o incremento como 2. Isso faria com que o usuário pudesse selecionar apenas números que
partisse de 2 (mínimo) e fosse incrementado de 2 em 2. O valor padrão é o valor que o parâmetro irá
assumir caso o usuário não selecione nenhum valor.

Antes de clicar em OK você deve certificar que marcou a opção adicionar segmentação a esta
página, pois será esta opção que criará uma segmentação onde o usuário poderá selecionar o valor.
Ao clicar em OK um visual será criado.

É possível aplicar as formatações como em qualquer outro visual. Configure o formato do visual
conforme o esquema a seguir:

• Tela de fundo: desativado

• Controle deslizante: ativado

o Cor: #744EC2

• Entradas numéricas

o Cor da fonte: branca

o Tela de fundo: #744EC2

• Cabeçalho da segmentação de dados: desativado

Para selecionar um valor na segmentação, basta utilizar a bolinha do controle deslizante, arrastando-a.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 91

ENTENDENDO O PARÂMETRO

Sempre que criamos um parâmetro, uma tabela com o mesmo nome e uma medida são gerados
no modelo de dados. A tabela é responsável por definir o intervalo e incremento do parâmetro, e a
medida por retornar o valor selecionado no parâmetro.

A tabela Meses foi gerada utilizando a função GENERATESERIES. Podemos alterar os valores
definidos ao criar o parâmetro, clicando sobre a tabela e trocando-os na barra de fórmulas.

O primeiro argumento da função GENERATESERIES é o valor mínimo (StartValue), o segundo


argumento é valor máximo (EndValue) e o último argumento é o incremento.

Já a medida [Meses Valor] foi gerada usando a função SELECTEDVALUE, responsável por retornar o
valor selecionado em uma coluna – neste caso a coluna Meses do parâmetro.

O primeiro argumento da função SELECTEDVALUE é a coluna e o último argumento é valor padrão


que será retornado caso não haja nenhum valor selecionado na coluna.

Agora que já sabemos que a medida gerada pelo parâmetro retorna o valor selecionado pelo usuário,
podemos utilizá-la na parametrização de outras medidas. Vamos criar a medida para retornar a média
mensal móvel de vendas conforme o valor especificado no parâmetro.
caioferreira2002@outlook.com

92 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Média Mensal XM =
CALCULATE(
[Média Mensal Vendas],
DATESINPERIOD(
Calendario[Data],
MAX(Calendario[Data]),
-[Meses Valor],
MONTH
)
)

A estrutura da fórmula é a mesma do exemplo anterior, apenas substituímos o número três, que
representava os meses, pela medida gerada pelo parâmetro.

APLICANDO EM UM GRÁFICO

Com a medida criada e atrelada ao parâmetro é só a inserir em um visual. Vamos utilizar um gráfico de
linhas conforme o esquema abaixo:

• Eixo: Calendario[Data]

• Valores: [Média Mensal XM] e [Soma Vendas]


caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 93

Importante utilizar o recurso de drill-down para expandir para o nível de hierarquia abaixo até chegar
ao nível mensal, visto que as métricas estão calculadas neste nível.

Altere o valor do parâmetro e note as alterações na linha da média móvel. Quanto menor o tamanho
do período informado no parâmetro mais as duas linhas no gráfico se aproximam, visto que a soma
de vendas considera apenas um período representado pelo contexto atual.

HORA DE PRATICAR 7 (DAX)

A) Criar a medida [Qtde Clientes XM] para retornar a Qtde Clientes dos últimos X meses, conforme o
parâmetro selecionado pelo usuário.

B) Inserir em um gráfico de linhas as medidas [Qtde Clientes] e [Qtde Clientes XM] com o eixo
distribuído pelo campo Calendario[Data], conforme esquema abaixo:
caioferreira2002@outlook.com

94 DATAB • TREINAMENTO POWER BI • MÓDULO 2

3.10  RANKING
A posição de determinados itens em uma listagem é um dos indicadores mais utilizados no mercado.
Não somente sua posição atual, mas a comparação com posições específicas para acompanhar
alterações positivas e negativas. Alguns dos mais usados indicadores são: ranking de clientes,
vendedores e produtos.

Existe uma função específica para calculá-los no DAX chamada RANKX. Sua sintaxe possui cinco
argumentos, sendo que apenas dois são obrigatórios:

No argumento da Tabela, é muito importante utilizarmos uma função que ignorará o contexto de
filtro atual, como a ALL ou ALLSELECTED, pois do contrário o ranking será calculado apenas dentro
do contexto atual. Imagine criar um ranking com apenas um vendedor ou produto, o resultado seria
sempre o mesmo – 1.

No argumento Expressão, a medida ou função de agregação com que queremos avaliar o rank deve
ser inserida, como por exemplo, a soma de vendas, média e contagem.

Vamos começar utilizando apenas os argumentos obrigatórios para criação da nossa medida. Nosso
objetivo é criar um ranking de vendedores com base na [Soma Vendas] de cada um.

A fórmula da medida deve ficar assim:

Rank Vendedores =
RANKX(
ALL(Vendedores),
[Soma Vendas]
)

Vamos inserir a medida em uma tabela conforme o esquema a seguir:

Se preferir, ordene a tabela para exibir os vendedores em ordem pela [Soma Vendas]. Basta clicar
sobre o cabeçalho da coluna exibido na tabela.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 95

Um detalhe muito importante ao criar uma medida para ranqueamento é o uso da função ALL na
tabela informada. Como estamos criando um ranking de vendedores, não pode haver filtros neste
contexto. Porém, ao utilizar a função ALL todos os filtros aplicados a tabela vendedor serão ignorados
para gerar o ranking, inclusive os supervisores, mostrando sempre um ranking geral de todos os
vendedores.

No exemplo abaixo foi aplicado um filtro para a supervisora Karine Lago. Perceba que os rankings
ainda continuam considerando a lista de todos os vendedores, e não apenas os vendedores da
supervisora Karine Lago. Com isso é possível notar que o melhor vendedor da Karine figura na
vigésima terceira posição na lista de todos os vendedores.

Um detalhe curioso é o ranking exibido no total – 17. Você consegue imaginar que resultado é
esse? Isso significa que se considerássemos todos os vendedores da Karine que venderam juntos
3.443.605,44, eles figurariam na décima sétima posição na lista de todos os vendedores. Significa
que existem 16 vendedores que venderam individualmente mais do que todos os vendedores da
supervisora Karine juntos.
caioferreira2002@outlook.com

96 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Porém, se o objetivo for considerar apenas os vendedores da mesma equipe para calcular um ranking,
teremos que modificar a fórmula para ignorar os filtros apenas na coluna Vendedor, mantendo assim
outros filtros que possam ser aplicados a tabela Vendedores, como por exemplo o supervisor. Para
isso basta acrescentar o nome da coluna dentro da função ALL.

Rank Vendedores =
RANKX(
ALL(Vendedores[Vendedor]),
[Soma Vendas]
)

Agora mesmo que seja aplicado um filtro na coluna Supervisor, ele será respeitado para o cálculo do
ranking, considerando apenas os vendedores filtrados para calcular o ranking.

COMPARANDO DUAS MEDIDAS DIFERENTES NO MESMO RANKING

Por padrão a função RANKX utiliza apenas a medida informada na expressão para calcular o
ranqueamento. Mas é possível utilizar duas expressões diferentes na comparação.

Por exemplo, queremos determinar qual a posição um determinando vendedor atingiria caso
tivesse realizado 20% a mais de vendas. Precisamos comparar a [Soma Vendas] com o [Soma Vendas]
majorada em 20%. Para isso basta informar um novo valor que será comparado no terceiro argumento
da função RANKX – o Valor.

Vamos criar um ranqueamento aplicando um fator de 20% a mais na [Soma Vendas].

Ranking +20% =
RANKX(
ALL(Vendedores[Vendedor]),
[Soma Vendas],
[Soma Vendas] * 1.2
)
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 97

Vamos inserir a medida criada na tabela e comparar os resultados.

O vendedor Arthur realizou 12.811.424,19 em vendas figurando na quinta posição do ranking. Porém,
caso tivesse realizado 20% a mais de venda, teria atingindo o valor de 15.373.709,03 o que o colocaria
na terceira posição do ranking.

O argumento valor é muito útil quando necessitamos criar cenários hipotéticos e criar rankings
entre duas medidas. Uma dica seria utilizar o recurso parâmetro que aprendemos anteriormente
para permitir que o usuário defina o percentual de majoração do valor, por exemplo, influenciando
diretamente o cálculo do novo ranking.

INVERTENDO A ORDEM DO RANKING

Em um ranking nem sempre o maior valor significa o melhor resultado. Imagine que esteja criando
um ranking de vendedores por pedidos devolvidos. Quanto menor a quantidade de pedidos
devolvidos, melhor. É possível determinar a ordem da classificação no argumento Order, onde DESC
é descendente e ASC é ascendente. Por padrão, quando não informado, é considerado descendente,
ou seja, do maior para o menor.

Ranking Piores Vendedores =


RANKX(
ALL(Vendedores[Vendedor]),
[Soma Vendas],,
ASC
)

Dica: perceba que foram usados dois pontos-e-vírgulas segui-


dos. Isso aconteceu pois queremos omitir o valor do terceiro
argumento da função RANKX, que é opcional.
caioferreira2002@outlook.com

98 DATAB • TREINAMENTO POWER BI • MÓDULO 2

EMPATES. E O PRÓXIMO RANKING?


Em um ranqueamento uma situação que pode ocorrer são os empates, e com isso algumas
peculiaridades podem acontecer. Por exemplo, no ranking de vendedores do nosso modelo
podemos perceber que existem dois vendedores com o mesmo valor de vendas e com isso a mesma
posição no ranking.

Os dois estão empatados na posição 121. Não há nada de errado com isso, visto que os dois
vendedores atingiram os mesmos resultados. Porém, um questionamento que pode ser realizado é
se o próximo vendedor da lista, deve ser considerado o centésimo vigésimo segundo ou centésimo
vigésimo terceiro colocado.

Bem, a verdade é que podemos definir se queremos que o próximo valor do ranking seja pulado
ou não. Será com o argumento Ties que faremos o tratamento desses empates e de qual será o
próximo valor no ranqueamento. Ao declarar o valor do argumento como Skip, o próximo ranking
será definido pulando todas as posições de empates. No exemplo citado, o vendedor Antônio Dias
seria considerado o centésimo vigésimo terceiro colocado. Já, se definirmos o valor do argumento
como Dense, o próximo ranking será definido com a próxima posição sem pulos. Assim o vendedor
Antônio figuraria na centésima vigésima segunda posição.

Vamos alterar a medida [Ranking Vendedores] e definir o argumento ties como dense.

Rank Vendedores =
RANKX(
ALL(Vendedores[Vendedor]),
[Soma Vendas],,,
Dense
)

Agora é possível perceber que a contagem do ranking não pula nenhuma classificação.
caioferreira2002@outlook.com

CAPÍTULO: EXPLORANDO O ETL E A MODELAGEM DE DADOS 99

CRITÉRIOS DE DESEMPATE

A função RANKX não possui nenhum argumento onde pode ser informado uma segunda medida
como critério de desempate. Porém existe uma técnica que pode ser aplicada no ranqueamento para
que outras medidas sejam consideradas como critérios de desempate.

Vamos definir como regra de negócio que caso dois ou mais vendedores obtenham o mesmo
resultado em vendas, o valor da maior venda será utilizado como critério de desempate.

A fórmula para cálculo do ranking de vendedores ficará assim:

Rank Vendedores =
RANKX(
ALL(Vendedores[Vendedor]),
([Soma Vendas] * 10^7) + ([Maior Venda] * 10^0)
)

A técnica consiste basicamente em criar uma expressão que é composta por todas as medidas
de critérios atribuindo pesos diferentes a cada uma dela. Se a medida [Soma Vendas] é a métrica
principal devemos multiplicá-la por peso maior, em seguida vamos somar com a segunda medida
multiplicada por um peso menor, e assim sucessivamente.

A atribuição de pesos é importante para evitar que um critério que tem menor importância tenha
influência sobre um critério de maior importância ao realizar as somas das medidas. Imagine a
seguinte situação onde devemos calcular o ranking considerando a [Soma Vendas] como critério
principal e a [Maior Venda] como critério de desempate.

Se simplesmente somarmos as duas medidas, faríamos com que a vendedora Gabriela ficasse a frente
dos vendedores Lucas e Ravi, mesmo tendo realizado menos vendas no total.
caioferreira2002@outlook.com

Quando aplicamos um fator de peso as métricas, evitamos que situações como essa ocorra. Tome
agora como exemplo o mesmo ranking, mas atribuindo um peso de 100 para a [Soma Vendas] e um
peso de 1 para a [Maior Venda].

Por isso é tão importante a atribuição de pesos para evitar que haja uma avaliação errônea. E tão
importante quanto atribuir um peso, é definir o tamanho dos pesos conforme a grandeza das
pedidas. Quanto maior a grandeza, maior devem ser a diferença nos pesos.

HORA DE PRATICAR 8 (DAX)

A) Criar a medida [Rank Produtos] para calcular o ranking de produtos pela [Soma Vendas] permitindo
o filtro pelas categorias de produtos.

B) Aplicar a medida [Ticket Médio] como critério de desempate no ranking de produtos.

C) Inserir a medida [Rank Produtos] num visual de tabela conforme esquema a seguir.
caioferreira2002@outlook.com
caioferreira2002@outlook.com

CAPÍTULO

Capítulo 4: SEGURANÇA EM NÍVEL DE


LINHA (RLS)
4
SEGURANÇA EM
NÍVEL DE LINHA

No Power BI é possível configurar os dados e os usuários que poderão acessar relatórios com a
segurança em nível de linha, também conhecida como RLS (Row Level Security).

Com a segurança em nível de linha podemos determinar filtros que serão aplicados obrigatoriamente
quando determinado usuário acessar o relatório no Power BI Serviço.

Por exemplo, este mesmo relatório criado pode ser acessado por vários usuários, porém cada
um poderá “enxergar” apenas os dados da sua unidade. Para isso vamos criar funções de acesso
diferentes – uma para cada unidade – com filtros pré-determinados, e depois especificar quais
usuários estarão atrelados a essas funções, permitindo assim que os filtros pré-determinados para
cada função sejam aplicados sempre que um usuário desta função acessar o relatório.

A configuração do RLS começa no Power BI Desktop. Clique no menu Modelagem → Gerenciar


Funções.

O primeiro passo é criar uma função e depois atribuir um nome. Vamos começar criando a função
referente a unidade Garoa. Em seguida vamos criar os filtros utilizando expressões DAX em cada
tabela. Neste exemplo queremos aplicar um filtro na tabela Unidades para que sejam exibidas
apenas a unidade “Garoa”. Clique nos três pontos em frente ao nome da tabela, e em seguida
escolha a opção Adicionar Filtro e escolha o campo Unidade.

Por fim, altere a expressão criada, definindo a unidade como Garoa. É possível adicionar múltiplos
filtros em uma mesma tabela ou em tabelas diferentes para a mesma função. Utilize os operadores
lógico && (E) e || (OU) para adicionar mais de uma condição para o filtro.
caioferreira2002@outlook.com

CAPÍTULO: SEGURANÇA EM NÍVEL DE LINHA (RLS) 103

Com a função criada, é possível conferir se a configuração realizada está filtrando corretamente os
dados e, consequentemente, o relatório. Ainda na guia Modelagem no Power BI Desktop, clique em
Exibir como e escolha a função que criamos – Garoa.

O relatório será exibido com os filtros definidos para a função Garoa.

Entretanto, os usuários não acessarão os relatórios pelo Power BI Desktop, mas sim pelo Power BI
Serviço. Por isso, é necessário ainda configurar o restante desse processo lá.
caioferreira2002@outlook.com

104 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Após publicar o relatório com o RLS estabelecido, no Power BI Serviço vá na seção Conjunto de
dados e clique nas opções do conjunto relacionado a esse relatório. Posteriormente, acesse a
Segurança.

A função criada no Power BI Desktop chamada Garoa aparecerá na listagem de RLS e agora basta
atribuir membros (e-mail com contas Pro do Power BI) às funções para finalizar a proteção do acesso
aos dados do relatório.

Vamos adicionar a Karine como membro da função Garoa. Informe o e-mail, clique em Adicionar e
depois em Salvar.

IMPORTANTE: Este relatório está publicado no domínio da DATAB, por isso é possível visualizar os
membros dentro do domínio.
caioferreira2002@outlook.com

CAPÍTULO: SEGURANÇA EM NÍVEL DE LINHA (RLS) 105

Depois de compartilhar o relatório com a Karine, assim que ela o acessar somente conseguirá
visualizar os dados da unidade Garoa.

Esta será a visão da Karine ao acessar o relatório através do Power BI Serviço:

Sempre faça esse processo todo antes de compartilhar relatórios com pessoas que devem ter acesso
restrito. O RLS pode ser incluído em casos desde simples a complexos, com mais de um campo de
filtro também. Apenas lembre-se de testá-lo antes de publicar para verificar se o filtro está sendo
aplicado corretamente, de acordo com a propagação dos relacionamentos no modelo.

Quando um relatório possui RLS, sua capacidade de publicação na web (sem controle de acesso)
não será mais permitida. O máximo de usuários atribuídos às funções são 1.000. Para facilitar sua
atribuição, recomendamos utilizar grupos de segurança ao invés de e-mails individuais.
caioferreira2002@outlook.com

CAPÍTULO

Capítulo 5: SOLUÇÕES DO HORA DE


PRATICAR
5
SOLUÇÕES
HORA DE PRATICAR

Esta sessão da apostila é apenas para conferência e correção. O ideal é que o você tente primeiro
executar os exercícios propostos e somente depois realize a consulta das soluções.

HORA DE PRATICAR (1)

A)

Freq. Cliente =
SWITCH(
TRUE(),
[Qtde Pedidos] > 40 , “Alta” ,
[Qtde Pedidos] > 10 , “Média” ,
[Qtde Pedidos] > 0 , “Baixa”
)

B)

Os resultados das medidas podem variar conforme os filtros. O visual acima não possui nenhum filtro
aplicado.
caioferreira2002@outlook.com

CAPÍTULO: SOLUÇÕES DO HORA DE PRATICAR 107

HORA DE PRATICAR (2)

A)

B)

Soma Faturamento =
CALCULATE(
[Soma Vendas],
USERELATIONSHIP(Calendario[Data],Vendas[Data.Faturamento])
)

C)

Os resultados das medidas podem variar conforme os filtros. O visual acima não possui nenhum filtro
aplicado.
caioferreira2002@outlook.com

108 DATAB • TREINAMENTO POWER BI • MÓDULO 2

HORA DE PRATICAR (3)

A)

Ticket Médio =
AVERAGEX(
VALUES(Vendas[Pedido]),
[Soma Vendas]
)

B)

Maior Ticket =
MAXX(
VALUES(Vendas[Pedido]),
[Soma Vendas]
)

C)

Os resultados das medidas podem variar conforme os filtros. O visual acima não possui nenhum filtro
aplicado.

HORA DE PRATICAR (4)

A)

Pedidos 5+ Produtos =
CALCULATE(
[Qtde Pedidos],
FILTER(
VALUES(Vendas[Pedido]),
[Qtde Produtos] >= 5
)
)
caioferreira2002@outlook.com

CAPÍTULO: SOLUÇÕES DO HORA DE PRATICAR 109

B)

Os resultados das medidas podem variar conforme os filtros. O visual acima não possui nenhum filtro
aplicado.

HORA DE PRATICAR (5)

A)

Ticket Médio Fidelidade =


CALCULATE(
[Ticket Médio],
FILTER(
Clientes,
[Qtde Pedidos] > MIN(Fidelidade[Min]) &&
[Qtde Pedidos] <= MAX(Fidelidade[Max])
)
)

B)
caioferreira2002@outlook.com

110 DATAB • TREINAMENTO POWER BI • MÓDULO 2

Os resultados das medidas podem variar conforme os filtros. O visual acima não possui nenhum filtro
aplicado.

HORA DE PRATICAR (6)

A)

Qtde Clientes YTD =


CALCULATE(
[Qtde Clientes],
DATESYTD(Calendario[Data])
)

ou

Qtde Clientes YTD =


TOTALYTD([Qtde Clientes],Calendario[Data])

B)

Qtde Clientes Móvel 6M =


CALCULATE(
[Qtde Clientes],
DATESINPERIOD(
Calendario[Data],
MAX(Calendario[Data]),
-6,
MONTH
)
)

C)
caioferreira2002@outlook.com

CAPÍTULO: SOLUÇÕES DO HORA DE PRATICAR 111

Os resultados das medidas podem variar conforme os filtros. O visual acima não possui nenhum filtro
aplicado.

HORA DE PRATICAR (7)

A)

Qtde Clientes XM =
CALCULATE(
[Qtde Clientes],
DATESINPERIOD(
Calendario[Data],
MAX(Calendario[Data]),
-[Meses Valor];
MONTH
)
)

B)

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy