logo search
Лаптырев Д

Запрос на извлечение данных из хранилища

Пусть имеем в хранилище данных таблицу лицевых счетов формата

┌──────┬─────────────────────────┬────────────┬───────────┬─────────────┐

│ Дата │ Номер БС 2 порядка │ Имя л/с │ Валюта │Остаток, руб.│

└──────┴─────────────────────────┴────────────┴───────────┴─────────────┘

с заранее неизвестным составом записей*(41). Извлечем из нее все данные по корсчетам, для чего зададим для Сценария первичной классификации запрос (на языке SQL) на извлечение данных и помещение их в операционную таблицу с показателем ОТ:

INSERT INTO OT(D, NBS2, NLS, VAL, OST)//

SELECT D, NBS2, NLS, VAL, OST//

FROM LS//

WHERENBS2 IN (30109, 30111, 30112, 30113) AND

D = <01/04/2000>//Дата классификации

В операционной таблице предусмотрим пустой столбец KLS для хранения признаков классификации. Пусть таблица ОТ после извлечения данных из хранилища примет вид:

┌─────┬──────────┬─────────┬──────────────────────┬───────────┬─────────┐

│ KLS │ D │ NBS2 │ NLS │ VAL*(42) │ OST │

├─────┼──────────┼─────────┼──────────────────────┼───────────┼─────────┤

│ │01.04.2000│ 30109 │АAA-банк │ RUR │ 100 000 │

├─────┼──────────┼─────────┼──────────────────────┼───────────┼─────────┤

│ │01.04.2000│ 30109 │Губернский банк │ USD │ 200 000 │

├─────┼──────────┼─────────┼──────────────────────┼───────────┼─────────┤

│ │01.04.2000│ 30111 │Бэнк оф Карибати │ RUR │ 40 000 │

├─────┼──────────┼─────────┼──────────────────────┼───────────┼─────────┤

│ │01.04.2000│ 30113 │Гренландский банк │ BYR │ 70 000 │

└─────┴──────────┴─────────┴──────────────────────┴───────────┴─────────┘

Пусть в рассматриваемом Сценарии заданы два первичных аналитических показателя, которым соответствуют следующие правила классификации:

┌─────────────────────┬─────────────────┬───────────────────────────────┐

│ Первичный АП │Код классификации│ Правило классификации │

├─────────────────────┼─────────────────┼───────────────────────────────┤

│Корсчета резидентов │ RES │ NBS2 = 30109 │

├─────────────────────┼─────────────────┼───────────────────────────────┤

│Корсчета нерезидентов│ N_RES │NBS2 >= 30111 and NBS2 <= 30113│

└─────────────────────┴─────────────────┴───────────────────────────────┘

После классификации операционная таблица ОТ имеет вид:

┌───────┬──────────┬─────────┬─────────────────┬───────────┬────────────┐

│ KLS │ D │ NBS2 │ NLS │ VAL │ OST │

├───────┼──────────┼─────────┼─────────────────┼───────────┼────────────┤

│ RES │01.04.2000│ 30109 │ААА-банк │ RUR │ 100 000 │

├───────┼──────────┼─────────┼─────────────────┼───────────┼────────────┤

│ N_RES │01.04.2000│ 30109 │Губернский банк │ USD │ 200 000 │

├───────┼──────────┼─────────┼─────────────────┼───────────┼────────────┤

│ N_RES │01.04.2000│ 30111 │Бэнк оф Карибати │ RUR │ 40 000 │

├───────┼──────────┼─────────┼─────────────────┼───────────┼────────────┤

│ N_RES │01.04.2000│ 30113 │Гренландский банк│ BYR │ 80 000 │

└───────┴──────────┴─────────┴─────────────────┴───────────┴────────────┘

Полнота классификации может быть легко выявлена из операционной таблицы ОТ: неполнота имеет место, когда хотя бы одна запись в ее столбце KLS содержит пустое значение. Непротиворечивость оценить несколько сложнее, так как необходимо в некоторой (дополнительной) таблице трассировки, содержащей уникальный идентификатор единицы информации и код классификации, записывать результат выполнения каждого классифицирующего запроса, а затем анализировать, не встречается там какая-либо запись более одного раза:

┌────────────────────┬──────────────────────────────────────────────────┐

│ KLS │ NLS │

├────────────────────┼──────────────────────────────────────────────────┤

│ RES │ААА-банк │

├────────────────────┼──────────────────────────────────────────────────┤

│ N_RES │Губернский банк │

├────────────────────┼──────────────────────────────────────────────────┤

│ N_RES │Бэнк оф Карибати │

├────────────────────┼──────────────────────────────────────────────────┤

│ N_RES │Гренландский банк │

└────────────────────┴──────────────────────────────────────────────────┘

что реализуется с помощью следующего запроса:

SELECT NLS, COUNT(KLS)//

FROM TRASSIROVKA//

GROUP BY NLS

HAVING COUNT(KLS)> 1.//

Пусть заданы следующие правила агрегации значений ПАП:

┌───────────────────────────┬───────────────────────────────────────────┐

│ Первичным АП │ Правило агрегации │

├───────────────────────────┼───────────────────────────────────────────┤

│ Корсчета резидентов │ Сумма всех записей с классом RES │

├───────────────────────────┼───────────────────────────────────────────┤

│ Корсчета нерезидентов │ Сумма всех записей с классом N_RES │

└───────────────────────────┴───────────────────────────────────────────┘

что в данном случае порождает весьма простые агрегирующие запросы вида:

SELECT SUM(OST)//

FROM ОТ

WHERE KLS = <RES>//

Замечание. Хотя при реальных расчетах агрегирующие правила могут иметь более сложную логику, принцип линейности расчета агрегатов (основное выражение (П2.1)) на уровне первичных АП сохраняется.

В итоге получаем искомые значения агрегатов - первичных аналитических показателей - на интересующую нас дату:

┌───────────────────────────┬───────────────────────────────────────────┐

│ Первичный АП │ Значение │

├───────────────────────────┼───────────────────────────────────────────┤

│ Корсчета резидентов │ 100 000 │

├───────────────────────────┼───────────────────────────────────────────┤

│ Корсчета нерезидентов │ 320 000 │

└───────────────────────────┴───────────────────────────────────────────┘

Следует отметить, что на правильном задании сценариев первичной классификации проблемы с формированием АП не заканчиваются. При задании правил классификации могут быть использованы существенные (уникальные) и (или) несущественные (неуникальные) признаки первичных финансовых данных. Номенклатуре как уникальных, так и неуникальных признаков свойственно изменяться (например, расширяться, т.е. добавляться) во времени, что порождает первую проблему-риск пропуска целевой информации (пример 5.3).

Пример 5.3