Мне кажется, что, учитывая текущую имеющуюся у вас схему, вам нужно будет извлечь соответствующие временные идентификаторы из таблицы измерения времени, которые соответствуют вашим критериям поиска, а затем выполнить поиск соответствующих строк в таблице фактов.В зависимости от степени детализации вашего измерения времени, вы можете захотеть проверить производительность выполнения любого из них (примеры SQL Server):
Подвыбор :
ВЫБРАТЬ X ИЗ FOO, ГДЕ ВРЕМЯ ВХОДИТ (ВЫБЕРИТЕ ID ИЗ РАЗМЕРА, ГДЕ ЧАС> = DATEPART (ЧАС, CURRENT_TIMESTAMP ()) И DATEID В (ВЫБЕРИТЕ ID ИЗ DIMDATE ГДЕ ДАТА = GETDATE ())
Внутреннее объединение :
ВЫБЕРИТЕ X ИЗ ФИЛЬМА ВНУТРИ FOO DIMTIME ВРЕМЯ = DIMTIME.ID ГДЕ ЧАС> = DATEPART (HOUR, CURRENT_TIMESTAMP ()) INNER JOIN DIMDATE ON DATEID =DIMDATE.ID WHERE DATE = GETDATE ()
Ни один из этих вариантов не является действительно привлекательным.
Считаете ли вы, что вы можете запрашивать куб, предназначенный дляанализ свертки и не обязательно для анализа «последнего Х»?
Если это не куб свертывания, я согласен с другими постерами в том, что вам следует перепечатывать таблицы фактов с помощьюлучше ключи, и если вы на самом деле намеренычтобы часто выполнять поиск в нерабочее время, вам, вероятно, следует включить это в таблицу фактов, поскольку любая другая попытка, вероятно, сделает запрос неразборчивым (см. Что делает оператор SQL доступным для обработки? ).
Microsoft рекомендует в http://msdn.microsoft.com/en-us/library/aa902672%28v=sql.80%29.aspx что:
В отличие от суррогатных ключей, используемых в других таблицах измерений, ключи измерений даты и времени должны быть «умными». Рекомендуемый ключ дляизмерение даты имеет форму "ггггммдд".Этот формат легко запомнить и включить в запросы.Это также рекомендуемый формат суррогатного ключа для таблиц фактов, которые разбиты на несколько таблиц по дате.
Удачи!