В настоящее время я проектирую хранилище данных для финансовой компании.Несмотря на то, что большая часть процесса является достаточно стандартной, мне была представлена проблема (которая, я считаю, существует только в финансовом секторе) событий данных, которые влияют на ряд строк и их историю, которые могут произойти в любое время.
Чтобы объяснить проблему лучше.Предположим, у нас есть счет А, и за 2 месяца произошли 4 транзакции, которые влияют на его баланс, меняя его с 10000 на 20000. Когда я запускаю отчет за этот месяц, он показывает штраф, который показывает активность, получающую это значение.Теперь это становится трудным, через месяц после того, как я задним числом транзакции задним числом изменяю баланс, изменяя его с 20000 на 15000.
Запуск отчета.мне 15000.
Для иллюстрации лучше обратиться к данным ниже.
Транзакции за сентябрь и октябрь
с обратной датой транзакции от 28 октября по 13 сентября на сумму 500
исделка с датой возврата от 8 ноября на 17 сентября для зачисления -50
╔═════════════════╦═════════════════════════╦════════╦══════════════════╦═══════════════╦═════════════╦═════════╗
║ Key_Transaction ║ SK_TransactionEffective ║ Amount ║ PrincipleBalance ║ SK_ReportDate ║ SK_AsOfDate ║ Version ║
╠═════════════════╬═════════════════════════╬════════╬══════════════════╬═══════════════╬═════════════╬═════════╣
║ 1 ║ 12/09/2018 ║ -1000 ║ 20000 ║ 12/09/2018 ║ NULL ║ 1 ║
║ 6 ║ 13/09/2018 ║ -500 ║ 19500 ║ 13/09/2018 ║ 28/10/2018 ║ 2 ║
║ 2 ║ 16/09/2018 ║ -50 ║ 19950 ║ 16/09/2018 ║ NULL ║ 1 ║
║ 7 ║ 16/09/2018 ║ -50 ║ 19450 ║ 16/09/2018 ║ 28/10/2018 ║ 2 ║
║ 12 ║ 16/09/2018 ║ 50 ║ 19950 ║ 16/09/2018 ║ 8/11/2018 ║ 3 ║
║ 3 ║ 1/10/2018 ║ 250 ║ 20200 ║ 30/09/2018 ║ NULL ║ 1 ║
║ 8 ║ 1/10/2018 ║ 250 ║ 19700 ║ 30/09/2018 ║ 28/10/2018 ║ 2 ║
║ 13 ║ 1/10/2018 ║ 250 ║ 20200 ║ 30/09/2018 ║ 8/11/2018 ║ 3 ║
║ 4 ║ 6/10/2018 ║ -1200 ║ 19000 ║ 6/10/2018 ║ NULL ║ 1 ║
║ 9 ║ 6/10/2018 ║ -1200 ║ 17800 ║ 6/10/2018 ║ 28/10/2018 ║ 2 ║
║ 14 ║ 6/10/2018 ║ -1200 ║ 19000 ║ 6/10/2018 ║ 8/11/2018 ║ 3 ║
║ 5 ║ 22/10/2018 ║ 100 ║ 19100 ║ 22/10/2018 ║ NULL ║ 1 ║
║ 10 ║ 22/10/2018 ║ 100 ║ 17900 ║ 22/10/2018 ║ 28/10/2018 ║ 2 ║
║ 15 ║ 22/10/2018 ║ 100 ║ 19100 ║ 22/10/2018 ║ 8/11/2018 ║ 3 ║
║ 11 ║ 29/10/2018 ║ -1000 ║ 16900 ║ 29/10/2018 ║ NULL ║ (New)1 ║
║ 16 ║ 29/10/2018 ║ -1000 ║ 18100 ║ 29/10/2018 ║ 8/11/2018 ║ (New)2 ║
╚═════════════════╩═════════════════════════╩════════╩══════════════════╩═══════════════╩═════════════╩═════════╝
Теперь, когда я запускаю отчет за сентябрь (с 2018 по 01-01 до 2018-09-30)Я должен быть V1 или когда SK_AsOfDate равен NULL
. Если я запускаю отчет за октябрь (с 2018-10-01 по 2018-10-31), моя последняя запись должна быть (11) с основным балансом 16900
И мой текущий баланс Принципов (по состоянию на 2018-11-09) должен быть рассчитан как остаток от (16) с PB (18100)
Я добавил SK_AsOfDate, чтобы попытатьсяЯ имею дело с версионностью, но я все еще изо всех сил пытаюсь найти простой и элегантный способ добиться этого "Какой у меня был баланс на 2018-09-30 годы, который будет игнорировать изменения V2 и V3.
Я хочу получитьэто право и, к счастью, я не слишком далеко по любому пути, поэтому предложенияДобро пожаловать!Я рад добавить столько полей, сколько делает этот процесс простым для отчетности на другом конце.