Название этой статьи представляет собой краткое изложение того, что просил клиент. Я в это время был в отпуске, и мой менеджер, не вдаваясь в подробности, дал добро на реализацию.
Хорошо отдохнув и отправившись на работу, я почувствовал себя на месте ёжика, попавшего в туман в одном известном мультфильме.
И ситуация требовала Волшебника Изумрудного города.
Итак, все по порядку:
Постановка
Заказчиком выступил отдел по борьбе с проблемной задолженностью.Для успешного решения своих проблем им нужно было
- Отслеживайте историю проблемного кредита: смотрите, когда по нему возникла просрочка и как она была погашена.
Также проверьте, есть ли у заемщика, имеющего просрочку, другие кредиты.
- Получайте информацию о кредитном портфеле, отслеживайте тенденции и изменения портфеля за любой произвольный период.
- Возможность «провалиться» по агрегированным показателям, таким как «Дата выдачи кредита», «Регион выдачи», «Просроченные кредиты» и т.д. непосредственно к самим кредитным договорам.
- Контролируйте работу кредитных менеджеров: проверяйте, насколько успешно они выдают кредиты.
по правам доступа.
Задача немного облегчалась тем, что ежедневный обзор кредитного портфеля требовался только за последние три месяца.
Более поздняя информация должна была быть в первый день каждого прошедшего месяца.
Помимо этого условия, была еще одна проблема: под кредитом подразумевались все виды кредитования, включая кредитные карты, которые хранились отдельно и различались по размерам.
Решение
На момент внедрения в базе данных Oracle существовал репозиторий, в котором хранилась вся информация по картам и кредитам, в том виде, в котором она поступала туда из оперативных источников.Информация пришла с задержкой в 1 день.
В среднем каждый день появлялось 3 миллиона новых записей, часть из которых была кредитами, часть картами.
Для решения этой задачи был выбран следующий алгоритм:
- Была построена витрина данных, объединившая кредиты и карты.
Витрина построена по схеме «Звезда».
- Каждый вчерашний день добавлялся в него с помощью планировщика задач.
- Для расчета агрегатов был создан куб OLAP.
- После завершения обновления витрины было запущено обновление куба OLAP.
- OLAP предоставил данные в веб-форму через средство просмотра OLAP.
Подготовительная работа:
- В витрине был создан общий ключ для объединения кредитов и карт, который однозначно идентифицировал и кредит, и карту.
Ключ хранился в таблице, каждая строка которой однозначно идентифицировала либо кредит, либо карту.
- В ежедневное наполнение добавлен механизм отслеживания изменений в оперативных таблицах не только со вчерашней даты, но и всех данных за произвольный интервал в прошлом, начиная со вчерашнего дня.
Это делалось на случай каких-либо изменений или ошибок в базе данных «Вчера».
Возникла ситуация, когда информация по кредитам и картам появляется в базе с некоторой задержкой, и нам пришлось с ней бороться.
Проверялись последние 15 дней со вчерашнего дня.
- Куб был создан для возможностей веб-приложения.
Всего кредитов и карт было около 3 миллионов, и отобразить их все в браузере сразу было либо очень сложно, либо невозможно.
Для решения этой проблемы помимо стандартного разделения кредитов и карт по дате открытия, региону привязки, менеджеру-эмитенту и т.д. были придуманы дополнительные измерения.
В описанном случае градации кредитов были добавлены по Сумме, по Сумме просрочки, по количеству дней просрочки и по тому, был ли кредит хотя бы один раз просрочен.
Также были построены иерархии типа год-квартал-месяц-день по дате открытия и закрытия кредита.
В итоге все кредиты были объединены в группы, самая крупная из которых составляла не более 10 000 строк.
Клиента интересовала только задолженность, поэтому для кредитов, которые были погашены в срок, никаких дополнительных измерений не придумывалось.
Доступ к ним был ограничен Просмотрщиком и мог быть открыт в любой момент. В текущей версии пользователь видел только информацию, агрегированную по стандартным измерениям.
Но часть этих кредитов еще можно было увидеть - это были кредиты от должника, у которого просрочен был только один кредит, но несколько были взяты.
- Обновление куба должно было начаться сразу после обновления витрины.
Для этого был создан сервис, проверяющий состояние планировщика задач Oracle. Для него также была написана утилита, с помощью которой можно было срочно запустить/прервать обновление куба или отслеживать текущий статус.
- Необходимо было найти OLAP Viewer, который мог бы обеспечить весь необходимый функционал, нормальный внешний вид и гибкость настроек.
Задача эта была непростой: потому что.
многие из них крайне недружелюбны к пользователям, и работать с ними не очень удобно.
Даже с той, что нашлась, пришлось помучиться.
Поэтому, если вдруг в реализации вам покажется, что я надувал шарик в форме котенка, то прошу вас быть снисходительным, не все зависело от меня.
Выполнение:
Система развернута на Windows Server 2008 64-бит, веб-форма развернута на IIS, технология ASP.NET.- Витрина данных — база данных Oracle
- Планировщик заданий — база данных Oracle
- Куб OLAP — службы Microsoft Analysis Services
- Отслеживание обновлений витрины и запуск обновлений куба — Служба Windows
- Средство просмотра OLAP — DevExpres AspxPivotGrid
Технические хитрости:
- 1. Для корректной работы 32-битных и 64-битных провайдеров Oracle под Windows:
- Загрузите 32-битные и 64-битные драйверы Oracle с официального сайта.
- Поместите Client32 Runtime в отдельную папку.
- Чтобы перезагрузить компьютер.
- Поместите Client64 Runtime в отдельную папку.
- В реестре Windows в разделе KEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE добавьте значение TNS_ADMIN и установите его в путь к папке для Clinet32 — .
\network\admin.
- Чтобы перезагрузить компьютер
- Загрузите 32-битные и 64-битные драйверы Oracle с официального сайта.
- При ограничении доступа в кубе Analysis Services на вкладке Кубы необходимо установить Чтение, затем выбрать значения измерений в кубе, выбрать среди них те, к которым роль имеет доступ, и, переключившись на вкладку Дополнительно, установите флажок Включить визуальные итоги, по умолчанию он отключен.
Если не включить, то в итогах по этому измерению будет отображаться итог не только по тем измерениям, к которым роль имела доступ, но и по тем значениям измерений, к которым не было доступа.
- Для больших размеров в ASPxPivotGrid необходимо отключить сортировку по умолчанию.
О важном!
В этой статье я хотел показать, как можно решить проблемы, связанные с большими объемами данных, используя доступные и давно существующие технологии.Прежде чем внедрить OLAP, мое руководство в поисках «золотой пули» рассмотрело множество пакетных решений, как от крупных производителей, так и от небольших компаний.
При проверке зачастую оказывалось, что поддержка нестандартных решений требует больших усилий и финансовых затрат. В некоторых случаях упакованный продукт просто не мог делать то, что хотели, из-за своей архитектуры.
Возможно, компания, где я работаю, искала не там, где есть такая «золотая» или хотя бы «серебряная» пуля.
Но что случилось, то случилось.
С другой стороны, эта статья может кого-то остановить от изобретения «велосипедов» в виде построения дополнительных агрегированных таблиц, каких-то сложных архитектур и громоздких веб-сайтов.
Но ведь столько людей и столько мнений, и на этот счет мне нравится выдуманная история с изобретением шариковой ручки: НАСА потратило миллионы долларов на изобретение ручки, которая могла бы писать в невесомости.
Русские просто писали карандашом.
Но где же карандаш и где теперь ручка? Поэтому любое решение, даже очень сложное и громоздкое, так же, как и простое, может найти своего пользователя.
Спасибо всем, кто смог прочитать всё, что я написал выше! Теги: #web #.
NET #службы анализа #olap #oracle #pivot #oracle #.
NET #Microsoft SQL Server
-
Ума Cms: Разработка
19 Oct, 24 -
Подсветка Синтаксиса В Ruby
19 Oct, 24 -
Google Chrome Как Популяризатор Идей Apple
19 Oct, 24 -
Облегченная Криптография Интернета Вещей
19 Oct, 24 -
Тесты Должны Писаться Разработчиками (?)
19 Oct, 24