1

Каков правильный способ моделирования данных в схеме звездочек, чтобы инструмент BI (например, PowerBI) мог выбирать диапазон дат, пересекающий несколько дней?Выбор данных через границы дня из схемы Star с отдельными размерами даты и времени

В настоящее время у меня есть таблицы фактов с отдельными размерами даты и времени. Мое временное разрешение - второе, разрешение даты - на день.

В настоящее время очень легко выполнить агрегацию, предоставляя данные, представляющие интерес, в один и тот же день или даже в течение нескольких полных дней, но становится намного сложнее, когда вы просите, скажем, 12-часовое окно, которое пересекает полуночную границу.

Да, я могу написать инструкцию SQL, чтобы сначала вытащить все строки за весь рассматриваемый день, а затем, сохранив фактическое время даты в качестве поля в таблице фактов, я могу далее фильтровать до фактического меня интересует диапазон времени, но это не тривиально (или, возможно, в некоторых случаях) делать в инструментариях отчетности BI.

Однако это должно быть частым сценарием в хранилищах данных ... Итак, как это сделать?

Примером может дать мне количество упорядоченных элементов из таблицы fact_orders между 2017/Jan/02 1600 и 2017/Янв/03 0400.

Заказы хранятся отдельно в таблице fact_orders.

В моем фактическом сценарии я использую базу данных Azure SQL, но это более общий вопрос дизайна.

спасибо.

ответ

1

Моим первым вариантом было бы (как вы упомянули в вопросе) включить расчетный столбец (Date + Time) в SQL-запрос, а затем отфильтровать временную часть внутри инструмента BI.

Если это не сработает, вы можете создать представление в базе данных для достижения такого же эффекта. Самое простое - взять полный объединенный SQL-запрос фактов + размеров, который вы хотите использовать в инструменте BI, и добавить столбец даты и времени в представление.

Обязательно по-прежнему фильтровать поле Date, чтобы использовать индекс! Таким образом, для скользящего окна, ваши параметры были бы что-то вроде

WHERE Date between 2017/Jan/02 AND 2017/Jan/03 AND DateTime between 2017/Jan/02 1600 and 2017/Jan/03 0400

Если не выполняет достаточно хорошо из-за объем данных, вы можете создать и поддерживать отдельную таблицу или материализованное представление (в зависимости на ваших опциях БД и ETL), который выполняет декартовое объединение измерения времени с небольшим диапазоном измерения даты (только на прошлой неделе или в какой-либо период, в котором вас интересуют неполные дневные отчеты), а затем присоединитесь к таблице фактов.

Таблица DateTimeWindow/view будет индексироваться в столбце DateTime и иметь только два дополнительных столбца: DateKey и TimeKey. Внутреннее соединение с таблицей фактов с использованием обоих ключей, и вы должны получить именно то окно, которое хотите, когда инструмент BI поставляет диапазон даты и времени.

1

Это нелегко смоделировать. Решение заключалось бы в создании дополнительного измерения с датой + временем. Конечно, это может означать, что вы должны строго ограничить детализацию измерения времени.

10 года час Зернистость: 365 * 10 * 24 = 87600 строк

10 года минут зернистость: 365 * 10 * 24 * 60 = 5256000 строк

Вы могли бы использовать именно этот размер, или (лучше) добавьте его и не показывайте его всем пользователям. Это означало бы дополнительный ключ в таблице фактов: если FT не гигантский, не имеет большого значения.