Pergunta

Para começar, não estou familiarizado com OLAP; portanto, se a terminologia estiver errada, sinta-se à vontade para oferecer correções.

Estou lendo sobre OLAP e parece que se trata de trocar espaço por velocidade, em que você pré-calcula (ou calcula sob demanda) e armazena agregações sobre seus dados, diferenciadas por determinadas dimensões.Entendo como isso funciona para dimensões que possuem um conjunto discreto de valores, como { Masculino, Feminino } ou { Jan, Fev, ...dezembro} ou {@US_STATES}.Mas e as dimensões que possuem valores completamente arbitrários como (0, 1,25, 3,14156, 70000,23, ...)?

O uso do OLAP impede o uso de agregações em consultas que atingem as tabelas de fatos ou é usado apenas para ignorar coisas que podem ser pré-calculadas?Tipo, agregações arbitrárias em valores arbitrários ainda precisam ser feitas rapidamente?

Qualquer outra ajuda para aprender mais sobre OLAP seria muito apreciada.À primeira vista, tanto o Google quanto o SO parecem um pouco secos (em comparação com outros tópicos mais populares).

Editar:Foi solicitada uma dimensão na qual existem valores arbitrários.

  • VELOCIDADE dos experimentos:1,256 m/s, -2,234 m/s, 33,78 m/s
  • VALOR das transações:US$ 120,56, US$ 22,47, US$ 9,47
Foi útil?

Solução

Seus exemplos de velocidade e coluna de valor geralmente não são o tipo de colunas que você consultaria de uma maneira OLAP - são os valores que você está tentando recuperar e presumivelmente estaria no conjunto de resultados, como linhas individuais ou agregadas.

No entanto, eu disse usualmente. Em nosso esquema OLAP, temos um bom exemplo de coluna em que você está pensando: Event_time (um campo de encontro, com granualidade ao segundo). Em nossos dados, será quase único - não haverá dois eventos no mesmo segundo, mas como temos anos de dados em nossa tabela, o que ainda significa que existem centenas de milhões de valores potencialmente discretos e quando executamos nosso Consultas OLAP, quase sempre queremos restringir com base em intervalos de tempo.

A solução é fazer o que David Raznick disse - você cria uma versão "bucketed" do valor. Portanto, em nossa tabela, além da coluna Event_time, temos uma coluna Event_time_bucketed - que é apenas a data do evento, com a parte do tempo sendo 00:00:00. Isso reduz a contagem de valores distintos de centenas de milhões para alguns milhares. Então, em todas as consultas que restringem a data, restringimos a coluna e a coluna real (já que a coluna do balde não será precisa o suficiente para nos dar o valor real), por exemplo:

   WHERE event_time BETWEEN '2009.02.03 18:32:41' AND '2009.03.01 18:32:41'
     AND event_time_bucketed BETWEEN '2009.02.03' AND '2009.03.01'

Nesses casos, o usuário final nunca vê a coluna Event_time_bucketed - ele está lá para otimização de consultas.

Para valores de ponto flutuante como você mencionado, a estratégia de bucketing pode exigir um pouco mais de reflexão, pois você deseja escolher um método que resultará em uma distribuição relativamente uniforme dos valores e que preserva a contiguidade. Por exemplo, se você tem uma distribuição clássica de sino (com caudas que podem ser muito longas), deseja definir o alcance onde a maior parte da população vive (digamos, 1 ou 2 desvios padrão da média), divida -o em uniforme Buckets e crie mais dois baldes para "tudo menor" e "tudo maior".

Outras dicas

Achei este link útil http://www.ssas-info.com/

Confira a seção de webcasts onde eles orientam você em diferentes aspectos, desde o que é BI, armazenamento até projetar um cubo, dimensões, cálculos, agregações, KPIs, perspectivas etc.

Nas agregações OLAP auxiliam na redução do tempo de resposta da consulta por terem valores pré-calculados que seriam utilizados pela consulta.No entanto, o outro lado é o aumento do espaço de armazenamento, pois seria necessário mais espaço para armazenar agregações além dos dados de base.

O SQL Server Analysis Services possui o Usage Based Optimization Wizard que ajuda no design de agregação analisando consultas que foram enviadas por clientes (clientes de relatórios como SQL Server Reporting Services, Excel ou qualquer outro) e refinando o design de agregação de acordo.

Eu espero que isso ajude.

saúde

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top