У меня есть таблица фактов накопительного снимка, которая отслеживает вход и выход контейнеров в терминале .
Контейнеры могут входить и выходить тремя различными способами , поэтому я подумал о создании определенной таблицы измерений, в которой перечислены эти 3 возможных пути ( поезд, судно или грузовик ).
Затем я прочитал эту статью, в которой в основном говорится, что эта техника неправильна, но я не могу понять, почему.
Первая статья:
Иногда, когда таблица фактов содержит длинный список фактов, которые редко заполняются в какой-либо отдельной строке, возникает соблазн создать измерение типа меры, которое сворачивает строку таблицы фактов до одного общего факта, идентифицируемого измерением типа меры. Мы обычно не рекомендуем такой подход. Хотя он удаляет все пустые столбцы фактов, он умножает размер таблицы фактов на среднее число занятых столбцов в каждой строке и значительно усложняет вычисления внутри столбцов. Этот метод является приемлемым, когда число потенциальных фактов является предельным (в сотнях), но к любой данной строке таблицы фактов будет применимо меньше, чем несколько.
Я понимаю, что если для таблицы фактов транзакции реализовано « Измерение типа измерения », это может создать проблемы, как в этой статье , но я не вижу никаких недостатков, если использовать их для факта накапливающегося снимка .
Вторая статья: (некоторые недостатки реализации «Измерения типа измерения»)
- [...] Если мы будем использовать «Измерение типа измерения», мы потеряем эту аналитическую способность. Если одна мера не совместима с другими мерами, мы не можем их сложить.
- [...] Чем больше проходов нужно выполнить нашему SQL для создания отчета, тем медленнее будет отчет.
- [...] В инструменте BI, если вы не включите фильтр типа меры, вы рискуете получить «мусорную информацию». С точки зрения удобства использования этот дизайн - мусор.
Ответ на ответ Марка Стори-Смита
Очень хороший подход, я бы никогда не подумал об этом.
Другое дело: каждый въезд и выезд транспортного средства, которое доставляет контейнер в терминал, имеет уникальный идентификатор, который дает мне другую информацию, такую как: ожидаемое прибытие транспортного средства, фактическое прибытие, если это судно, стоянка в доке, если это грузовик, сборная и много другой информации ...
Это 3 разные таблицы фактов, и они должны быть как-то связаны с таблицей фактов контейнера.
Я думал, что идентификатор рейса - это a degenerate dimension
, поэтому он напрямую попадет в таблицу фактов контейнера. Итак, я сомневаюсь: нужно ли мне добавить 6 различных полей в таблицу фактов контейнера (vessel_voyage_in_key, vessel_voyage_out_key, train_voyage_in_key, train_voyage_out_key, truck_voyage_in_key, truck_voyage_out_key) или только 2 других поля (voyage_in, Voyage_out, Voyage_out)?
Я надеюсь, что мои сомнения ясны, спасибо.