гистограмма в хранилище данных - PullRequest
1 голос
/ 13 марта 2011

Я получил тонну образцов в следующем формате:

 <timestamp> <dim1> <dim2> <dim3> 324
 <timestamp> <dim1> <dim2> <dim3> 3565
 <timestamp> <dim1> <dim2> <dim3> 122
 <timestamp> <dim1> <dim2> <dim3> 2333

324, 3565, ... это измерения, и я хотел бы сохранить их в хранилище данных.

Измерение будет округлено до ближайшей сотни (300, 3600, 100, 2300).

Как я могу сохранить это и быстро создать гистограмму фактов?

Один (плохой) способ - иметь столбец в таблице фактов для каждого «сегмента» (т. Е. 100, 200, 300, ...), а затем использовать SUM () в каждом столбце для построения гистограммы.Недостатки очевидны: таблица фактов будет огромной и негибкой (ограниченный диапазон выборок)

У кого-нибудь есть какие-нибудь умные идеи?

1 Ответ

0 голосов
/ 13 марта 2011

Ну, вы должны как-то дискретизировать.Один из способов - при условии, что ваши диапазоны сегментов не меняются часто - это добавить таблицу с диапазонами (dimBucket) и назначить ключ сегмента каждому значению во время ETL.Если диапазоны значений когда-либо изменяются, вся таблица фактов должна быть пересчитана для присвоения нового BucketKeys.Итак, что-то вроде этого - обратите внимание, что ValueRange это строка типа '100-199', '200-299', ...

SELECT
  ValueRange
, sum(SaleAmount)  AS SaleValue
, count(1)         AS Transactions
from factSale  AS f
JOIN dimBucket AS b ON b.BucketKey = f.BucketKey
GROUP BY ValueRange;

enter image description here

Мне сложно работать с универсальным <dim>, <dim>, <dim>, поэтому яЯ использовал мой собственный пример.

Другой способ - не думать об этом на уровне DW, а использовать аналитический пакет.Почти каждый пакет анализа / анализа данных предлагает несколько типов дискретизации.Попробуйте Weka , это с открытым исходным кодом и довольно хорошо; R тоже очень популярен.

...