SQL vs DAX - Operações básicas
Nesta série de artigos vamos comparar operações básicas feitas no SQL e seus similares utilizando DAX. Se você já conhece SQL e está dando seus primeiros passos com PowerBI, estes artigos vão ser muito úteis para você.
Para acompanhar este artigo você vai precisar ter instalado os seguintes programas:
SQL Server Express
https://www.microsoft.com/pt-br/sql-server/sql-server-downloads
O SQL Server Express é a versão gratuita ideal para desenvolvimento e produção de aplicações de área de trabalho, Web e pequenos servidores.
Power BI Desktop
https://powerbi.microsoft.com/pt-br/downloads/
Com o Power BI Desktop, você pode explorar visualmente seus dados por meio de uma tela do tipo "arrastar e soltar" de formato livre, uma ampla variedade de visualizações de dados modernas e uma experiência de criação de relatórios fácil de usar.
DAX Studio
O DAX Studio é uma ferramenta muito útil para executar e analisar consultas DAX. Vamos utilizar ele em conjunto com o Power BI.
Primeiro vamos criar os dados que serão utilizados em nossos exemplos. No SQL Server, vamos criar uma tabela e inserir com informações.
CREATE TABLE Produtos(
[Nome] [varchar](50) NULL,
[Categoria] [varchar](50) NULL,
[Preco] [decimal](18, 2)
)
INSERT INTO Produtos (Nome, Categoria, Preco) VALUES ('Mouse','Informática',12.50);
INSERT INTO Produtos (Nome, Categoria, Preco) VALUES ('Teclado','Informática',30.00);
INSERT INTO Produtos (Nome, Categoria, Preco) VALUES ('Cadeira','Móveis',150.00);
INSERT INTO Produtos (Nome, Categoria, Preco) VALUES ('Estante','Móveis',200.00);
INSERT INTO Produtos (Nome, Categoria, Preco) VALUES ('Mesa','Móveis',267.18);
INSERT INTO Produtos (Nome, Categoria, Preco) VALUES ('Impressora','Informática',500.78);
INSERT INTO Produtos (Nome, Categoria, Preco) VALUES ('Fone de Ouvido','Informática',40.00);
INSERT INTO Produtos (Nome, Categoria, Preco) VALUES ('Sofá','Móveis',789.90);
Agora chegou a ver de criar nosso modelo de dados no Power BI. Ao abrir o Power BI, na lateral esquerda abaixo da barra de ferramentas temos 3 botões, Relatório, Dados e Modelo. Por padrão o programa abre na opção Relatório. Clique no botão "Dados".
Na barra de ferramentas "Ferramentas de Tabela", clique no botão "Nova Tabela", que fica na parte direita, agrupado com os botões de uma seção chamada "Cálculo".
Ao clicar neste botão, vai abrir uma tela para inserir uma expressão DAX, basta inserir a função e clicar no botão de confirmar que fica ao lado do painel onde você vai inserir suas instruções.
Para criar a tabela que vamos usar nos testes, insira o comando a seguir.
Produtos =
DATATABLE(
"Nome", STRING,
"Categoria", STRING,
"Preco", Currency,
{
{"Mouse","Informática",12.50},
{"Teclado","Informática",30.00},
{"Cadeira","Móveis",150.00},
{"Estante","Móveis",200.00},
{"Mesa","Móveis",267.18},
{"Impressora","Informática",500.78},
{"Fone de Ouvido","Informática",40.00},
{"Sofá","Móveis",789.90}
}
)
O comando DATATABLE recebe uma lista de campos (nome e tipo de dados), e na sequência uma lista de registros, que devem ser inseridos na mesma ordem em que os campos foram criados.
Os tipos de dados utilizados no DAX são os seguintes: Integer, Double, String, Boolean, Currency e DateTime.
Para executar as consultas em DAX será necessário abrir o DAX Studio. Ainda no modo de visualização de dados, na barra de ferramentas selecione a opção "Ferramentas Externas" e clique no botão do DAX Studio.
Uma outra alternativa e salvar o seu arquivo do Power BI é abrir o DAX Studio em separado. Ao abrir vai aparece a tela Connect. Selecione a opção "PBI/SSDT Model", que já deve estar com o nome do arquivo PowerBI que você criou. Ao clicar em connect, já abre o painel onde você pode digitar as suas consultas DAX.
Agora que temos dados de exemplo, chegou a hora de praticar!
Vamos começar com algo simples, como listar todos os dados da tabela que foi criada
SQL
SELECT * FROM Produtos
DAX
EVALUATE Produtos
Para executar as consultas no DAX Studio você deve clicar no botão RUN, o primeiro botão da esquerda na barra de ferramentas do Dax Studio
No DAX Studio para listar os dados da tabela usamos EVALUATE e a tabela que desejamos acessar. O EVALUATE vai ser utilizado antes de qualquer instrução que for executada no DAX Studio.
Caso seja necessário escolher as colunas que desejamos, podemos fazer da seguinte forma:
SQL
SELECT Nome, Categoria FROM PRODUTOS
DAX
EVALUATE
SELECTCOLUMNS(
'Produtos',
"Nome",[Nome],
"Categoria", [Categoria]
)
O comando SELECTCOLUMNS recebe como primeiro parâmetro o nome da tabela, e como parâmetros seguintes as colunas que desejamos. Primeiro informamos qual o alias (apelido) desejado e na sequência informamos o nome da coluna entre chaves.
Caso seja necessáro exibir um campo novo e fazer alguma operação podemos fazer assim
SQL
SELECT Nome, Categoria, Preco * 1.20 as Preco_novo FROM PRODUTOS
DAX
EVALUATE
SELECTCOLUMNS(
'Produtos',
"Nome",[Nome],
"Categoria", [Categoria],
"Preco_novo", [Preco] * 1.20
)
Perceba que o campo Preco_novo é a multiplação da coluna Preco por 1.20, o que vai gerar um valor 120% maior que o original.
Em nossa tabela de produtos temos registros de várias categorias. Caso seja necessário uma lista distinta de categorias podemos fazer de duas formas:
SQL
SELECT DISTINCT Categoria FROM produtos ORDER BY Categoria
DAX
EVALUATE
DISTINCT (Produtos[Categoria]) ORDER BY [Categoria]
EVALUATE
SUMMARIZE (
'Produtos',
[Categoria]
) ORDER BY [Categoria]
Como neste caso estamos retornando os dados distintos de apenas uma coluna, podemos usar a função DISTINCT e informar o nome da tabela e o campo desejado. No final utilizamos o comando ORDER BY para colocar em ordem alfabética os resultados.
Para resumir dados e trabalhar com mais de uma coluna usamos o comando SUMMARIZE. Ele recebe como primeiro parâmetro os dados de referência que em nosso caso é a tabela Produtos, e na sequência as colunas que desejamos resumir entre colchetes, em nosso campo o campo desejado é Categoria. No final do SUMMARIZE usamos o comando ORDER BY para ordenar os resultados pela coluna utilizada dentro do SUMMARIZE
Caso exista a necessidade de contar quantas categorias distintas existem em nossa tabela podemos fazer assim:
SQL
SELECT COUNT(DISTINCT Categoria) FROM produtos
DAX
EVALUATE
{DISTINCTCOUNT(Produtos[Categoria])}
Se você desejar retornar apenas alguns registros pode limitar os resultados da consulta desta forma:
SQL
SELECT TOP 2 * FROM Produtos;
DAX
EVALUATE
TOPN( 2, Tabela2 )
A função TOPN permite selecionar parte dos registros da tabela. Ele recebe 2 parâmetros, o primeiro é a quantidade de registros, o segundo são os dados de referência, em nosso caso a tabela Produtos.
SQL
SELECT COUNT(*) FROM Produtos
DAX
EVALUATE
{COUNTROWS (Produtos)}
A função COUNTROWS retorna a quantidade de registros da origem de dados informada.
No próximo artigo vamos ver como filtrar textos e números no DAX