Измерение хранилища данных для графиков (Dimensional Modeling) - PullRequest
0 голосов
/ 05 июля 2019

Я не нашел пример или способ построения измерения, которое содержит атрибуты расписания. Например, в моем сценарии я создаю хранилище данных, которое поможет собирать аналитику по эпизодам подкастов и радиошоу.

У нас есть следующее:

  • dim_episode
  • dim_podcast_show
  • dim_date
  • fact_user_daily_activity

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

dim_show_schedule (вариант 1)

| schedule_key | show_key | time  | sunday_flag | monday_flag | tuesday_flag | wednesday_flag | thursday_flag | friday_flag | saturday_flag |
|--------------|----------|-------|-------------|-------------|--------------|----------------|---------------|-------------|---------------|
| 1            | 0        | 00:30 | 0           | 0           | 1            | 0              | 1             | 0           | 0             |
| 2            | 1        | 12:30 | 0           | 1           | 1            | 1              | 1             | 1           | 0             |
| 3            | 2        | 21:00 | 0           | 0           | 0            | 0              | 0             | 0           | 1             |

Однако было бы лучше иметь таблицу моста с чем-то вроде:

bridge_show_schedule (вариант 2)

| show_key | day_key |
|----------|---------|
| 0        | 2       |
| 0        | 4       |
| 1        | 1       |
| 1        | 2       |
| 1        | 3       |
| 1        | 4       |
| 1        | 5       |

dim_show_schedule (вариант 3) (предложено @nsousa)

| schedule_key | show_key | time  | day         | 
|--------------|----------|-------|-------------|
| 1            | 0        | 00:30 | tuesday     |
| 1            | 0        | 00:30 | thursday    |
| 2            | 1        | 12:30 | monday      |
| 2            | 1        | 12:30 | tuesday     |
| 2            | 1        | 12:30 | wednesday   |
| 2            | 1        | 12:30 | thursday    |
| 2            | 1        | 12:30 | friday      |
| 3            | 2        | 21:00 | saturday    |

Я искал в инструментарии жизненного цикла хранилища данных Kimball и не смог найти пример для этого варианта использования.

Есть мысли?

Ответы [ 2 ]

1 голос
/ 06 июля 2019

Если вы сохраняете измерение со строковым атрибутом, сообщающим, в какие дни он включен, например, «M, W, F», то у вас больше всего записей 2 ^ 7, 128. Таблица мостов - ненужное усложнение.

0 голосов
/ 17 июля 2019

Вариант 1

Вы можете создать запланированное измерение, которое имеет уникальную запись для каждого возможного расписания (128 ежедневных комбинаций) в сочетании с любым разумным временем начала. Использование 5-минутных интервалов будет по-прежнему меньше 37 тыс. Строк, что для измерения тривиально.

Вариант 2

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

Я бы выбрал вариант 2, поскольку он предоставляет гораздо больше возможностей для аналитики.

...