Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
Уважаемые практики! Поделитесь, пожалуйста, рекомендациями по вопросу как спроектировать ХД, чтобы учесть изменения в фактах и измерениях? Для простоты возьмём лишь следующие сущности: -- измерения (первые три – это parent-child) 1. компании (key_company, companyName, …) 2. договора (key_treaty, key_company, treatyNumber, acceptDate, status, ….) 3. условия договора (позиции) (key_position, key_treaty, currency, startDate, endDate, positionType,…) 4. отчётные периоды (key_date, date,…) -- факты начисления (key_position, key_date, premium, premiumRub,…) Многоточие означает, что в таблице есть другие атрибуты и меры. Начнём с измерений: (1). Компании могут: - просто изменять своё название - закрываться (переставать существовать) - две объединяться в одну (по каким-то причинам в OLTP-системе введены дважды или действительно юридически объединяться) В OLTP-системе ведётся учёт того, когда, что произошло с компанией – есть подчинённая таблица в которой (key_company, oldCompanyName-прежнее наимнование, dateChange дата актуальности по, cause - причина) (3). В условиях договора могут изменяться валюта (currency) и/или период действия позиции (startDate, endDate) Сводные (агрегированные) данные о начислениях попадают в бухгалтерский баланс. В связи с этим есть понятие закрытие периода. В OLTP-системе если необходимо изменить валюту начисленной премии, период действия позиции или собственно сумму премии, то ВСЕ изменения осуществляются в следующем за закрытым отчётном периоде, при этом в следующем отчётном периоде вводится разница между тем что было и как должно быть. При анализе, при формировании отчётности необходимо получать такую картину, которая была по состоянию на тот момент. Так, -- по состоянию на 01.01.2005 компания «Альфа» именовалась «Альфа» и по ней начислено премии 10К USD (30 000руб) -- по состоянию на 01.04.2005 она стала именоваться «Бета» и премии по ней начислено 10К EUR (35 000руб) -- по состоянию на 01.07.2005 премии начислено 5К EUR (17 000руб) (поскольку было сторнирование начисления) Как должны выглядеть хранилище данных – добавлены ли доп. таблицы или добавлены поля? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 12:35 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
На первый взгляд - типичные SCD, соответственно - стандартные методы решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 12:42 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
To Виктор Сакович: а где про эти решения можно почитать? Вчера весь вечер сидел форум листал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 13:01 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
Читайте Дедушку Кимбела ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 13:24 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
DHW-вопросикTo Виктор Сакович: а где про эти решения можно почитать? Вчера весь вечер сидел форум листал... Почитайте форум, например: это ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 13:27 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
То LJack: Про Кмбела слышал, но лично не знаком, где его труды вязть почитать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 13:49 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
Пишите на email, вышлю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 13:59 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
DHW-вопросика где про эти решения можно почитать? Вчера весь вечер сидел форум листал... Вот про SCD ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 14:03 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
To EugenT: статья хорошая, но где картинки??????????? они так важны для понимания, поскольку не догоняю пока что - а где и как должна записываться дата (по второму методу SCD)? какие образом измерение времени привязывается к Sales_Person_Dimension или к таблице фактов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 15:20 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
DHW-вопросикстатья хорошая, но где картинки??????????? они так важны для понимания, поскольку не догоняю пока что - а где и как должна записываться дата (по второму методу SCD)? какие образом измерение времени привязывается к Sales_Person_Dimension или к таблице фактов? Насчет картинок - это к админам данного сайта, может они у них где-то есть. А вообще из описаний рисунков можно самому все нарисовать для понимания - тогда все станет более ясно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 16:31 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
Виктор СаковичНа первый взгляд - типичные SCD, соответственно - стандартные методы решения. Ну-ну. Отслеживание изменения структуры иерархии стандартными методами SCD не решаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 17:23 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
есть как минимум 2 способа 1. для каждого изменения делате запись с полями от и до. и для одной признак "активная/последняя версия". Для кубов будете делать вьюхи с джойном типа "дата факта" между "от" и "до" 2. делайте все схемы звёздами. т.е. во все таблицы фактов добавьте поля всех связанных таблиц. т.е. в кубе будет ровно одна таблица, в которой значения полей представляют собой значения связанных таблиц на момент факта выбор метода в основном зависит от объёмов имеющихся у вас данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2006, 13:52 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
Андрей Прохоров Виктор СаковичНа первый взгляд - типичные SCD, соответственно - стандартные методы решения. Ну-ну. Отслеживание изменения структуры иерархии стандартными методами SCD не решаются.дело в задаче. если задача стоит "отслеживать изменения структуры иерархии", тогда вы правы. а если надо получать многомерную отчётность в условиях измененяющихся измерений, то SCD - самое оно. только в каждом конкретном случае надо выбрать правильный тип SCD и его реализацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2006, 13:54 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
более правильная ссылка на статью Людке с картинками - http://www2.osp.ru/win2000/sql/2000/03/310.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 09:40 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
To Peter Kirillow: спасибо за уточнение ссылки То Dmitry Biryukov: Да, мне потребуется проводить анализ фактов начислений на некоем достаточно большом интервале времени, в течение которого компании могли объединиться, удаляться, добавляться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 14:53 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
DHW-вопросик- две объединяться в одну (по каким-то причинам в OLTP-системе введены дважды или действительно юридически объединяться) 1) Как при этом отражается история до объединения компаний - как история одной объединившейся или двух исходных? 2) При объединении котракты с предшественниками продолжают действовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 00:57 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
To Андрей Прохоров: 1. На этот вопрос могу ответить так: надо и так и так, в зависимости от того, на какой вопрос необходимо дать ответ. Т.е. в некоторой ситуации необходимо показать цифры и сальдо отдельно для компании А и отдельно для компании Б, а в другой ситуации - для компании А, которая поглотила компанию Б (т.е. все цифры от компании Б присовокупить к компании А, как-будто компании Б и вовсе не было) 2. При объединении компаний нам присылают официальную бамагу, в которой рассказывается что такая-то компания (главная) является правопреемницей по обязательствам поглощённой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 10:11 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
DHW-вопросикУважаемые практики! Поделитесь, пожалуйста, рекомендациями по вопросу как спроектировать ХД, чтобы учесть изменения в фактах и измерениях? Для простоты возьмём лишь следующие сущности: -- измерения (первые три – это parent-child) 1. компании (key_company, companyName, …) 2. договора (key_treaty, key_company, treatyNumber, acceptDate, status, ….) 3. условия договора (позиции) (key_position, key_treaty, currency, startDate, endDate, positionType,…) 4. отчётные периоды (key_date, date,…) -- факты начисления (key_position, key_date, premium, premiumRub,…) Многоточие означает, что в таблице есть другие атрибуты и меры. Начнём с измерений: (1). Компании могут: - просто изменять своё название - закрываться (переставать существовать) - две объединяться в одну (по каким-то причинам в OLTP-системе введены дважды или действительно юридически объединяться) В OLTP-системе ведётся учёт того, когда, что произошло с компанией – есть подчинённая таблица в которой (key_company, oldCompanyName-прежнее наимнование, dateChange дата актуальности по, cause - причина) (3). В условиях договора могут изменяться валюта (currency) и/или период действия позиции (startDate, endDate) Сводные (агрегированные) данные о начислениях попадают в бухгалтерский баланс. В связи с этим есть понятие закрытие периода. В OLTP-системе если необходимо изменить валюту начисленной премии, период действия позиции или собственно сумму премии, то ВСЕ изменения осуществляются в следующем за закрытым отчётном периоде, при этом в следующем отчётном периоде вводится разница между тем что было и как должно быть. При анализе, при формировании отчётности необходимо получать такую картину, которая была по состоянию на тот момент. Так, -- по состоянию на 01.01.2005 компания «Альфа» именовалась «Альфа» и по ней начислено премии 10К USD (30 000руб) -- по состоянию на 01.04.2005 она стала именоваться «Бета» и премии по ней начислено 10К EUR (35 000руб) -- по состоянию на 01.07.2005 премии начислено 5К EUR (17 000руб) (поскольку было сторнирование начисления) Как должны выглядеть хранилище данных – добавлены ли доп. таблицы или добавлены поля? 1. Для реализации хранилища Вам не надо так переживать за OLTP. 2. Главное реализация основных объектов в DWH: а.Механизм измерний б. Механизм фактов 3. Чётко сформулирывать требования о том что может произойти с измереним, его иерархией. Чем они будут проще в ОЛТП, тем Вам будет легче. 4. Выделив все типы измерений, которые Вы планируете реализовать, приготовится к их реализации. Вероятнее всего у Вас будет SCD Type 2 - как основа ( что означает следующее: при изменении каких либо реквизитов измерения - вы это отразите в введённых Вами полях DATE_BEGIN & DATE_END и конечноже новго SID, что послужит Вам как пометкой на диаграмме Ганта в изменяющихся свойствах измерения). Из этой основы в последсвии будет не сложно выделить "младшего брата" вашего измерения, которое будет содержать лишь информации о состоянии измерения "на сейчас" - для оператвных отчётов. Используя SCD 2 вы будете иметь возможность охарактеризовать элемент измерения, на любой момент времени. 5. На счёт иерархии - наверно самое сложное. Если она у Вас сбаланисрована, то вы её можете привести от "parent-child" к отношению таблиц 3NF. и хорошо, когда у Вас изменятся\мигрирует только нижний уровень - задача сводится от обслуживания иерархии к свойствам SID ( сурогатного идентификатора элемента измерения ). Если рассматривать случай изменения всех уровней иерархии, то ВЫ столкнётесь высоким уровнем роста кл-ва SID в измерении. ( представлете : Москва вдруг числится не в России, а Беларуссии - а значит надо перегистрирывать всех москвичей, с новой пропиской :) Если Ваш "parent-child" доходит до таких требований и в один день может моменятся полностью, то вам лучше рассмотреть вариант "версий" измерения. Т.е. при изменении чего, либо у вас появлятся новая "инкарнация" измерения - действующая в определённое время. Или же Вы можете подключить оба сразу измерения, но в Вашей снежинке - это будет выглядеть как разные имерения. ( Не злоупотребляйте ! :) Если измерение достаточно крупное и не сбалансированное, и какой-то его элемент будет "колбасить" чаще других - вы будете иметь избыточные данные, которые в последствии сможете свернуть в какой-то динамический модуль определения состояния измерения. Т.к. история "калбасинья" у Вас уже будет. View вам поможет. Не соглашайтесь в поставленном ТЗ на возможность изменения элемента измерения ( элемента его иерархии) задним числом - это усложняет реализацию. P.S. когда вы на практике реализуете Ваши измерения, то факты - для Вас будут как семечьки. P.P.S. Постарайтесь переубедить Ваших заказчиков не идти этим путём, а вместо первички хранить отчёты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 16:19 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
Прочитав статьи Кибалла, понял так что SCD реализуется так: Таблица ИЗМЕРЕНИЯ 1: dimKey1 - искусственный (сурогатный) первичный ключ записи, [identity bigint (1,1) ] id - идентификатор записи в источнике данных (в учётной системе) - ввиду наличия изменений уже перестаёт быть уникальным ..... - содержательные, описательные поля измерения beginDate - дата начала актуальности действия записи, [DateTime NOT NULL] (причём тут нас интересуют в большинстве случаев только дата- составляющая, если не стоит задача отслеживания изменений в течении суток) endDate - дата окончания актуальности действия записи, [DateTime NULL] (для действующей на текущий момент записи - это NULL) isActual - флаг актуальности записи (1=для действующей на текущий момент записи, 0=для предыдущих версий записи) checksum - контрольная сумма для записи - некое поле для служебной цели, а именно при обновлении таблицы измерения чтобы можно было быстро выяснить - изменилась ли запись в учётной системе (это может быть контрольная сумма или значение timeStamp) Таблица ИЗМЕРЕНИЯ ВРЕМЕНИ: dimDateKey - искусственный (сурогатный) первичный ключ записи измерения времени (календарь), [identity bigint (1,1) ] date_ - дата [DateTime] year_ - год даты month - месяц года weekNumber - номер недели в году ..... - и другие поля Таблица ФАКТОВ: factKey - искусственный (сурогатный) первичный ключ записи фактов, [identity bigint (1,1) ] dimKey1 - внешний ключ записи на измерение 1 dimKey2 - внешний ключ записи на измерение 2 .... dimDateKey - внешний ключ записи на измерение времени ..... - числовые показатели (факты) ============================================== to Parkhomets Andrey: по поводу п.5 хотелось бы уточнить - как будут физически выглядеть -- вариант "версий" измерения -- новая "инкарнация" измерения - действующая в определённое время -- динамический модуль для крупного и несбалансированного древовидного изменрения В учётной системе мы вроде договорились, что если необходимо исправить (сторнировать) данные по начислениям за тот период, что уже прошёл по бухгалтерской отчётности, то те записи закрыты для изменений, а в открытом периоде вводятся записи - ДЕЛЬТА цифр, с признаком что это сторнировочная запись, относящаяся к такому-то закрытому периоду Счас мы так и храним - каждый внутрикопоративный (управленческий) отчёт на такую-то дату - это снимок данных и расчёты от них по состоянию на ту дату. И всё же если данные были неправильны в то время, а обнаруживается это позже, то получается что нам надо их пересчитать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 14:45 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
Похоже, что придется использовать отношение многие ко многим для контрактов и компаний, т. к. после объединения контракт фактически будет относится к двум компаниям. Можно ввести фиктивный атрибут - контракт-компании. К нему превязывайте факты. Получится две цепочки компания->контракт-компании->факт и контракт->контракт-компании->факт. Это позволит отслеживать историю по контрактам и по компаниям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 23:42 |
|
||
|
Каким образом лучше сделать учёт изменений (измерения, факты) в хранилище данных?
|
|||
|---|---|---|---|
|
#18+
DHW-вопросикПрочитав статьи Кибалла, понял так что SCD реализуется так: ...... Задача Кимбала - раскомплексовать ваше воображение, берите от него лучшее и придумывайте свои особенности DHW-вопросик ============================================== to Parkhomets Andrey: по поводу п.5 хотелось бы уточнить - как будут физически выглядеть -- вариант "версий" измерения -- новая "инкарнация" измерения - действующая в определённое время -- динамический модуль для крупного и несбалансированного древовидного измерения -- вариант "версий" измерения и инкарнаций - это, наверно, мой личный жаргон. Имеется в виду что вы в ROLAP схеме куба можете сделать дополнительное измерение - а то и больше, которое будет отражать одну сущность в разное время. Но я бы не пошёл таким путём, это того не стоит. Прощё перейти на витрины данных : ( например в 2006 году у вас измерение "сотрудники" было одного состава, а в 2007 абсолютного другого. Отсюда можно сделать два куба. Даже если содержание кубов перекрывается и будет избыток данных на магнитных носителях- так проще.) Если рассматривать промышленные решения то в SAP BW реализованно так, что вы можете в отчёте выбрать то состояние имерархии - которое Вам более необходимо. ЗА счёт того, что в SAP BW измерение и его иерархия отделены друг от друга через связующую таблицу, на которой может висеть сколь угодно иерархий. Все эти подходы упираются в функционал клиентского приложения. -- на счёт последнего: идея в то, чтобы приводить self-jouin (parent-chield) измерение в правильный вид. Я говрю про ROLAP. В такой вид, в которм у Вас каждая колонка отражает уровень ииерархии - именно такой вид требуется для Oracle Discoverer. Несбалансированность решается путём "дублирования" - заполнения верхних уровней такими же как и нижние. Имея исходное измерение - вы отслеживаите момент изменения кл-ва уровней, и пересчитываете его в вашу целевую таблицу, как правило при этом ломаются отчёты. Если отказатся от построения большей отчётности в ROLAP то хранилище лучше заточить не под клиентсое приложение, а под способность хранить всю нужную Вам информаци, и быстрое её получение. Это наверно самый главный вывод, к которому я пришёл, после попытки реализовать хранилище, под Discovrer. Данные нуждающиеся во вращении переливайте в MOLAP ( например от Microsoft-а, а хватит ума то и в Oracle зальёш). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2006, 11:23 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=33610320&tid=1870369]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 371ms |

| 0 / 0 |
