Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
Привет. Прошу прощения за ламерский вопрос. Но может кто подскажет. В таблице, которая служит основой таблицы фактов, есть поле CreatedOn типа smalldatetime. Необходимо вернуть некоторую информацию за период с day1 до day2. Проблема в том, что в таблице фактов могут отсутствовать записи с CreatedOn равным day1 или day2. Как решаются такие вещи? Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 12:01 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
A vi uvereni v tom, chto vasha problema imeeit neposredstvennoe otnoshenie k OLAP. Postavim vopros inache - kak vi eto sdelat v obichnom SQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 13:14 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
> 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 Огромное спасибо за отклик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2004, 10:33 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2004, 12:10 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
> 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 до дня? Еще раз большое спасибо за вашу помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 10:41 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
Один из вариантов решения: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 10:55 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
> Один из вариантов решения: > 1. В фактовой таблице создаете поле DateId int. А что это значит? Добавить поле DateId в реляционную базу? Или можно как-то добавить свое поле непосредствнно в таблицу фактов (сори, если это бред)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 11:05 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
а мож проще всего привести все к одному типу или значение времени актуально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 11:16 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
Нормальной практикой является не прямой забор данных из oltp-базы, а предварительное помещение только необходимых данных в хранилище olap (одновременно выполняется очистка данных), а уже на его основе формирование и процессинг измерений и кубов. То есть создание некоторой промежуточной базы, которая будет относиться только к конкретной предметной области, в рамках которого и требуется применить ОЛАП-решение. Вы ведь уже начали такое применять согласно ваших слов - "Теперь получается так: есть таблица фактов Customer и Dimension Table для Time Dimension - Date". Dimension Table - где создано? В реляционной базе? Еще один вариант - использовать в качестве фактовой таблицы не саму Customer, а ее представление, добавив в конце еще одно поле DateId на основе вашего поля Customer.CreatedOn. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 11:21 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
А про инструмент, способный сильно сократить сроки построения измерения ВРЕМЯ можно почитать вот здесь: http://lissianski.narod.ru/dimmod/dimmodfactsheet.html С уважением, Константин Лисянский ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 18:52 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
Можно посмотреть: http://www.sqljunkies.com/Article/D1E44392-592C-40DB-B80D-F20D60951395.scuk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 19:19 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
Спасибо огромное за помощь, вроде бы прояснилось. Единственное, наверное последний вопрос. > Нормальной практикой является не прямой забор данных из oltp-базы, а > предварительное помещение только необходимых данных в хранилище olap > (одновременно выполняется очистка данных), а уже на его основе > формирование и процессинг измерений и кубов. То есть создание некоторой > промежуточной базы, которая будет относиться только к конкретной > предметной области, в рамках которого и требуется применить ОЛАП- > решение. Т.е. правильно ли я понял: а) нормальная практика - это создание промежуточной реляционной базы, в которую будут закачиватся необходимые, обработанные данные. И на снове этой промежуточной базы и будет строится ОЛАП решение? б) если верно а), то для ОЛАП стоит примеменить HOLAP модель хранения? Данные будут хранится в промежуточной базе... б пока не так важен, так что я могу и сам покопаться. > Вы ведь уже начали такое применять согласно ваших слов - > "Теперь получается так: есть таблица фактов Customer и Dimension Table > для Time Dimension - Date". Dimension Table - где создано? В реляционной > базе? Да, в реляционной базе создал табличку. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 11:01 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
Да - вы правильно поняли. Имеет смысл создавать свою БД, предназначенную для закачки данных в кубы и измерения. В отличие от вашей реляционной (вы так называете свою оперативную БД), в ней хранятся только необходимые и подготовленные данные. В вашем примере - в вашей реляционной базе поле CreatedOn может содержать либо дату и время создания документа в вашей учетной системе, либо дату и время создания собственно первичного документа, либо дату и время внесения (чужого) документа. Вариантов много. Вам для анализа, как правило, нужна определенность. Опять же, эта дата в неудобном формате. Преобразовав ее (01.03.2004) в формат 20040301 получаем новую таблицу, в которой можем сделать первичный ключ по этому полю (рекомендуется построение для каждой таблицы измерения первичного ключа) - одно измерение полностью готово. Далее - создать куб можно как на основе таблицы существующей (в вашей оперативной базе или в созданной вами для нужд ОЛАПа), так и на основе ее представления. Все поля таблицы фактов, по которым есть измерения, должны быть связаны с таблицами измерений. Применение разных типов Molap или Holap возможно как для реляционной (оперативной) базы, так и для построенной для нужд ОЛАП. К плюсам своей БД ОЛАП можно отнести и тот факт, что реляционная (оперативная) БД периодически подрезается (как правило), а в своей можно хранить только необходимые данные, а при организации кубов через временные партиции и ее тоже можно подрезать - данные в кубе за удаленный период останутся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 15:07 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
В продолжение ответа. В своей БД заведите табличку DayOfWeek - два поля IdDay - день недели и NameDay - название дня недели. Заполните семь строк (можно ручками). В фактовую таблицу добавьте поле DayOfWeekId и заполните его с помощь функции DATEPART(weekday, Orders.CreatedOn). В результате будете иметь еще и анализ в рамках дней недели. Успехов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 15:20 |
|
||
|
Time dimension
|
|||
|---|---|---|---|
|
#18+
Дмитрий, огромное спасибо за вашу помощь. Выяснил вопросов даже больше чем ожидал, причем сейчас это позарез надо было :) Спасибо. И, мужики, спасибо всем, кто откликнулся, особенно backfire, терпеливо разбиравшемуся в моей писанине и не давшему этому топику кануть в лету. С уважением, Docker ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 10:43 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=32462033&tid=1872729]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 401ms |

| 0 / 0 |
