Thiago Zavaschi R2 www.zavaschi.com

16Jun/102

PowerPivot – Data Analysis Expressions DAX – Intro

Então pessoal. :)

Creio que muitos que acompanham as evoluções do PowerPivot já devem ter se deparado com o seguinte pensamento: falta material sobre DAX em português e as referências externas (em inglês ao menos) são sempre de blogs de especialistas (Rob Collie, Kasper de Jonge, Vidas Matelis).

A minha proposta é seguir na mesma linha (já que meu principal canal de difusão de informação é este blog mesmo) e fornecer um pouco de conteúdo sobre DAX, mas em português. Já fiz alguns posts de introdução ao PowerPivot, então creio que valha a pena explorar num nível técnico mais profundo. Claro que se sugirem dúvidas podem perguntar :).

DAX é a abreviação para Data Analysis Expressions. É uma “evolução” da liguagem de fórmulas do Excel e só funcionará par a manipulação da base do PowerPivot dentro do seu workbook.

As DAX são importantes pois: devido a semelhança com a (já conhecida) linguagem de fórmulas do Excel e também por possibilitarem uma flexibilidade na análise dos dados. A capacidade de escrever as DAX e elas serem sensíveis aos slicers do Excel 2010 gera um ganho muito grande de capacidade de análise.

Agora vamos por a mão na massa. Neste artigo apresento uma introdução dos dois tipos de expressões DAX que podem ser criadas. Nos próximos artigs vou assumir que os concents apresentados aqui já estão assimilados.

Temos dois lugares onde podemos utilizar as DAX:

1) Através de novas colunas associadas a uma determinada tabela importada no PowerPivot, conhecidas como “calculated columns”. O resultado desta expressão DAX é armazenado juntamente aos seus dados. O uso deste tipo de DAX (em geral) não deve acarretar problemas de performance.

Há algumas experiências (do pessoal que citei no início do post principalmente) que relatam que a taxa de compressão adquirida pelo VertiPaq atravém de colunas importadas é maior que sobre as colunas calculadas. Não fiz um teste com uma massa grande ainda, mas o que eles querem dizer é que: nos casos em que o cálculo pode vir já feito no momento da importação a compressão (sobre o tamanho final do workbook) possui maiores ganhos. A seguir um exemplo da criação de uma coluna utilizando DAX ou trazendo da fonte de dados diretamente. Há outras utilizadades para colunas computadas que veremos ao longo do artigo e em artigos futuros.

Por exemplo:

Usar a expressão DAX como coluna computada: =Tabela[coluna1] * Tabela[coluna2].

É equivalente a importar (do SQL Server por exemplo) com uma coluna computada na query:

SELECT *, coluna1 * coluna2 FROM Tabela

 image

2) Através de DAX Measures (medidas) que são calculadas tendo como base uma tabela ou uma coluna. Este cálculo será executado para cada célula que o contiver. Então atenção quando utilizá-las!

Uma DAX Measure é basicamente uma fórmula DAX (estilo a usada para a criação de uma coluna) associada a um nome (e a uma tabela).

Um aspecto positivo das DAX Measures é que elas operam sobre o conjunto atual da PivotTable. A cada intereçaão dos slicers temos o recálculo dos valores das measures e com isso temos a atualização dos valores mostrados nos gráficos e tabelas.

Por exemplo:

Vou criar uma DAX measure para o exemplo mostrado na figura anterior que fará a soma dos elementos da coluna nomeada “Valor”.

Ficar complicado (por ter muitos elementos) eu usar a coluna Valor como fonte do slicer (ver figura abaixo). Então o que fazer nestes casos?

image

Conforme vimos no tópico anterior, é possível criar colunas através de expressões DAX. uma saida então é criar uma nova coluna que agrupe os valores. (isso não é um case, os exemplos são apenas para fins didáticos, por isso são simples).

Vou criar uma coluna que categorize os elementos da coluna valor quando são menores que 10, entre 10 e 20, e maiores que 20. Em exemplos futuros abordaremos melhor esta estratégia de categorização.

Notas sobre a sintaxe da DAX:

* Estou usando o operador IF, que apesar de simples é extremamente importante para se obter os resultados desejados.

* O operador de concatenação de strings é o &.

* Para me referir a uma tabela eu simplesmente digo o nome da mesma, para me referenciar a uma coluna utiliza-se: NomeTabela[NomeColuna].

* Operadores MAX e MIN (perceba que não são os novos MAXX e MINX, estes veremos em artigos futuros) calculam os valeres máximos e mínimos das colunas passadas como parâmetro a eles).

* Aninhei um segundo IF no parâmetro “else” do primeiro.

A expressão resultante é a seguinte (também pode ser observada na figura abaixo):

=IF(Tabela[Valor] < 10, MIN(Tabela[Valor]) & " |- 10", IF(Tabela[Valor] <= 20, "10 |- 20", "20 |- " & MAX(Tabela[Valor])))

image

Usar essa nova coluna (GrupoValor) como um slicer tornou a coisa bem mais interessante, não? :)

image

Agora seleciono a PivotTable e vou em “New Measure” lá na ribbon. E crio a seguinte expressão DAX (perceba que também aparece na PowerPivot Field List com um pequeno ícone ao lado):

=SUM(Tabela[Valor])

image

Adicione esta measure como valor na PivotTable e adicione a coluna GrupoValor como um slicer. Pronto! Selecione os slicers e veja que o valor total é alterado de acordo com o que foi marcado! :)

image image

Aguardem novos posts sobre DAX em um futuro (espero que) não muito distante!

Este artigo é parte de uma série de artigos sobre PowerPivot e DAX. Confira os outros artigos sobre PowerPivot no link: http://zavaschi.com/index.php/tag/powerpivot/

Abraços,
Thiago Zavaschi

Comments (2) Trackbacks (0)
  1. Grande iniciativa. Espero que tenha sucesso nessa empreitada

  2. Show de bola. Parabéns pela iniciativa. Aguardo ancioso mais posts.
    Abraço.

    Amarildo Reis – Uberlândia (MG)


Leave a comment


No trackbacks yet.