Объединить факты из разных источников? Или загрузить отдельно?

StackOverflow https://stackoverflow.com/questions/227990

  •  03-07-2019
  •  | 
  •  

Вопрос

У нас есть данные двух разных источников: некоторые поступают от клиентов, некоторые от разных поставщиков. В настоящее время мы физически "сливаем" эти данные в массивную таблицу с почти сотнями столбцов, десятками тысяч строк и без формального разделения двух измерений. Следовательно, мы не можем использовать эту таблицу для многих.

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

Два измерения очевидны. Один из них, например, время.

Данные, предоставленные заказчиком, содержат ряд значений фактов. Каждый поставщик может (или не может) предоставлять дополнительные значения фактов, которые соответствуют тем же измерениям.

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

Вот моя дилемма.

Заполнена ли эта таблица фактов с несколькими нулями из разных источников?

Или это n +1 таблиц фактов - одна заполняется от клиента, другие заполняются от каждого поставщика?

У каждого дизайна есть свои плюсы и минусы. Мне нужно второе мнение о выборе между "объединить" или "загрузить отдельно".

<Ч>

Клиент предоставляет доход, стоимость, количество, вес и другие сведения, которые он знает о завершении транзакции.

Поставщик 1 предоставляет некоторые дополнительные сведения о некоторых транзакциях - весах, затратах, продолжительности. Другие транзакции не будут иметь значения от одного поставщика.

Поставщик два предоставляет некоторые дополнительные сведения о некоторых транзакциях - объемы, длительности, длины, курсы иностранных валют. Другие транзакции не будут иметь никакого значения для второго поставщика.

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

Одна таблица с нулями? Три стола?

Это было полезно?

Решение

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

Другие советы

Из того, что вы описали, звучит так, будто единственная таблица фактов - это путь.

Похоже, что таблица фактов будет иметь зерно времени x транзакция x клиент (?).

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

Пустые факты могут выдавать предупреждения во время агрегации (в зависимости от платформы), но альтернатива заполнения их возможно вводящими в заблуждение нулями хуже.

Я считаю, что, поскольку оба источника имеют одинаковое зерно, ответ заключается в том, что у вас должна быть одна таблица фактов. Подумайте, как вы хотите, чтобы ваши конечные пользователи взаимодействовали с информацией. Если это имеет смысл и бизнес-отчеты выиграют от того, что эти данные находятся в одном месте, тогда это ваш ответ. Попытайтесь избежать пустых значений в ваших таблицах фактов. Если вы можете ввести ноль (и ноль имеет смысл для данных, то есть думать о температуре), то сделайте это. Это избавит ваших пользователей от некоторой путаницы, и, как указал TrickyNixon, вызовет проблемы с агрегацией.

На самом деле вы находитесь в отличной точке в приложении «Brownfield». Вы можете посмотреть на то, что существует сегодня, и использовать опыт, чтобы создать лучший дизайн. Это самое важное время, чтобы выбрать лучшее зерно, которое, мы надеемся, не изменится в течение срока службы DW.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top