Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 как подобное смоделировать правильно  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 945
Есть сущности Client, Contract.

- какждый клиент имеет несколько контрактов для различных продуктов
- каждый контракт имеет период действия: start_date, end_date, а также ряд коэффициэнтов, например c1 и c2
- есть транзакционные данные связанные с датой и клиентом, на их основе и на основе коэффициентов контракта валидного на дату транзакции надо что нибудь считать, например меру m = v * c1 - v * c2, где v - мера из таблицы фактов, а с1, с2 - коэффициенты из контракта.

Не могу понять как лучше такое смоделировать. Есть такая идея:

Dim Date (id_date, ...)
Dim Client (id_client, client_name)
Dim Contract (id_contract, contract_name, id_product)

Fact Contract Validity (id_date, id_client, id_contract, c1, c2, c3) - где c1, c2, c3 это коэффициенты валидные на дату date, т. е. диапазон start_date, end_date раскрывается в список дат попадающих в этот диапазон. Это bridge таблица между Dim Client и Dim Contract

Fact Some Data(id_date, id_client, id_product, m1, m2, m3)
12 апр 18, 12:11    [21332717]     Ответить | Цитировать Сообщить модератору
 Re: как подобное смоделировать правильно  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 945
основной вопрос - что делать с интервалом валидности контракта и стоит ли его раскрывать в таблицу фактов или как-то проще можно?
12 апр 18, 12:13    [21332729]     Ответить | Цитировать Сообщить модератору
 Re: как подобное смоделировать правильно  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3435
почитай про scd2 и сделай контракт scd2.

можно в принципе и вынести шапку контракта в отдельный dim с scd1.

Но генерить ежедневные состояния это абсолютно излишнее.
Прекрасно работает функция between для джоина факта на нужную версию контракта
12 апр 18, 12:18    [21332762]     Ответить | Цитировать Сообщить модератору
 Re: как подобное смоделировать правильно  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 945
Ivan Durak,

спасибо
12 апр 18, 12:23    [21332795]     Ответить | Цитировать Сообщить модератору
 Re: как подобное смоделировать правильно  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3435
churupaha
Ivan Durak,

спасибо

используй 2 даты start_date, end_date. Не используй null значения для них - и between взлетит из коробки. Даже проиндексировать можно будет
12 апр 18, 12:26    [21332818]     Ответить | Цитировать Сообщить модератору
 Re: как подобное смоделировать правильно  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 945
Ivan Durak,

начал пилить обложился книжками many2manyrevolution и всякими примерами реализации SCD2 и чую не до конца я понял, о чем вы говорите.

не могу сообразить как мне формулы для метрик в таком случае писать

CREATE MEASURE CURRENTCUBE.[Measures].MyMeasure AS [Measures].M * (как по Dim Date выдрать коэффициенты из дименшна Dim Contract, проверив попадание между Start Date и End Date)

Можете пример на пальцах выделенного? Хочется научиться делать такое правильно и максимально просто. Спасибо!
13 апр 18, 16:00    [21337384]     Ответить | Цитировать Сообщить модератору
 Re: как подобное смоделировать правильно  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 954
churupaha,

вы для начала погоняйте станд. куб Adv Works
Сдается мне там есть половина овтетов на ваши вопросы.
взяли куб - задеплоили как есть - потом проект открыли и стали править чуть под себя

А ссылок по M2M полно
http://www.jamesserra.com/archive/2011/11/many-to-many-dimensions/

The_Many-to-Many_Revolution_2.0.pdf
очень ТОЛКОВАЯ вещь - я так понимаю вы уже нашли
Many2Many_2.0_Demo.zip - так качните я постатьве себе для экспериментов
я честно осилил только 1-е 2 модели - думаю и вам их хватит.
13 апр 18, 20:46    [21338118]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить