FC ConcursosFC Concursos

Questão FC295890

Um banco de dados multidimensional é frequentemente usado em análise OLAP (Online Analytical Processing) sendo orientado por dimensões, e não por tabelas isoladas como no modelo re

Linguagem SQL

CESGRANRIO · 2023

Um banco de dados multidimensional é frequentemente usado em análise OLAP (Online Analytical Processing) sendo orientado por dimensões, e não por tabelas isoladas como no modelo relacional puro. Nesse contexto, considere uma instância relacionada às vendas de uma loja de varejo. As dimensões, nesse caso, poderiam ser:

 

1. Tempo: Dias, Meses, Trimestres, Anos

2. Produto: ID do Produto, Nome do Produto, Categoria

3. Localização: Cidade, Estado, País

4. Vendedor: ID do Vendedor, Nome, Departamento

 

Esse banco de dados multidimensional pode ser visualizado como um “cubo” com quatro dimensões, onde cada dimensão forma um dos eixos. Os pontos dentro desse “cubo” representam valores específicos de medidas, como é o caso do total de vendas. Esses pontos podem também representar algo mais complexo envolvendo muitas dimensões como, por exemplo, as vendas do Produto P no Estado Q durante o Mês R por Vendedor S. Muitas vezes esses “cubos” são implementados em bancos de dados relacionais convencionais, de modo que os usuários possam usar linguagens amplamente conhecidas, como é o caso da linguagem de consultas SQL. Para isso, é necessário modelar tabelas de dimensão e de fato:

 

1. DimensaoTempo: com colunas tais como TempoID, Mes, Ano

2. DimensaoProduto: com colunas tais como ProdutoID, NomeProduto, Categoria

3. DimensaoLocalizacao: com colunas tais como LocalizacaoID, Cidade, Estado, País

4. FatoVendas: com colunas tais como TempoID, ProdutoID, LocalizacaoID, TotalVendas

 

Com base nas tabelas deste esquema relacional em particular, que representam um banco de dados multidimensional, considere que se deseja fazer a seguinte consulta de tipo “slice and dice”:

 

“Quanto foi vendido em termos de valor total nas categorias ‘Eletrônicos’

e ‘Roupas’ no estado de ‘Pernambuco’ durante o ano de 2022?”

 

A expressão SQL que responde a essa consulta é

  1. SELECT p.Categoria, SUM(f.TotalVendas)

    FROM FatoVendas f

    WHERE f.ProdutoID IN ('Eletrônicos', 'Roupas')

    AND f.TempoID = '2022' AND f.LocalizacaoID = 'Pernambuco'

    GROUP BY p.Categoria;

  2. SELECT p.Categoria, SUM(TotalVendas) AS VendasTotais

    FROM FatoVendas f

    JOIN DimensaoTempo t ON f.TempoID = t.TempoID

    WHERE p.Categoria IN ('Eletrônicos', 'Roupas')

    AND t.Ano = 2022

    AND l.Estado = 'Pernambuco'

    GROUP BY p.Categoria;

  3. SELECT p.Categoria, COUNT(f.TotalVendas) AS VendasTotais

    FROM FatoVendas f

    JOIN DimensaoProduto p ON f.ProdutoID = p.ProdutoID

    JOIN DimensaoLocalizacao l ON f.LocalizacaoID = l.LocalizacaoID

    WHERE (p.Categoria = 'Eletrônicos' OR p.Categoria = 'Roupas')

    AND l.Estado = 'Pernambuco'

    GROUP BY p.Categoria;

  4. SELECT p.Categoria, SUM(f.TotalVendas) AS VendasTotais

    FROM FatoVendas f

    JOIN DimensaoTempo t ON f.TempoID = t.TempoID

    JOIN DimensaoProduto p ON f.ProdutoID = p.ProdutoID

    JOIN DimensaoLocalizacao l ON f.LocalizacaoID = l.LocalizacaoID

    WHERE (p.Categoria = 'Eletrônicos' OR p.Categoria = 'Roupas')

    AND t.Ano = 2022 AND l.Estado = 'Pernambuco'

    GROUP BY p.Categoria;

  5. SELECT p.Categoria, SUM(f.TotalVendas)

    FROM FatoVendas f

    JOIN DimensaoProduto p ON f.ProdutoID = p.ProdutoID

    WHERE (p.Categoria = 'Eletrônicos' OR p.Categoria = 'Roupas')

    AND f.TempoID = (SELECT TempoID FROM DimensaoTempo WHERE Ano = '2022')

    GROUP BY p.Categoria;

Mostrar resposta e comentário

Gabarito

D

Comentário do professor

A consulta apresentada realiza a operação de slice (filtrar ano e estado) e dice (agregar por categoria) sobre o esquema fato/dimensões. As JOINs ligam a tabela FatoVendas às dimensões DimensaoTempo, DimensaoProduto e DimensaoLocalizacao usando as chaves estrangeiras, garantindo que cada linha de fato seja corretamente contextualizada.

O campo selecionado \(p.Categoria\) identifica o agrupamento, enquanto a função \(SUM(f.TotalVendas)\) calcula o total por categoria. Os filtros em WHERE — \(p.Categoria = 'Eletrônicos' \;OR\; p.Categoria = 'Roupas'\), \(t.Ano = 2022\) e \(l.Estado = 'Pernambuco'\) — restringem o cubo às fatias desejadas.

Finalmente, o GROUP BY p.Categoria produz uma linha por categoria com o respectivo total de vendas, atendendo exatamente ao enunciado da consulta.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo