Do SQL para o DAX: Unindo tabelas

 

A linguagem SQL, oferece varios tipos de JOIN, entre eles:

  • INNER JOIN
  • OUTER JOIN
  • CROSS JOIN

O resultado de um JOIN não depende da presença de um relacionamento no modelo de dados. Você pode usar qualquer coluna de uma tabela em uma condição JOIN.

No DAX, existem duas maneiras de obter um comportamento de JOIN.  Primeiro, você pode aproveitar os relacionamentos existentes no modelo de dados para consultar dados incluídos em tabelas diferentes, da mesma maneira que escreve as condições de JOIN correspondentes na consulta DAX.  Segundo, você pode escrever expressões DAX produzindo um resultado equivalente a certos tipos de JOIN.

Em qualquer caso, nem todas as operações de JOIN disponíveis no SQL são suportadas no DAX.

Usando relacionamentos em um modelo de dados

A abordagem comum para obter um comportamento de JOIN no DAX é implicitamente usando os relacionamentos existentes. Por exemplo, considere um modelo simples com as tabelas Sales, Product e Date.  Existe uma relação entre Vendas e cada uma das outras três tabelas. Se você quiser ver a quantidade de vendas dividida por ano e cor do produto, você pode escrever:

EVALUATE
ADDCOLUMNS (
    SUMMARIZE (
        Sales,
        'Date'[Year],
        Product[Color]
    ),
    "Total Quantity", CALCULATE ( SUM ( Sales[Quantity] ) )
)

As três tabelas são unidas automaticamente usando uma LEFT JOIN entre a tabela Sales (usada na expressão para a coluna Total Quantity) e as outras duas tabelas, Date e Product.


SELECT d.Year, p.Color, SUM ( s.Quantity ) AS [Total Quantity]

FROM Sales s

LEFT JOIN Date d ON d.DateKey = s.DateKey

LEFT JOIN Product p ON p.ProductKey = s.ProductKey

GROUP BY d.Year, p.Color

Observe que a direção do LEFT JOIN é entre Sales e Date, portanto, todas as linhas incluídas na tabela Sales que não possuem uma linha correspondente em Date ou em Product são agrupadas em um valor BLANK (que corresponde ao conceito de NULL no SQL).

Se você não deseja agregar linhas, pode simplesmente usar RELATED para acessar as colunas nas tabelas de consulta (no lado “um” do relacionamento). Por exemplo, considere a seguinte sintaxe no SQL:

SELECT
    s.*, d.Year, p.Color
FROM
    Sales s
    LEFT JOIN Date d ON d.DateKey = s.DateKey
    LEFT JOIN Product p ON p.ProductKey = s.ProductKey

Você obtém o mesmo comportamento usando a seguinte consulta DAX:

EVALUATE
ADDCOLUMNS (
    Sales,
    "Year", RELATED ( 'Date'[Year] ),
    "Color", RELATED ( Product[Color] )
)

Você pode obter um comportamento semelhante a um INNER JOIN aplicando um filtro ao resultado dos ADDCOLUMNS que você viu até agora, removendo as linhas que possuem um valor em branco na tabela de consulta – supondo que o espaço em branco não seja um valor que você possa ter encontrado nessa coluna.

Você não pode obter um comportamento CROSS JOIN no DAX apenas aproveitando os relacionamentos no modelo de dados.

 

Fonte:

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *