Многомерное моделирование бизнес-аналитики: как преобразовать показатели в измерения?

Итак, вот что я планирую сделать: допустим, у нас есть типичная таблица фактов о продажах с типичными столбцами, такими как:

Date, SalesRep, Product, Region, Units, Amount

Теперь, достаточно просто, я могу просуммировать количество и сравнить его с регионом следующим образом:

Region      Sum of Revenue
------      --------------
North       56,234 $
South       48,788 $
East        38,787 $
West        15,334 $

Но что, если я хочу, чтобы это было по-другому, вот так:

Revenue range    Region
-------------    ------
>50,000          North
>25,000          South
                 East
>10,000          West

Это означало бы рассматривать количественные факты как измерение и наоборот, верно? Но как я могу преобразовать меры в измерения?

Любой толчок в правильном направлении будет приветствоваться.


person Prefect73    schedule 17.06.2014    source источник


Ответы (1)


Динамическое распределение значений:

http://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/diversity-modeling-techniques/dynamic-value-banding/

Отчет с динамическим диапазоном значений организован как серия заголовков строк отчета, которые определяют прогрессивный набор диапазонов разного размера целевого числового факта. Например, общий отчет о ранжировании значений в банке имеет много строк с такими метками, как «Остаток от 0 до 10 долларов», «Остаток от 10,01 до 25 долларов» и т. д.

Этот тип отчета является динамическим, поскольку заголовки определенных строк определяются во время запроса, а не во время обработки ETL. Определения строк могут быть реализованы в таблице измерений группировки малых значений, которая соединяется с таблицей фактов посредством соединений «больше чем/меньше чем», или определения могут существовать только в операторе SQL CASE.

Подход с диапазоном значений, вероятно, более эффективен, особенно в столбчатой ​​базе данных, потому что подход с оператором CASE включает в себя почти неограниченное сканирование отношений таблицы фактов.

Таблица размеров бандажей:

ID | RANGE_SET    | RANGE_NAME | RANGE_MIN    | RANGE_MAX
---|--------------|------------|--------------|---------------
1  | THREE_RANGES | >50,000    |  50,000.01 $ | 9,999,999.00 $
2  | THREE_RANGES | >25,000    |  25,000.01 $ |    50,000.00 $
3  | THREE_RANGES | >10,000    |  10,000.01 $ |    25,000.00 $
10 | BIG_SMALL    | Small      |       0.00 $ |   100,000.00 $
11 | BIG_SMALL    | Big        | 100.000.01 $ | 9,999,999.00 $

Столбец RANGE_SET позволяет хранить несколько наборов диапазонов в одной таблице измерений и используется для группировки определенных диапазонов.

Сводная таблица фактов:

Если вы имеете дело с большой таблицей фактов и динамический подход требует слишком много ресурсов, вы можете загрузить данные в агрегированную таблицу фактов и использовать сумму дохода для получения соответствующий групповой ключ.

REGION | BANDING_ID | SUM_OF_REVENUE
-------|------------|---------------
North  | 1          |       56,234 $
South  | 2          |       48,788 $
East   | 2          |       38,787 $
West   | 3          |       15,334 $
person Marek Grzenkowicz    schedule 17.06.2014
comment
Большое спасибо, Марек. Пример, который я выбрал, был довольно плохим, на самом деле я не хочу назначать агрегированные значения этим группированным измерениям, а факты на уровне строк. Итак, чтобы придерживаться примера, я хочу присвоить отдельные суммы разнесенным диапазонам. - person Prefect73; 18.06.2014
comment
@ Prefect73 Я не уверен, что следую. Вы хотите назначить каждую строку фактов (содержащую значение дохода) одному из диапазонов, определенных в измерении группировки? Вы можете сделать это, используя описанный выше подход, но классификация перестанет быть действительной, как только вы сгруппируете строки по регионам и свернете несколько строк, например. добавление двух строк >10,000 может привести к тому, что одна строка попадает в тот же диапазон (11 000 $ + 12 000 $) или >25,000 (15 000 $ + 16 000 $) — вам необходимо вычислить сумму и назначить диапазон динамически. Дайте мне знать, если я на правильном пути здесь. - person Marek Grzenkowicz; 18.06.2014
comment
но поскольку это был правильный ответ на неправильный вопрос, я, конечно, отмечаю его :) - person Prefect73; 18.06.2014