Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Time dimension / 16 сообщений из 16, страница 1 из 1
29.03.2004, 12:01
    #32460385
Docker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
Привет. Прошу прощения за ламерский вопрос. Но может кто подскажет.
В таблице, которая служит основой таблицы фактов, есть поле CreatedOn типа smalldatetime. Необходимо вернуть некоторую информацию за период с day1 до day2. Проблема в том, что в таблице фактов могут отсутствовать записи с CreatedOn равным day1 или day2. Как решаются такие вещи?

Заранее благодарен.
...
Рейтинг: 0 / 0
29.03.2004, 13:14
    #32460547
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
A vi uvereni v tom, chto vasha problema imeeit neposredstvennoe otnoshenie k OLAP.

Postavim vopros inache - kak vi eto sdelat v obichnom SQL?
...
Рейтинг: 0 / 0
30.03.2004, 10:33
    #32461800
Docker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
> A vi uvereni v tom, chto vasha problema imeeit neposredstvennoe otnoshenie k > OLAP. \r
\r
> Postavim vopros inache - kak vi eto sdelat v obichnom SQL? \r
\r
Прошу прощения, плохо написал. \r
В кубе есть time dimension с детализацией до дня. Необходимо получить отчет за некий период, задаваемый начальной и конечной датой, к примеру с 1.01.2001. до 10.01.2001. Проблема в том, что данных за 1 или 10 января может не существовать и значений [Time].[YQMD].[2001].[Quarter 1].[January].[1] или [Time].[YQMD].[2001].[Quarter 1].[January].[10] соответственно тоже.\r
\r
Такой же вопрос был задан тут. Но ответа там не нашел.\r
\r
В обычном SQL сделал бы так (получаю число заказов сделанных за период времени):\r
\r
SELECT COUNT(*)\r
FROM Orders\r
WHERE CreatedOn >= \'2001/01/01\' AND CreatedOn <= \'2001/01/10\'\r
\r
Огромное спасибо за отклик.
...
Рейтинг: 0 / 0
30.03.2004, 12:10
    #32462033
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
A u vas dlya Time Dimension est otdelnaya tablichka, gde ves kalendar (v razumnih predelah)? Togda u vas v izmerenii (v otlichie ot kuba) dolzhni suschestvovat vse dni.

Koroche, chto u vas yavlyaetsya Dimension Table dlya Time Dimension.
...
Рейтинг: 0 / 0
31.03.2004, 10:41
    #32463347
Docker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
> A u vas dlya Time Dimension est otdelnaya tablichka, gde ves kalendar (v
> razumnih predelah)? Togda u vas v izmerenii (v otlichie ot kuba) dolzhni
> suschestvovat vse dni.

> Koroche, chto u vas yavlyaetsya Dimension Table dlya Time Dimension.

Спасибо, я несколько переделал структуру. Теперь получается так:
есть таблица фактов Customer и Dimension Table для Time Dimension - Date. Они связаны по полям Customer:CreatedOn - Date:Date. В Date список дней с 1995 до 2010 года.
Но теперь получается такая проблема, что если, например, у некоторой записи в Customer поле CreatedOn равно "2.02.2000 13:45", то я не вижу эту запись когда просматриваю данные куба.
Я так понимаю, это потому что в Date:Date всегда имеет время равное 00:00, и "2.02.2000 13:45 " не может привязатся ни к одной записи из Date? Может это надо решать при закачке данных - округлять Customer:CreatedOn до дня?

Еще раз большое спасибо за вашу помощь.
...
Рейтинг: 0 / 0
31.03.2004, 10:55
    #32463386
Дмитрий Spb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
Один из вариантов решения:
1. В фактовой таблице создаете поле DateId int.
2. Создаете табличку типа
CREATE TABLE [dbo].[Calendar] (
[Id] [int] NOT NULL ,
[DateItem] [smalldatetime] NULL
) ON [PRIMARY]

ALTER TABLE [dbo].[Calendar] WITH NOCHECK ADD
CONSTRAINT [PK_Calendar] PRIMARY KEY CLUSTERED
(
[Id]
) ON [PRIMARY]
3. При закачке данных в хранилище проверяете в календаре наличие этого дня и при необходимости его добавляете, не забыв заполнить дырки за предыдущие дни (от последней меньшей даты до добавляемой).
4. В кубе делаете связку Calendar.Id <-> YouFacttable.DateId.
...
Рейтинг: 0 / 0
31.03.2004, 11:05
    #32463418
Docker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
> Один из вариантов решения:
> 1. В фактовой таблице создаете поле DateId int.

А что это значит? Добавить поле DateId в реляционную базу? Или можно как-то добавить свое поле непосредствнно в таблицу фактов (сори, если это бред)?
...
Рейтинг: 0 / 0
31.03.2004, 11:16
    #32463452
Валек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
а мож проще всего привести все к одному типу
или значение времени актуально
...
Рейтинг: 0 / 0
31.03.2004, 11:21
    #32463462
Дмитрий Spb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
Нормальной практикой является не прямой забор данных из oltp-базы, а предварительное помещение только необходимых данных в хранилище olap (одновременно выполняется очистка данных), а уже на его основе формирование и процессинг измерений и кубов. То есть создание некоторой промежуточной базы, которая будет относиться только к конкретной предметной области, в рамках которого и требуется применить ОЛАП-решение.
Вы ведь уже начали такое применять согласно ваших слов -
"Теперь получается так: есть таблица фактов Customer и Dimension Table для Time Dimension - Date". Dimension Table - где создано? В реляционной базе?

Еще один вариант - использовать в качестве фактовой таблицы не саму Customer, а ее представление, добавив в конце еще одно поле DateId на основе вашего поля Customer.CreatedOn.
...
Рейтинг: 0 / 0
31.03.2004, 14:08
    #32463901
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
Здесь посмотри: http://lissianski.narod.ru/tips/200005.html

------------
Best regards, Jimmy
...
Рейтинг: 0 / 0
31.03.2004, 18:52
    #32464668
Константин Лисянский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
А про инструмент, способный сильно сократить сроки построения измерения ВРЕМЯ можно почитать вот здесь:

http://lissianski.narod.ru/dimmod/dimmodfactsheet.html


С уважением,
Константин Лисянский
...
Рейтинг: 0 / 0
31.03.2004, 19:19
    #32464702
Дмитрий Spb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
Можно посмотреть:
http://www.sqljunkies.com/Article/D1E44392-592C-40DB-B80D-F20D60951395.scuk
...
Рейтинг: 0 / 0
01.04.2004, 11:01
    #32465058
Docker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
Спасибо огромное за помощь, вроде бы прояснилось. Единственное, наверное последний вопрос.

> Нормальной практикой является не прямой забор данных из oltp-базы, а
> предварительное помещение только необходимых данных в хранилище olap
> (одновременно выполняется очистка данных), а уже на его основе
> формирование и процессинг измерений и кубов. То есть создание некоторой > промежуточной базы, которая будет относиться только к конкретной
> предметной области, в рамках которого и требуется применить ОЛАП-
> решение.

Т.е. правильно ли я понял:
а) нормальная практика - это создание промежуточной реляционной базы, в которую будут закачиватся необходимые, обработанные данные. И на снове этой промежуточной базы и будет строится ОЛАП решение?

б) если верно а), то для ОЛАП стоит примеменить HOLAP модель хранения? Данные будут хранится в промежуточной базе...

б пока не так важен, так что я могу и сам покопаться.

> Вы ведь уже начали такое применять согласно ваших слов -
> "Теперь получается так: есть таблица фактов Customer и Dimension Table
> для Time Dimension - Date". Dimension Table - где создано? В реляционной
> базе?

Да, в реляционной базе создал табличку.

Спасибо.
...
Рейтинг: 0 / 0
01.04.2004, 15:07
    #32465694
Дмитрий Spb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
Да - вы правильно поняли. Имеет смысл создавать свою БД, предназначенную для закачки данных в кубы и измерения. В отличие от вашей реляционной (вы так называете свою оперативную БД), в ней хранятся только необходимые и подготовленные данные. В вашем примере - в вашей реляционной базе поле
CreatedOn может содержать либо дату и время создания документа в вашей учетной системе, либо дату и время создания собственно первичного документа, либо дату и время внесения (чужого) документа. Вариантов много. Вам для анализа, как правило, нужна определенность. Опять же, эта дата в неудобном формате. Преобразовав ее (01.03.2004) в формат 20040301 получаем новую таблицу, в которой можем сделать первичный ключ по этому полю (рекомендуется построение для каждой таблицы измерения первичного ключа) - одно измерение полностью готово.
Далее - создать куб можно как на основе таблицы существующей (в вашей оперативной базе или в созданной вами для нужд ОЛАПа), так и на основе ее представления. Все поля таблицы фактов, по которым есть измерения, должны быть связаны с таблицами измерений.
Применение разных типов Molap или Holap возможно как для реляционной (оперативной) базы, так и для построенной для нужд ОЛАП.
К плюсам своей БД ОЛАП можно отнести и тот факт, что реляционная (оперативная) БД периодически подрезается (как правило), а в своей можно хранить только необходимые данные, а при организации кубов через временные партиции и ее тоже можно подрезать - данные в кубе за удаленный период останутся.
...
Рейтинг: 0 / 0
01.04.2004, 15:20
    #32465727
Дмитрий Spb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
В продолжение ответа.
В своей БД заведите табличку DayOfWeek - два поля IdDay - день недели и NameDay - название дня недели. Заполните семь строк (можно ручками).
В фактовую таблицу добавьте поле DayOfWeekId и заполните его с помощь функции DATEPART(weekday, Orders.CreatedOn).

В результате будете иметь еще и анализ в рамках дней недели.
Успехов!
...
Рейтинг: 0 / 0
02.04.2004, 10:43
    #32466610
Docker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time dimension
Дмитрий, огромное спасибо за вашу помощь. Выяснил вопросов даже больше чем ожидал, причем сейчас это позарез надо было :) Спасибо.
И, мужики, спасибо всем, кто откликнулся, особенно backfire, терпеливо разбиравшемуся в моей писанине и не давшему этому топику кануть в лету.

С уважением,
Docker
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Time dimension / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]