powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Как отобразить в DWH status.
14 сообщений из 14, страница 1 из 1
Как отобразить в DWH status.
    #39668489
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Такой вопрос, есть DWH на стадии "черновика", и встал вопрос как хранить и в каком виде status и потом его обновлять, т.е. в факте или отдельном измерении.
К примеру есть заказ, он может быть в статусе создан, принят, в работе и т.д., также есть три поля времени: когда создан, когда обновлен, когда завершен. За день заказ проходит все периоды, т.е. через 24 часа он будет завершен.
Тут есть несколько мыслей:
1 сделать Accumulating Snapshot Fact Tables
2 засунуть все это в отдельное измерение (т.е. измерение Order, где все эти поля + дополнительные) и обновлять во время загрузки. Здесь вопрос в производительности, dimension будет оч. большая.
3 Также поступало предложение просто не грузить последний день, т.к. 100% завтра все заказы будут в одном статусе, а в факте просто держать когда создано и закрыто.
Может еще что есть интересное.

Заранее всем спасибо.
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39668493
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrov,

Зависит от ваших целей - одно дело анализ продаж в общем, другое - анализ конвейера заказов, то есть их статусов в каждый момент времени или анализ того, в каком статусе заказы висят дольше всего.
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39668503
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик,

Анализ в общем.
Когда мы делаем загрузку из источника разумеется заказы могут быть в самом разном статусе, которые не завершены не интересны для отчетности, но необходимо сохранить когда создано и закрыто, для отчета необходимо время от поступления до закрытия, другие шаги пока не интересны.
Если сделать измерение orders, а атрибуты статус, дата закрытия (дата поступления разумеется не меняется) типа scd1, + другие атрибуты заказа, типа код причины отказа (к примеру по определенным причинам он может быть отказан и если будет создан новый, то это уже другой заказ) здесь вопрос в производительности. Да и вообще такой паттерн это не очень хорошо ( https://www.kimballgroup.com/2007/10/design-tip-95-patterns-to-avoid-when-modeling-headerline-item-transactions/), делать update на факте тоже не очень правильно, получается только вставляем новые строки, тогда здесь вопрос как определить строки у которых поменялся статус с последней загрузки.
Т.е. по итогу в факте нам интересна сумма заказа, это то что интересует бизнес, дальше им интересно разница между дата поступления и закрытия, также их интересует заказы (точнее сумма и причина) в статусе отказано.
Остальные измерения типа date, customer, manager и т.д. прочие и проблем не вызывают, вопрос как реализовать именно это.
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39668553
Sutasu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я бы сказал, что переход из состояния в состояние - это факт. Т.е. напрашивается еще одна таблица фактов, id заказа, id времени, id статуса. Плюс потроха по вкусу, типа id оператора...
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39668557
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sutasu,

Ну не знаю... Мне кажется есть более красивый выход. Факт это все таки поступление заказа, если делать как вы пишите все ровно придется проверять статус в источнике и в факте, т.е. это что-то типа slowly change fact 1, в инете есть конечно подобные реализации, но я не представляю как это будет работать на большой таблице, а она будет большая. В источнике только текущее состояние и когда до него обновилось (как я писал 3 столбца, дата поступления, изменения и закрытия, у закрытого соответсвенно 2 последние равны).
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39668560
Sutasu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Главный вопрос, на самом деле - нужна вам история изменения статуса, или нет. Если нужна - тогда по-любому ее надо где-то хранить. Если нет, тогда в основной таблице можно ограничится полем. Если хранить историю, можно завести у последнего статуса булевый флаг, что он последний, и сделать по нему индекс. Будет легче проверять...
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39668648
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrov,

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

имхо, лучше грузить последний день , просто для него ставить статус "обработка/еще не определенно"
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39668651
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sutasu,

Нет, история не нужна, для анализа нужны заказы только в конечном статусе (отказано, закрыто), вопрос в том что при загрузке через ETL мы выгребаем все заказы во всех статусах, соответственно при следующей загрузке нам нужно обновить все заказы которые в хранилище находятся не в конечном статусе (также у них будет пустая дата закрытия), в этом и есть вопрос, как сделать это эффективно.
Также рассматривали в факте поместить, заказ, дата создания, изменения, закрытия, статус (отказано, выполнено будет 1, 0) и id_статуса (к примеру может быть 10, 20,30 это все отказано, но по разным причинам, если выполнено то просто 0), а на источник повесить CDC, но вопрос в производительности как загрузки так и источника, который OLTP система.
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39668658
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarikNavy,

Так я ж уже говорил, интересует анализ только по завершенным, и время от поступления до закрытия, все что между не интересно. Технически можно вообще не грузить не завершенные заказы, и бизнес это устроит, вопрос в том что при сл. загрузке надо будет определять какие не были загружены в прошлый раз и какие из них завершились.

По поводу "лучше грузить последний день , просто для него ставить статус "обработка/еще не определенно"" немного не понял, поясните пожалуйста.
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39668693
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. факты не обновляй - это тупик
2. сделай отдельное измерение чисто под статусы (главное не мешать с другими свойствами - если потом оно будет не нужно и сильно тормозить- легко выкинуть)
3. тип ему сделай scd3, т.к. количество статусов явно константно и невелико
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39669063
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan Durak,

С SCD3 в принципе идея, вопрос что тогда делать с датой закрытия не обновляя факт, при загрузке она будет null в источнике, и только после закрытия там будет значение.
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39669137
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrov,

Пока у меня только одна идея, это упростит архитектуру DWH но усложнит ETL, это просто не грузить не законченные заказы. Т.е. во время выгрузки в staging будет забираться все, а из staging забираться только законченные, при сл. загрузке из staging удалять только строки которые попали в хранилище, т.е. завершенные заказы, у не завершенных проверяем статус, если он завершился, то грузим, если нет, то до сл. загрузки.
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39669557
kaldorey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrov,

Здесь больше вопросов в изменяемых атрибутах заказа - меняется ли сумма, исполнители, уточняется или исправляется спецификация.
Также интересно, могут ли меняться атрибуты заказа после его окончательного статуса задним числом.
Вариантов много, например можно сделать подобие scd4 - помещать в 1 таблицу заказы в процессе, она будет значительно меньше, и в другую законченные заказы перемещать в другую таблицу, а для пользователей вьюху сверху, чтобы все могли смотреть из 1 места. Если исхитриться с landing табличками, то в основных таблицах можно обойтись вообще insert и exchange partition (в случае oracle)

А если насчет каждого поля непонятно что делать, понадобится или нет историчность по нему, а бизнес переменчив в хотелках, то есть anchor.
...
Рейтинг: 0 / 0
Как отобразить в DWH status.
    #39669694
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kaldorey,

Атрибуты не меняются, задним числом тоже не выйдет, timestap автоматом ставится.
Тут кстати про флаг говорили, подумал, в принципе тоже вариант. У нас есть поле last update, по нему и делать incremental загрузку.
У незавершенных заказов ставить флаг не завершен, при сл. загрузке, этот же заказ опять загрузиться, но уже завершенным, чтобы свести кол-во таких заказов к минимуму грузить только вчерашний день (бизнес это устраивает, к тому же если грузить сегодняшний там половина будет незавершенных). В таком случае PK сделать суррогатный ключ (не ID заказа).
Хранилище на MS SQL.
С Anchor не знаком, пошел учить :)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Как отобразить в DWH status.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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