Каждая таблица фактов имеет зерна . зерна таблицы фактов указывает, что представляет каждая строка таблицы - одна транзакция или какой-либо агрегат (ежедневно, еженедельно, ежемесячно ..).
Я полагаю, что ваш текущийТаблицы являются агрегированными и, как это обычно бывает в этих случаях, каждая запись в агрегированной таблице имеет внешний ключ к измерению даты, указывающий на конец периода.Так, например, каждая запись в недельной сводной таблице имеет одну строку в неделю и указывает на последний день недели (суббота или воскресенье).Обратите внимание, что наличие другого ключа для начала этого периода будет просто избыточным.
Теперь, если вы хотите обеспечить гибкость периодической отчетности, вы должны рассмотреть таблицу зерна одной транзакции, другими словами, одна строка в таблице должна быть одной транзакциейи любая дата / время FK указывает на время фактической транзакции.
неправильный подход будет состоять в том, чтобы смешивать зерна в одной таблице.Рассмотрим следующее
FromDateKey ToDateKey Amount
20110327 20110402 700.0
20110329 20110330 200.0
Любой sum()
, который будет включать обе строки, будет дважды считать вторую запись, которая уже включена в первую.
Подводя итог, если ваш ежемесячныйквартальные и годовые агрегации недостаточно точны, просто представьте таблицу фактов с более мелким зерном - агрегат за один день или одна транзакция.