.RU

Дипломная работа/выпускная квалификационная работа



МОСКОВСКИЙ ФИЗИКО-ТЕХНИЧЕСКИЙ ИНСТИТУТ
(ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ)

Кафедра/специализация
«Вычислительные модели технологических процессов»


ХАМУХИН Анатолий Владимирович


Построение систем поддержки принятия решений средствами Oracle Express.


Дипломная работа/выпускная квалификационная работа

студента 4 курса


Направление: 511600 - «Прикладные математика и физика»


Специальность: 511656 - «Математические и информационные технологии»


Научный руководитель: Научный консультант:

к.ф.-м.н. Исаков А.В. Прохорова А.В.


^ Москва – 2001


Аннотация.


В данной работе рассматривается система оперативной обработки данных Oracle Express, предназначенная для поддержки принятия решений. Дано общее описание системы (структура, назначение и функциональные возможности модулей); указаны особенности установки и требования, предъявляемые к ресурсам машины, на которую производиться установка. Отмечены ряд особенностей наполнения многомерной базы данными. Разработано приложение для демонстрации возможностей системы Oracle Express.


^ Ключевые слова


Многомерная база данных (МБД), оперативная обработка данных (OLAP - Online Analysis Processing), технология клиент/сервер, «тонкие» и «толстые» клиенты, размерность (dimension), переменная, формула, поворот, срез, показ (briefing).

Содержание.



  1. Введение.

  2. Обзор системы Oracle Express.

Oracle Express и многомерные базы данных. Oracle Express Administrator. Oracle Express Analyzer и Oracle Express Objects. Oracle Express и Web.



  1. Установка компонентов Oracle Express.

Системные требования. Процесс установки.



  1. Импорт данных в МБД Express.

Импорт данных из текстовых файлов. Импорт данных через ODBC-драйвера.



  1. Разработка приложений.

Приложение, разработанное в среде Oracle Express Analyzer: модель отдела продаж.



  1. Заключение.




  1. Словарь терминов.




  1. Литература.




  1. Приложениe.
        1. Введение.


В настоящее время всё более востребованными становятся системы OLAP (OnLine Analysis Processing), поскольку они дают возможность эффективно использовать хранилища данных для построения специальных аналитических приложений, генерирующих разнообразные отчёты, представляемые в виде таблиц, графиков и диаграмм и поддерживающих тем самым принятие тех или иных решения. До недавнего времени в нашей стране было немного электронных хранилищ данных, в которых хранилась бы информация за долгий период, поэтому не к чему было применять подобные средства. Сейчас, когда повсеместному применению информационных технологий в организациях нашей страны уже более пяти лет, такие банки данных появились, и изучение OLAP-систем стало актуальным.


Данная работа посвещана рассмотрению OLAP-системы Oracle Express. Далее приведено краткое содержание разделов.


В разделе «Обзор системы Oracle Express OLAP» дано общее описание системы Oracle Express.


Второй раздел посвящен установке системы, и требования, предъявляемые к ресурсам машины, на которую производиться установка.


Третий раздел повествует о вопросах наполнения многомерной базы данными.


Программа, разработанная для демонстрации системы Oracle Express, описана в четвертом разделе.


В Заключении кратко сформулированы результаты, полученные в дипломной работе.

В шестом разделе приведены основные понятия и определения.


Список использованных источников указан в разделе 8.


В приложении вынесены тексты программ, написанных при разработке демонстрации.


^ 2. Обзор системы Oracle Express OLAP.

Общая ситуация на сегодняшний день состоит в том, что во многих предприятиях используются реляционные СУБД, с помощью которых накоплен большой массив информации. Реляционная СУБД хорошо справляется с хранением данных и обработкой запросов, но этого не достаточно для того, чтобы построить аналитическую систему. В самом деле, аналитику, желающему получить представление об общем положении дел, вряд ли пригодится возможность получить одну из десяти тысяч записей, например, о сделках, совершенных фирмой. Более полезными для решения такой задачи являются некоторым образом агрегированные данные по разным периодам времени, различным подразделениям фирмы, по типам совершенных сделок и т.д. Желательно, чтобы данные удобно представлялись графически, чтобы различные тренды можно было обработать математическими методами, составить прогноз, выполнить анализ типа «Что, если…» и т.д.. Время обработки запросов должно укладываться в 2-3 секунды, иначе аналитик может потерять нить рассуждений, на основании которых был сделан запрос. Эти требования сводятся к пяти основным, обозначаемым аббревиатурой FASMI (Fast Analysis of Shared Multidimensional Information). OLAP-системы можно было бы определить как системы, удовлетворяющие тесту FASMI.


Многие фирмы выпускают приложения, претендующие на статус OLAP-приложений, но не каждый из этих программных продуктов действительно удовлетворяет обозначенным требованиям. Oracle Express OLAP – одна из лучших OLAP-систем и вполне удовлетворяет тесту FASMI:



Рассмотрим некоторые из приведенных аргументов более подробно.


Oracle Express и многомерные базы данных.


В реляционных базах данных хранимая информация представляется в виде таблиц, строки которых называют записями, а столбцы – полями. Таблицы могут быть связаны внешними ключами, т.е. полями, которые вводят отношения между записями в разных таблицах. Такая структура хранения данных подходит для организации обновления информации посредством транзакций из небольшого числа операций. Пример простейшей реляционной базы данных показан на рис. 1.




Рисунок 1. Представление данных в реляционной модели.


Многомерная модель хранения информации представляет данные как многомерный куб, в котором размерности (dimensions) откладываются по осям куба, а переменные (measures) соответствуют ячейкам гиперкуба. Например, зависимость объёма продаж (units) различных товаров (product) от времени и региона, реляционная модель которой представлена на рис. 1, в рамках многомерной модели будет выглядеть следующим образом:




Рисунок 2. Представление данных в многомерной модели.


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




Рисунок 3. Иллюстрация срезов и поворотов куба данных.


Реляционная и многомерная модели одинаково полно описывают представление данных на логическом уровне. На физическом уровне данные могут храниться в формате, который производитель программного обеспечения сочтет оптимальным. Данные могут даже храниться в формате какой-нибудь известной СУБД, просто специальный драйвер будет преобразовывать запросы к многомерному кубу в запросы к реляционным таблицам.


Express Server предоставляет два варианта хранения данных – во внутреннем формате МБД Oracle Express и в формате какой-либо из внешних СУБД, для которой есть ODBC-драйвер. Последний способ реализуется с помощью сервиса Oracle Express под названием Relational Access Manager. Выбирая первый способ хранения, вы значительно выигрываете в скорости обработки информации, однако несколько проигрываете в объёме постоянной памяти, требуемой для хранения. Поскольку для анализа проблемы аналитику важна скорость обработки его запросов, то в большинстве случаев отдают предпочтение первому варианту.


Oracle Express Administrator.


Express Server лишь обрабатывает удаленные и локальные запросы к МБД, управление структурой объектов МБД Oracle Express – это функция Express Administrator. Перечислим объекты, хранящиеся в базе данных Oracle Express:



Express Administrator позволяет создавать новые объекты, наполнять их содержанием, выводить отчеты о состоянии объектов с помощью встроенной консоли и её команд. В функции Express Administrator входит редактирование, запуск и отладка программ на языке Express. Возможности языка Express довольно велики – с его помощью можно описать и выполнить любое изменение структуры базы данных, а математических функций, предоставляемых этим языком, вполне достаточно для проведения сложных вычислений и анализа. При этом язык Express является несложным, и по синтаксису напоминает процедурный язык Basic (элементы объектно-ориентированного программирования(ООП) в этот язык не включены).


Можно было бы выполнять анализ данных только при помощи Express Server и Express Administrator, однако современные требования к приложениям таковы, что результаты обработки необходимо предоставлять наглядно, а не в виде текста в окне консоли; тем не менее разработка приложения не должна быть трудоемкой. Oracle Express содержит средства визуальной разработки аналитических приложений Oracle Express Analyzer и Objects, предназначенные для решения поставленной задачи.


Oracle Express Analyzer и Oracle Express Objects.


Oracle Express – среда для разработки презентаций (briefing), просмотра и анализа содержимого баз данных, а также для запуска презентаций и приложений, разработанных в Express Objects.


Briefing – это приложение, разработанное при помощи Oracle Express Analyzer. Он состоит из нескольких страниц с расположенными на них компонентами. Всего около десяти видов таких компонентов: графики, таблицы, контекстные меню, кнопки, метки (banner), статические графические изображения. Создание презентации упрощено до такой степени, что при работе клавиатурой приходится пользоваться лишь для того, чтобы ввести заголовки и названия объектов; остальное можно проделать при помощи мыши. Поэтому для создания презентации не нужны специальные знания в программировании.


Основные компоненты Express Analyzer – это графики и таблицы, которые наглядно представляют содержимое МБД. График может быть практически любым – двухмерным, трехмерным, круговой диаграммой, столбчатой диаграммой и т.д. Таблицы и графики отображают внутренний объект «куб данных»(DataCube), который связывает оси и точки графика или страницы, колонки, строчки и ячейки таблицы с размерностями и массивами из базы данных. Выбор конкретных значений размерностей, которые будут отображаться, производится интерактивно с помощью несложного инструмента Data Selector.


Для расположенных на странице презентации кнопок и пунктов контекстных меню можно задать предопределённые в Express Analyzer реакции на нажатие или выбор, так называемые Quick actions. Такими реакциями могут быть выход из приложения, переход на произвольную страницу, запуск какого либо приложения Windows, выполнение Express-программы, которая хранится в присоединенной к презентации МБД.


Перечисленных средств достаточно для создания простых, но всё же не примитивных аналитических приложений. Следует отметить, что вычислительную часть, если она требуется, придется написать на Express-языке и сохранить её как программу в базе данных Express. На рис.4 представлен внешний вид презентации, которая поставляется вместе с Oracle Express в качестве примера.




Рисунок 4. Демонстрационный пример презентации.


Express Objects – более сложная по сравнению с Express Analyzer среда для построения OLAP-приложений. Express Objects поддерживает все возможности Express Analyzer, дополнительно позволяя при этом описывать обработку событий от компонентов на языке Express Basic. Express Basic является прототипом Visual Basic фирмы Microsoft. Express Basic – объектно-ориентированный язык, его разработчики предоставили множество объектов, во-первых, облегчающих создание аналитического приложения, и во-вторых, позволяющих вводить более сложные элементы интерфейса. Вычислительных средств Express Basic достаточно для того, чтобы не обращаться к программам из МБД Express.


Oracle Express и Web.


Закончим обзорное описание пакета Oracle Express упоминанием об интересной возможности, без которой в последнее время редко обходятся крупные пакеты программ: трансляция презентаций в Internet. Пакет Oracle Express может взаимодействовать со многими известными Web-server’ами (Oracle Web Server, Microsoft IIS, Apache, т.д.), превращая обычный браузер типа Internet Explorer или Netscape на удаленной рабочей станции в клиента Oracle Express Server, способного управлять презентацией. Для этого на сервере нужно установить какой-либо HTTP-сервер, а также Oracle Express Server, Oracle Express Web Agent и файлы, поддерживающие работу OLAP-приложений (Express Objects или Express Analyzer).


^ 3. Установка компонентов Oracle Express.


Oracle Express – это довольно большой набор программных продуктов, позволяющий обрабатывать многомерные базы данных, представлять информацию из этих баз данных в таблицах и графически. Базы данных могут находиться как на удалённом сервере, к которому могут иметь доступ сразу несколько пользователей, так и на одной машине с программой-клиентом.


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


Далее приведено краткое описание основных компонентов Oracle Express.


^ Oracle Express Server отвечает за доступ к многомерной базе данных, обработку программ, формул, моделей, находящихся внутри баз данных. Oracle Express Server обрабатывает запросы к объектам базы данных по сети, позволяя ограничиваться установкой «тонких» клиентов на рабочих станциях.


^ Oracle Express Instance Manager позволяет управлять работой Express Server пользователям, которые зарегистрированы на сервере. Управление можно осуществлять как на сервере, так и с удаленного компьютера. Само управление заключается в возможности регистрировать других пользователей на сервере, изменять их пароли, изменять пути доступа к служебным файлам, просматривать сообщения о работе, которые генерирует Express Server.


^ Personal Express Server выполняет функции Oracle Express Server и является средством построения «толстых» клиентов. Personal Express Server применяется в однопользовательской системе как альтернатива Express Server’у, а также в случаях, когда требуется перенести вычислительную нагрузку с сервера на рабочие станции.


^ Oracle Express Analyzer является клиентом Oracle Express Server (или Personal Express Server) и служит для создания презентаций, в которых обрабатываются и выводятся данные, предоставляемые сервером. Для создания презентаций не требуется знания программирования, поскольку они составляются из довольно обширного набора готовых гибко настраиваемых компонентов.


^ Oracle Express Objects выполняет функции, аналогичные функциям Express Analyzer, и дополнительно позволяет увеличить функциональность презентаций за счет программирования реакции на события на языке Express Objects (данный язык похож на Visual Basic).


Системные требования.


Для работы Oracle Client и Oracle Server на одном компьютере минимальной аппаратной конфигурацией будет машина с P100, 64Mb оперативной памяти, примерно 300Mb свободного объёма винчестера. Oracle Express Server, Oracle Express Instance Manager могут быть установлены лишь на платформе с Windows NT/2000, в то время как Personal Express Server и клиентские приложения устанавливаются в Windows 9x/NT/2000


Процесс установки.


Далее описывается установка Personal Express Server и Oracle Express Analyzer, т.е. установка конфигурации, позволяющей работать с Oracle Express на отдельном компьютере. Остальные программы и утилиты устанавливаются аналогично.




Рисунок 5. Шаг 1.


Шаг 1. Запуск программы Setup.exe из корневого каталога дистрибутива. Запустится Wizard, внешний вид которого можно увидеть на рис. 5.

Шаг 2. Нажав кнопку далее, переходим ко второй странице Wizard, на которой можно выбрать директорию с архивом дистрибутива, домашнюю директорию и директорию, в которую будет производиться установка (см. рис. 6).

Шаг 3. На следующей странице (см. рис. 7) предлагается выбор подсерии программ Oracle Express, из которых далее будут выбраны программы для установки. Установка некоторых клиентских приложений невозможна без наличия установленного уже сервера или способа соединения с ним, поэтому разумнее сначала установить серверные программы, т.е. Personal Oracle Express в нашем случае.




Рисунок 6. Шаг 2.




Рисунок 7. Шаг 3.




Рисунок 8. Шаг 4.



Рисунок 9. Шаг 4.




Рисунок 10. Шаг 5.


Шаг 4. Выбрав далее тип установки из Typical, Complete и Custom Вы можете просмотреть информацию о том, сколько устанавливаемые программы займут места, и какие именно компоненты будут установлены (см. рис. 8). Если был выбран тип установки Custom, то дополнительно будет предложено выбрать устанавливаемые компоненты (см. рис. 9).


Шаг 5. После нажатия кнопки «Установка», программа установки разархивирует файлы компонентов. Некоторые компоненты, например Net8, требуют дополнительной настройки прямо в процессе установки. В конце должна появится страница, изображенная на рис.5.


^ 4. Импорт данных в Oracle Express.


При написании данного раздела был использован источник [1].


В Oracle Express есть возможность наполнения МБД из текстовых файлов, а также из реляционных баз данных посредством SQL-запросов через ODBC. Далее описаны эти два способа.


Импорт данных из текстовых файлов.


Импорт данных из текстовых файлов можно выполнить двумя способами: воспользоваться Express Administrator (меню File/Import), или создать программу в базе данных на Express Language, которая выполняла бы те же действия.


Предположим, что требуется импортировать данные из ASCII-файла ImpTxt.txt:


Region Product Date Sales

-----------------------------------------------------

^ TORONTO TUNER OCT99 3,997

TORONTO TUNER NOV99 4,796

TORONTO STEREO_VCR DEC99 8,538

MONTREAL TUNER OCT99 4,818

MONTREAL STD_VCR DEC99 11,868

MONTREAL STEREO_VCR OCT99 3,862

MONTREAL STEREO_VCR NOV99 4,634

MONTREAL STEREO_VCR DEC99 5,561

^ CARACAS TUNER OCT99 5,238

CARACAS TUNER NOV99 6,286

CARACAS STEREO_VCR DEC99 5,700

SANFRANCISCO TUNER OCT99 4,519

BOSTON BIGSCR_TV NOV99 8,880

BOSTON BIGSCR_TV DEC99 10,656

BOSTON STD_TV OCT99 3,652

LONDON STEREO_VCR NOV99 6,954

^ LONDON STEREO_VCR DEC99 8,345


Чтобы импортировать данные из этого файла, необходимо предпринять следующие шаги:

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

Вызвать диалог (рис. 11) из пункта “File\Import\Text…” главного меню и определить параметры текстового импорта:

После этого в окне File Layout (разметка файла) в качестве примера должно появиться содержимое строки файла с номером, который указан в поле Record# (номер записи).

Не закрывая диалога настройки, выбрать пункт “Dictionary\Define” (Словарь\Определить) главного меню приложения и определить размерности time (время) типа Date, Geography (география) и Product (продукция) типа Text, многомерную переменную Sales типа Decimal (десятичный), которая зависит от этих переменных. В иерархическом списке, отображающем содержимое нашей базы в окне Object Browser, появятся соответствующие подпункты time, Product, Geography в пункте Dimensions и Sales в пункте Variable (переменная).

С помощью мыши выбрать подпункт Geography и «перетащить» его в строку Field 1 колонки “Express Objects: “ в группе File Layout диалога настройки импорта. После этого появиться модальный диалог Dimension Properties (Text) настройки свойств импорта значений размерности. В этом диалоге должна быть отмечена опция Add dimension value. Если необходимо, в нем могут быть настроены преобразования символов одного регистра в символы другого, а также до 100 вариантов контекстной замены последовательностей символов. Аналогично «перетаскиваются» размерности time, Product и переменная Sales. Отметим, что переменная при импорте может быть преобразована при помощи арифметической операции, вторым аргументом которой служит любая переменная, хранящаяся в БД.

Нажать кнопку “Save…” и задать в диалоге имя программы для загрузки данных из текстового файла в нашу БД, которая будет автоматически сгенерирована и сохранена в нашей базе. Протокол загрузки и сообщения о возможных ошибках при импорте данных будут записываться в файлы с именами ImpTxt.log и ImpTxt.err.




Рисунок 11. Диалоговое окно импорта данных из текстового файла.


Импорт данных через ODBC-драйвера.


Механизм SQL-запросов является универсальным и поддерживается практически любой базой данных через ODBC (Microsoft’s Open Database Connectivity) драйвер.


Перед тем, как импортировать данные из реляционной базы посредством ODBC, необходимо задать ODBC-источник данных с помощью приложения “Windows-администратор ODBC” (odbcad32.exe). Заметим, что автору не удалось воспользоваться источником данных пользователя (user data source), Oracle Express Administrator смог взаимодействовать только с system data source, т.е. источником, доступным в равной степени для всех пользователей.


После создания источника данных ODBC, можно воспользоваться сервисом, предоставляемым администратором Oracle Express. Для этого надо предпринять следующие шаги:




Рисунок 12. Диалоговое окно создания загрузочной программы для данных из ODBC-источника.


Замечания по поводу импорта данных из таблиц Excel. Перед тем, как выбрать Excel-файл в качестве ODBC-источника, его нужно предварительно подготовить. Во-первых, в первой строке должны быть заданы имена колонок. Во-вторых, необходимо дать уникальное название таблице, из которой вы хотите импортировать данные, иначе в списке таблиц её не появится. Для того, чтобы дать таблице название, нужно её выделить. Не делайте этого нажатием кнопки в углу таблицы! Так Вы включите в таблицу «бесконечное» число пустых колонок и строчек, что в дальнейшем приведёт к ошибке. По этой же причине не следует выделять столбец целиком путём нажатия на его заголовок для включения его в таблицу. Последствия будут менее фатальны, поскольку программа загрузки читает только первые 655360 строк, но при этом Вы проиграете в скорости загрузки. Итак, нужно выделить лишь те колонки и строчки, которые Вы хотите включить в таблицу, а затем задать имя таблицы в поле, которое обведено красным на рис.13.




Рисунок 13. Строка ввода для имени таблице в Excel XP.

^ 5. Разработка приложений.


Приложение, разработанное в среде Oracle Express Analyzer: модель отдела продаж.


Представим себе, что некоторая организация продает программное обеспечение от компаний “Oracle”, “CA”, “Segate”, “Centura” (названия необязательно совпадают с настоящими торговыми марками), а также проводит обучение пользователей этого программного обеспечения, и консалтинг по внедрению. Пусть клиенты этой организации, далее называемой «Компанией N», – некоторые фирмы, которых представляют служащие в них менеджеры. Фирмы могут быть расположены в разных регионах России. В отделе продаж «Компании N» работает около десяти менеджеров, которые заключают сделки с менеджерами-представителями фирм-клиентов, причем сделка может быть совершена не сразу, а после нескольких контактов между клиентом и «N»; исход этих контактов может быть неудачным, т.е. «компания N» не получит прибыли за затраченные усилия.


Предположим, что информация о работе отдела продаж «Компании N» фиксируется в базе данных, в которую заносится информация о каждом новом контакте менеджера «Компании N» с клиентами в виде новой записи. В этой базе данных 13 колонок: краткое название организации-клиента, полное название организации-клиента, расположение фирмы-заказчика, вид контакта (по телефону/электронной почте/личная встреча), статус контакта (начало обсуждения сделки/продолжение обсуждения/завершение обсуждения), цель контакта (обучение/покупка/консалтинг), фамилия менеджера-представителя клиента, фамилия менеджера от «N», обсуждаемое програмное обеспечение, фирма-производитель програмного обеспечения, получаемая или теряемая «N» сумма в результате контакта, и наконец, скидка, предоставленная «N» клиенту. В рассматриваемая базе данных за небольшой срок количество строк будет быстро увеличиваться, и поэтому трудно будет, просматривая лишь содержимое, ответить на вопросы:



Конечно, многие информационные системы могут построить отчёты, которые будут содержать ответы на поставленные вопросы, и без привлечения OLAP – средств. Однако время построение отчета такими системами будет на порядок больше, чем время построения аналогичного отчета системой OLAP.


Рассмотрим конкретные этапы создания презентации в среде Oracle Express Analyzer, которая предоставит интересующие нас отчеты.


0 этап. Создание базы данных, на которой можно продемонстрировать работу Oracle Express. В работе для этого использовано приложение “Excel” и макрос, написанный на Visual Basic (языке программирования высокого уровня). Описанная выше база данных была заполнена примерно 10000 записями из «разумной» случайной информации в том смысле, что каждая запись не противоречила здравому смыслу. Текст программы-макроса приведен в Приложении.


1 этап. Создание многомерной базы данных на основе созданной на 0 этапе реляционной базы данных. Для создания и управления многомерной базой данных (другими словами, для администрирования базы данных) используется приложение Express Administrator. В нем были созданы:





Рисунок 14. Иерархические измерения Client (справа) и Product (слева).


Затем была применена процедура импорта данных, описанная в разделе 4, с целью получить макет Express-программы для загрузки данных из файла приложения “Excel”. Полученный макет пришлось исправлять вручную, т.к. автоматических средств оказалось недостаточно для задания логики сопоставления таблицы Excel и введенной выше многомерной структуры. В результате были получены массивы Balance , Discount , Successes , Fails , Contacts или, другими словами, функции на введенных размерностях (множествах величин).


Поскольку в совершении одной сделки участвует, как правило, несколько менеджеров, причем не обязательно контакты происходят только по телефону, то существует определенная трудность в интерпретации функций Balance, Discount, Successes, Fails в точке с определенными значениями Month, Client, Contact, Manager, Product. Для простоты в момент завершения сделки (_Month, Product, Contact - фиксированы) к Successes или Fails (в зависимости от исхода сделки) добавляется та часть единицы, которая получается при делении на доли, равные количеству определенного типа контактов одного менеджера. Т.е., если по телефону Ивановым было совершено 2 контакта из 5 при успешной сделке, то к Successes(_Month, Product, Client, ‘телефон’, ’Иванов’) прибавляется 2/5. Прибыль от сделки распределяется по такому же принципу, т.е. делится по размерностям Contact, Manager пропорционально Successes.


Этап 2. Визуализация данных из МБД с помощью среды Express Analyzer. Приложение Express Analyzer позволяет создавать и запускать так называемые презентации – программы-отчеты. Express Analyzer предоставляет стандартные визуальные компоненты (элементы интерфейса с пользователем приложений Windows) такие, как кнопки, текстовые метки, поля для размещения картинок – для оформления презентаций, а также компоненты-графики и компоненты-таблицы для отображения данных MБД. На рис. 15 представлен внешний вид презентации, которую нужно было создать в результате.




Рисунок 15. Примерный внешний вид презентации.


В среде Express Analyzer нельзя создать полноценное приложение, поскольку она позволяет задавать лишь простейшее заранее определенное поведение на действия пользователя, такие, как щелчок мыши в области окошка, нажатие на кнопки. Однако среди этих предопределенных действий есть возможность вызова Express-программы на сервере Express. Данная возможность позволяет делать некоторые вычисления в презентациях, например, прогнозы.


Этап 3. Прогнозирование. Был создан новый массив Forecast, индексированный по размерностям Contact, Manager, Client, Product, _Year(годы). В него были записаны прогнозы на доходы за год. В созданном приложении результаты сравнивались с реальными данными (см. Рис. 16).



Рисунок 16. Сравнение реальных данных с прогнозом методом скользящего среднего по 3 годам. Прогноз на 2001 год.


В результате полули программу-отчет, способную подсказать ответы на вопросы в начале этой главы. Изменяя настройки графиков и таблиц, можно получать более или менее детальную информацию (drill up и drill down). Примеры отчетов можно видеть на рисунках 16-23.



Рисунок 17. Таблица, показывающая распределение дохода, полученного менеджерами «Компании N». Данная таблица позволяет оценивать эффективность работы каждого менеджера в сравнении с его коллегами.




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



Рисунок 19. Диаграмма распределения доходов от продаж по регионам страны. Позволяет выделить наиболее благоприятный регион для продажи того или иного программного обеспечения.



Рисунок 20. Данные графики позволяют определить, насколько сильно в различных регионах объёмы продаж зависят от времени года.



Рисунок 21. График, позволяющий оценить, каким способом выгоднее связываться с клиентами.



Рисунок 22. Оценка быстроты заключения сделок в зависимости от менеджеров и направления.



Рисунок 23. Количество успешных и неудачных сделок у менеджеров, выраженные в специальных единицах.

6. Заключение.


В процессе выполнения дипломной работе были получены следующие результаты:















^ 7. Словарь терминов.


Express Basic – язык, облегчающий администрирование МБД Oracle Express.


FASMI – Fast Analysis of Shared Multidimensional Information – аббревиатура, обозначающая требования к OLAP-системам. (см. [2])


Браузер – программа, поддерживающая http-протокол передачи гипертекстовых документов.


OLAP – OnLine Analysis Processing – обработка данных «на лету». Этим термином называют аналитические приложения, удовлетворяющие ряду требований к структуре хранения данных и к скорости и качеству обработки. Наилучший перевод этого термина на русский язык, на взгляд автора – оперативная обработка данных. (см. [2], [3])


Хранилищe данных (data warehouse) – совокупность данных, накопленных в организации, полученных прямо или косвенно из систем, которые содержат текущую и деловую информацию, а также из некоторых внешних источников. Главная цель хранилищ данных отнюдь не обслуживание текущих деловых операций, а поддержка принятия деловых решений.


Авторизация – процесс регистрации, подтверждающий право на доступ к ресурсам системы. Обычно авторизация требует ввода пароля или предоставления ключа.


МБД – многомерная база данных. Данные МБД хранятся в виде массивов, индексированных по одному или нескольким размерностям. Помимо массивов и размерностей, МБД Oracle Express поддерживает такие объекты как формулы, отношения, модели, множества и программы.

^ Relational Access Manager – программа-резидент, обеспечивающая доступ к реляционной базе данных так, будто данные хранятся в многомерной базе данных

ODBC (Open Data Base Connectivity) – стандарт для обмена данными через SQL-запросы, который поддерживается практически любой распространенной СУБД.


Express Server – серверское приложение, обеспечивающее доступ к МБД и управлением объектами, которые хранятся в ней.


Объект МБД – это массив(variable), размерность(dimension), формула(formula), отношение(relation), модель(model) или подмножество(valueset).


Размерность – множество значений. В [1] размерность называется измерением, а зависимость массива от элементов размерностей – индексацией.


Массив – это объект МБД, представляющий собой сохраненные значения функции, определенные на размерностях. Размерность массива – это количество размерностей, на которых определён массив. В [1] массив называется показателем.


Формула – объект МБД. Формула является функцией массивов, задаваемой пользователем. Логически формула неотличима от массива, который доступен только для чтения. Отличие формулы от массива в том, что для хранения формулы не требуется много памяти. (см [1]).


^ ООП (объектно-ориентированное программирование) – тип программирования, при котором программа состоит из объектов – логически связанных данных и кода, который эти данные обрабатывает.


DataCube – объект (в смысле ООП) Express Analyzer и Express Objects, назначение которого в том, чтобы связать размерности массива из МБД с колонками и строчками таблицы или осями графика.


Data Selector – диалоговое окно для выбора подмножества из размерностей для отображения на таблице или графике.


ROLAP(Relational OLAP) - оперативная обработка данных, хранящихся в формате, принятых для реляционных баз данных ([3]).


Wizard – диалоговое приложение со специальным видом интерфейса (диалогового окна). Отличительная черта данного интерфейса (взаимодействия с пользователем) в том, что пользователь последовательно отвечает на вопросы программы. Типичный внешний вид Wizard’а показан на рис. 5-9.


^ Технология клиент/сервер – технология, распределяющая вычислительную нагрузку между сервером (обычно – компьютер с высокими техническими характеристиками) и клиентами (компьютерами с невысокими техническими данными). Сервер выполняет основную часть вычислительной работы и пересылает результаты клиентам, которые в меньшей степени задействованы в вычислениях и в основном занимаются взаимодействием с пользователем, т.е. вводом/выводом информации. «Толстый» клиент принимает на себя вычислительную нагрузку в большей степени, чем «тонкий» клиент.


^ Серверское приложение – приложение, обычно выполняемое на сервере и выполняющее определенную вычислительную задачу, результаты которой могут быть востребованы клиентским приложением. Клиентские и серверские приложения обязаны быть способными взаимодействовать друг с другом удаленно.

^ Транзакция – набор небольшого количества операций, в случае сбоя при выполнении которых возможен откат к состоянию до начала выполнения транзакции.
^ 8. Список литературы.


1. С. Архипенков, «Аналитические системы на базе Oracle Express OLAP».


2. М. Альперович, «Введение в OLAP и многомерные базы данных».


3. Майкл Эбби, Майкл Кори, «ORACLE8: Первое знакомство».


4. Электронная документация, постовляемая с Oracle Express.


  1. Приложение.


В данном приложении приведены тексты программ, написанных при выполнении дипломной работы.


Макрос, создающий модельную базу данных в Excel-таблице.


Приведенный ниже макрос заполняет Excel-таблицу «полуслучайными» данными, которые затем переносятся в МБД через ODBC-драйвер.


Sub Random_Fill()

Dim product As Integer

Dim product_cost As Integer

Dim company As Integer

Dim company_name As String

Dim long_company_name As String

Dim region As String

Dim num_of_man As Integer

Dim purpose As String

Dim contact_open As Integer

Dim contact_date As Date

Dim success As Boolean

Dim i As Integer

Dim j As Integer

Dim k As Integer

i = 1


For contact_date = #1/1/1992# To #12/31/2000#

For k = 0 To Int(6 * Rnd)

If Rnd() > 0.7 Then

company = 5 * Int(12 * Rnd) + 1

Worksheets("Organizations and managers").Activate

company_name = Cells(company, 3).Value

long_company_name = Cells(company, 1).Value

num_of_man = Cells(company, 4).Value

region = Cells(company, 2).Value

product = Int(13 * Rnd) + 1

Worksheets("Table").Activate

contact_open = i + 1

i = i + 1

manager = Int(num_of_man * Rnd)

Cells(i, 1).Value = company_name

Cells(i, 2).Value = long_company_name

Cells(i, 3).Value = region

'Type of contact

Cells(i, 4).Value = Worksheets("Contact Specifications").Cells(Int(3 * Rnd) + 1, 1).Value

Cells(i, 5).Value = "open"

purpose = Worksheets("Contact Specifications").Cells(Int(3 * Rnd) + 1, 2).Value

Cells(i, 6).Value = purpose

Cells(i, 7).Value = Worksheets("Organizations and managers").Cells(company + manager, 5).Value

Cells(i, 8).Value = Worksheets("Managers in Interface").Cells(Int(9 * Rnd) + 1, 1).Value

Cells(i, 9).Value = contact_date

'Soft producer

Cells(i, 10).Value = Worksheets("Contact Specifications").Cells(product, 3).Value

'Product

Cells(i, 11).Value = Worksheets("Contact Specifications").Cells(product, 4).Value

product_cost = Worksheets("Contact Specifications").Cells(product, 5)

Cells(i, 12).Value = product_cost

If Rnd > 0.8 Then

Cells(i, 13).Value = Int(product_cost * Rnd * 0.15)

Else

Cells(i, 13).Value = 0

End If


For j = 1 To Int(5 * Rnd)

i = i + 1

manager = Int(num_of_man * Rnd)

Cells(i, 1).Value = company_name

Cells(i, 2).Value = long_company_name

Cells(i, 3).Value = region

'Type of contact

Cells(i, 4).Value = Worksheets("Contact Specifications").Cells(Int(3 * Rnd) + 1, 1).Value

Cells(i, 5).Value = "proceed"

Cells(i, 6).Value = purpose

Cells(i, 7).Value = Worksheets("Organizations and managers").Cells(company + manager, 5).Value

Cells(i, 8).Value = Worksheets("Managers in Interface").Cells(Int(9 * Rnd) + 1, 1).Value

Cells(i, 9).Value = Cells(i - 1, 9).Value + 20 * Rnd

'Soft producer

Cells(i, 10).Value = Worksheets("Contact Specifications").Cells(product, 3).Value

'Product

Cells(i, 11).Value = Worksheets("Contact Specifications").Cells(product, 4).Value

If Rnd > 0.8 Then

Cells(i, 12).Value = product_cost * Rnd * 0.15

Else

Cells(i, 12).Value = 0

End If

Cells(i, 13).Value = 0

Next


i = i + 1

manager = Int(num_of_man * Rnd)

Cells(i, 1).Value = company_name

Cells(i, 2).Value = long_company_name

Cells(i, 3).Value = region

'Type of contact

Cells(i, 4).Value = Worksheets("Contact Specifications").Cells(Int(3 * Rnd) + 1, 1).Value '????

If (Rnd > 0.9) And (purpose "Обучение") Then

Cells(i, 5).Value = "failed"

success = False

Else

Cells(i, 5).Value = "success"

success = True

End If

Cells(i, 6).Value = purpose

Cells(i, 7).Value = Worksheets("Organizations and managers").Cells(company + manager, 5).Value

Cells(i, 8).Value = Worksheets("Managers in Interface").Cells(Int(9 * Rnd) + 1, 1).Value

Cells(i, 9).Value = Cells(i - 1, 9).Value + 20 * Rnd

'Soft producer

Cells(i, 10).Value = Worksheets("Contact Specifications").Cells(product, 3).Value

'Product

Cells(i, 11).Value = Worksheets("Contact Specifications").Cells(product, 4).Value

If success Then

Cells(i, 12).Value = product_cost

Else

Cells(i, 12).Value = -product_cost * 0.95

End If

Cells(i, 13).Value = 0

End If

Next

Next

End Sub


Express-программа DataLoad.


Данная программа производит загрузку данных в МБД из Excel-таблицы посредством SQL-запросов через ODBC-драйвер:


"SQL Dataloader generated by Oracle Express Administrator on 17JUN01.

"* EDDE.MSG is a function used to send progress messages to the

" Express command screen in Oracle Express Administrator

" You can remove this function if not using Administrator


arg _userid text

arg _password text


vrb _end integer

vrb _updafter integer

vrb _stopafter integer

vrb _drive text

vrb _dbpath text

vrb _i integer

vrb _odbcsource text

vrb _rdbms text

vrb _sqldb text

vrb _cursoropen boolean

vrb _retval boolean


VRB _Manager TEXT

VRB _Date DATE

VRB _OpenDate DATE

VRB _Company TEXT

VRB _Product TEXT

VRB _Region TEXT

VRB _Balance DECIMAL

VRB __Balance DECIMAL

VRB _Discount DECIMAL

VRB __Discount DECIMAL

VRB _Fails DECIMAL

VRB _Successes DECIMAL

VRB _Contacts DECIMAL

VRB _RecordID TEXT

VRB _Contact TEXT

VRB _Client TEXT

VRB __Contacts DECIMAL


trap on error

^ PUSH DATEFORMAT


" Initialize

DATEFORMAT=''

pagepause = NO

_i = 0

_updafter = 13945

_stopafter = _updafter


" Make SQL Connection

_odbcsource = 'Interface'

_rdbms = 'EXCEL'

_sqldb = 'D:\\user\\Anatoly\\Interface\\Oracle Express\\exercises\\Interface'

_userid = nafill(_UserID, '')

_password = nafill(_password, '')


_retval = XP_SQLCnct(_odbcsource, _rdbms, _sqldb, _userid, _password)


if _retval eq false

then do

call edde.Msg(SQLERRM, edde.MsgLink)

signal PRGERR

doend


" Declare the Cursor

call edde.Msg(joinchars('Declaring Cursor for DataTable at ', tod '...'), edde.MsgLink)

sql declare C1 cursor for -

select -

Company, -

Region, -

Contact_type, -

Contact_Specification, -

Interface_manager, -

Contact_Date, -

Soft_producer, -

Product, -

Cost, -

Discount -

from DataTable

"Check error codes and open cursor for Fetch

if SQLCODE ne 0

then do

call edde.Msg(SQLERRM, edde.MsgLink)

signal PRGERR

doend


call edde.Msg(joinchars('Opening Cursor for DataTable at ', tod '...'), edde.MsgLink)

sql open C1

_cursoropen = YES


if SQLCODE ne 0

then do

call edde.Msg(SQLERRM, edde.MsgLink)

signal PRGERR

doend


call edde.Msg(joinchars('Starting Fetch of DataTable at ', tod '...'), edde.MsgLink)

_i = 0

while SQLCODE eq 0

do

"******************************

" Fetch the rows

"******************************

^ LIMIT MANAGER TO ALL

LIMIT Client TO ALL

TEMP=0

__Balance=0

__Discount=0

__Contacts=0

_i = _i + 1

SQL FETCH C1 INTO :_Client :_Region :_Contact :_RecordID :_Manager :_Date :_Company :_Product :_Balance :_Discount

MAINTAIN Client MERGE _Client

MAINTAIN Client MERGE _Region

MAINTAIN Contact MERGE _Contact

MAINTAIN Product MERGE _Company

MAINTAIN Product MERGE _Product

MAINTAIN Manager MERGE _Manager

MAINTAIN _Month MERGE _Date

MAINTAIN _Quarter MERGE _Date

MAINTAIN _Year MERGE _Date


_OpenDate=_Date


IF Contacts(Contact _Contact, Product _Product, Manager _Manager, _Month _Date, Client _Client) EQ NA

THEN Contacts(Contact _Contact, Product _Product, Manager _Manager, _Month _Date, Client _Client)=0

Contacts(Contact _Contact, Product _Product, Manager _Manager, _Month _Date, Client _Client)=Contacts(Contact _Contact, Product _Product, Manager _Manager, _Month _Date, Client _Client)+1


__Balance=__Balance+_Balance

__Discount=__Discount+_Discount

__Contacts=__Contacts+1

IF TEMP(Manager _Manager Contact _Contact) EQ NA

THEN TEMP(Manager _Manager Contact _Contact)=0

TEMP(Manager _Manager Contact _Contact)=TEMP(Manager _Manager Contact _Contact) + 1


Inpr.parent(Inpr.Hierdim 'STANDART' Product _Product)=_Company

Inpr.parent(Inpr.Hierdim 'STANDART' Product _Company)='All'

Incl.parent(Incl.Hierdim 'STANDART' Client _Client)=_Region

Incl.parent(Incl.Hierdim 'STANDART' Client _Region)='Все клиенты'


if rem(_i, _updafter) eq 0

then do

call edde.Msg(joinchars(tod ' - ' _i ' rows read...'), edde.MsgLink)

upd

doend


while (_RecordID ne 'success') and (_RecordID ne 'failed')

do

_i = _i + 1

SQL FETCH C1 INTO :_Client :_Region :_Contact :_RecordID :_Manager :_Date :_Company :_Product :_Balance :_Discount


MAINTAIN Client MERGE _Client

MAINTAIN Client MERGE _Region

MAINTAIN Contact MERGE _CONTACT

MAINTAIN Product MERGE _Company

MAINTAIN Product MERGE _Product

MAINTAIN Manager MERGE _Manager

MAINTAIN _Month MERGE _Date

MAINTAIN _Quarter MERGE _Date

MAINTAIN _Year MERGE _Date


IF Contacts(Contact _Contact, Product _Product, Manager _Manager, _Month _Date, Client _Client) EQ NA

THEN Contacts(Contact _Contact, Product _Product, Manager _Manager, _Month _Date, Client _Client)=0

Contacts(Contact _Contact, Product _Product, Manager _Manager, _Month _Date, Client _Client)=Contacts(Contact _Contact, Product _Product, Manager _Manager, _Month _Date, Client _Client)+1


__Balance=__Balance+_Balance

__Discount=__Discount+_Discount

__Contacts=__Contacts+1

IF TEMP(Manager _Manager Contact _Contact) EQ NA

THEN TEMP(Manager _Manager Contact _Contact)=0

TEMP(Manager _Manager Contact _Contact)=TEMP(Manager _Manager Contact _Contact) + 1


if rem(_i, _updafter) eq 0

then do

call edde.Msg(joinchars(tod ' - ' _i ' rows read...'), edde.MsgLink)

upd

doend


doend


LIMIT Manager TO ALL

LIMIT Client TO ALL

FOR Manager

do

if (TEMP NE 0) AND (TEMP NE NA)

then do


IF Balance(_Month _Date, Client _Client, Contact _Contact, Manager _Manager,Product _Product) EQ NA

THEN Balance(_Month _Date, Client _Client, Contact _Contact, Manager _Manager,Product _Product)=0

Balance(_Month _Date, Client _Client, Contact _Contact, Manager _Manager,Product _Product)=Balance(_Month _Date, Client _Client, Contact _Contact, Manager _Manager,Product _Product)+__Balance*TEMP/__Contacts


IF Discount(_Month _Date, Client _Client, Contact _Contact, Manager _Manager,Product _Product) EQ NA

THEN Discount(_Month _Date, Client _Client, Contact _Contact, Manager _Manager,Product _Product)=0

Discount(_Month _Date, Client _Client, Contact _Contact, Manager _Manager,Product _Product)=Discount(_Month _Date, Client _Client, Contact _Contact, Manager _Manager,Product _Product)+__Discount*TEMP/__Contacts


IF _RecordID EQ 'success'

THEN DO

IF Successes(Product _Product, _Month _Date, Contact _Contact, Client _Client) EQ NA

THEN Successes(Product _Product, _Month _Date, Contact _Contact, Client _Client)=0

Successes(Product _Product, _Month _Date, Contact _Contact, Client _Client)=Successes(Product _Product, _Month _Date, Contact _Contact, Client _Client)+TEMP/__Contacts

Currency(Product _Product, _Month _Date, Contact _Contact, Client _Client)=DDOF(_Date-_OpenDate)

DOEND

ELSE DO

IF Fails(Product _Product, _Month _Date, Contact _Contact, Client _Client) EQ NA

THEN Fails(Product _Product, _Month _Date, Contact _Contact, Client _Client)=0

Fails(Product _Product, _Month _Date, Contact _Contact, Client _Client)=Fails(Product _Product, _Month _Date, Contact _Contact, Client _Client)+TEMP/__Contacts

DOEND

doend

doend


doend


upd

call edde.Msg(joinchars(tod ' - ' _i - 1 ' rows loaded.'), edde.MsgLink)

" Close the cursor

sql close C1

sql rollback

call edde.Msg('SQL load complete.', edde.MsgLink)

"Update CONTACT hierarchies...

call edde.Msg(joinchars('Updating CONTACT hierarchies at ' tod '...'), edde.MsgLink)

call edde.HierMnt(1, 'CONTACT')


"Update MANAGER hierarchies...

call edde.Msg(joinchars('Updating MANAGER hierarchies at ' tod '...'), edde.MsgLink)

call edde.HierMnt(1, 'MANAGER')


"Update _MONTH hierarchies...

call edde.Msg(joinchars('Updating _MONTH hierarchies at ' tod '...'), edde.MsgLink)

call edde.HierMnt(1, '_MONTH')


"Update PRODUCT hierarchies...

call edde.Msg(joinchars('Updating PRODUCT hierarchies at ' tod '...'), edde.MsgLink)

call edde.HierMnt(1, 'PRODUCT')


"Update CLIENT hierarchies...

call edde.Msg(joinchars('Updating CLIENT hierarchies at ' tod '...'), edde.MsgLink)

call edde.HierMnt(1, 'CLIENT')


AllDone:

^ POP DATEFORMAT

return


error:

if _cursoropen

then do

sql close c1

sql rollback

doend

POP DATEFORMAT


Express-программа Marg.forecast


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


vrb startd text

vrb endd text


LIMIT Product TO ALL

LIMIT Manager TO ALL

LIMIT Client TO ALL

LIMIT Contact TO ALL

LIMIT _Year TO ALL


Margin.Year=NA

FOR _Year

DO

LIMIT _Month TO _Year

FOR _Month

DO

FOR Product Manager Client Contact

DO

IF Margin NE NA

THEN DO

IF Margin.year EQ NA

THEN DO

Margin.year = 0

DOEND

Margin.year = Margin.year + Margin

DOEND

DOEND

DOEND

DOEND


LIMIT Product TO ALL

LIMIT Manager TO ALL

LIMIT Client TO ALL

LIMIT Contact TO ALL

LIMIT _Year TO 'YR95' to 'YR01'


FOR _Year

DO

Margin.Forecast=(Margin.year(_Year _Year-1)+Margin.year(_Year _Year-2)+Margin.year(_Year _Year-3))/3.0

DOEND


Express-программа SetRelation.


Программа инициализирует отношения между месяцами и кварталами, кварталами и годами, месяцами и сезонами:

vrb mn integer


LIMIT _Quarter TO ALL


FOR _Quarter

DO

LIMIT _Month TO _Quarter

_Month._Quarter=_Quarter

DOEND


LIMIT _Year TO ALL


FOR _Year

DO

LIMIT _Quarter TO _Year

_Quarter._Year=_Year

DOEND


LIMIT _Month TO All


FOR _Month

DO

mn=MMOF(_Month)

IF ((mn ge 1) and (mn le 2)) or (mn eq 12)

THEN _Month.seasons='Winter'

IF ((mn ge 3) and (mn le 5))

THEN _Month.seasons='Spring'

IF ((mn ge 6) and (mn le 8))

THEN _Month.seasons='Summer'

IF ((mn ge 9) and (mn le 11))

THEN _Month.seasons='Autumn'

DOEND


Express-программа All.rollup.


Данная программа агрегирует данные по иерархиям в размерностях Product и Client:


LIMIT Product TO ALL

LIMIT _Month TO ALL

LIMIT Manager TO ALL

LIMIT Contact TO ALL

LIMIT Client TO ALL


ROLLUP Balance OVER Product USING Inpr.parent

ROLLUP Discount OVER Product USING Inpr.parent

ROLLUP Contacts OVER Product USING Inpr.parent

ROLLUP Successes OVER Product USING Inpr.parent

ROLLUP Fails OVER Product USING Inpr.parent


LIMIT Product TO ALL

LIMIT _Month TO ALL

LIMIT Manager TO ALL

LIMIT Contact TO ALL

LIMIT Client TO ALL


ROLLUP Balance OVER Client USING Incl.parent

ROLLUP Discount OVER Client USING Incl.parent

ROLLUP Contacts OVER Client USING Incl.parent

ROLLUP Successes OVER Client USING Incl.parent

ROLLUP Fails OVER Client USING Incl.parent


chastyu-tela-imenno-iz-za-perenapryazheniya-mi-ispiti-ci-samomassazh-daosskij-put-omolozheniya.html
chastyu-v-teoreticheskom-vklade-lassuella-ya-sklonen-so-izdatelskij-dom-vahrah.html
chastyu-vi-ee-oskorblyali-i-borolis-protivnoe-esli-bi-vi-tak-obrashalis-so-refrejming-orientaciya-lichnosti-s-pomoshyu-rechevih-strategij.html
chastyu-voinov-sobranie-sochinenij-tom-11-yurij-mirolyubov-slavyane-v-karpatah-m1go1iou-lig1.html
chastyu-zavoevival-livoniyu-zakonov-i-nravov-ne-vizvano-edinstvenno-proizvolom-ih-fantazii.html
chastyu-zubi-i-fragmenti-chelyusti-i-cherepa-okamenelostyam-dali-krasochnie-imena-majkl-a-kremo-richard-l-tompson.html
  • kanikulyi.bystrickaya.ru/zakon-respubliki-kazahstan-ot-23-dekabrya-1995-goda-n-2721.html
  • university.bystrickaya.ru/glava-4-kak-podelit-vlast-i-polnomochiya-bez-usherba-dlya-biznesa-etim-nado-vospolzovatsya.html
  • abstract.bystrickaya.ru/-2kvalifikaciya-i-podgotovka-personala-tehnicheskij-reglament-ekspluatacii-atomnih-stancij.html
  • laboratornaya.bystrickaya.ru/razdel-8-normativnie-postanovleniya-po-grazhdanskomu-processualnomu-zakonodatelstvu.html
  • occupation.bystrickaya.ru/novosti-stran-dalnego-zarubezhya-rinok-myasa-rf-poluchatel.html
  • lektsiya.bystrickaya.ru/pravila-bezopasnosti-na-predpriyatiyah-torfyanoj-promishlennosti-razdel-obshie-polozheniya-stranica-9.html
  • kanikulyi.bystrickaya.ru/zadachi-po-resheniyu-investirovaniya-zhilishnogo-fonda-strani-31-stranica-3.html
  • ekzamen.bystrickaya.ru/ris-1-krivaya-ohlazhdeniya-splava-s-214-uchebno-metodicheskij-kompleks-po-discipline-materialovedenie-specialnost.html
  • upbringing.bystrickaya.ru/literatura-anglijskogo-dekadansa-istoki-stanovlenie-samorefleksiya.html
  • school.bystrickaya.ru/finansovie-osnovi-mestnogo-samoupravleniya-po-zakonoproektu-komissii-kozaka-chast-2.html
  • writing.bystrickaya.ru/disciplina-gse01-inostrannij-yazik-programma-disciplini-gse-f-01-inostrannij-yazik-celi-i-zadachi-disciplini.html
  • prepodavatel.bystrickaya.ru/tema-uroka-glasnie-v-korne-s-cheredovaniem-triedinaya-cel-uroka-modulnoe-obuchenie-bloki-celej-razvitiya-vospitaniya.html
  • uchit.bystrickaya.ru/themensubthemen-rabochaya-programma-f-tpu-1-2101-disciplini-inostrannij-yazik-v-sfere-professionalnoj-kommunikacii-utverzhdayu.html
  • books.bystrickaya.ru/duhovno-nravstvennoe-vospitanie-kak-odno-iz-prioritetnih-napravlenij-v-rabote-pedagogicheskoj-akademii-poslediplomnogo-obrazovaniya.html
  • universitet.bystrickaya.ru/tema-5-nacionalnoe-bogatstvo-komi-filial-gou-vpo-kirovskaya-gosudarstvennaya-medicinskaya-akademiya-federalnogo.html
  • institute.bystrickaya.ru/glava-11-predrassudki-nepriyazn-k-drugim-465-socialnaya-psihologiya.html
  • uchit.bystrickaya.ru/stavropolskogo-kraya-postanovlenie-stranica-3.html
  • essay.bystrickaya.ru/differencialno-diagnosticheskij-oprosnik-igra-prover-svoi-znaniya-professij.html
  • laboratornaya.bystrickaya.ru/programmi-organizacii-obedinennih-nacij-po-naselennim-punktam-distr-general.html
  • bukva.bystrickaya.ru/problema-ansamblya-v-arhitekture-xvii-veka-barokko.html
  • essay.bystrickaya.ru/dominiruyushie-paradigmi-transcendentalizma-v-zapadnoevropejskoj-filosofii-stranica-2.html
  • textbook.bystrickaya.ru/izdanie-osushestvleno-v-ramkah-programmi-pushkin-pri-podderzhke-ministerstva-inostrannih-del-francii-i-posolstva-francii-v-rossii-ouvrage-rjalisj-dans-le-cadre-du.html
  • teacher.bystrickaya.ru/glava-na-fizik-purpurna-esen-i-chast.html
  • bystrickaya.ru/yagudaev-yu-v-kakie-budut-voprosi-po-povestke-dnya.html
  • uchit.bystrickaya.ru/teoreticheskie-napravleniya-psihologicheskom-konsultirovanii-programma-perepodgotovki-po-specialnosti-pedagog-psiholog.html
  • ucheba.bystrickaya.ru/programma-informaciya-dlya-vseh-rossijskij-komitet.html
  • university.bystrickaya.ru/geroj-teruelya-lukashenko-a-i-dorogami-vozdushnogo-desanta-izd-2-e-dopolnennoe-i-pererabotannoe-m-moskovskij.html
  • doklad.bystrickaya.ru/v-state-raskrivayutsya-voprosi-svyazannie-s-konfliktom-interesov-s-uchastiem-voennosluzhashih-sushnost-soderzhanie-vidi-pravovie-osnovi-razresheniya.html
  • studies.bystrickaya.ru/analz-tehnolog-vigotovlennya-varenih-kovbasnih-virobv-proekt-myasopererobnogo-pdprimstva-potuzhnstyu-3-t-virobv-za-zmnu.html
  • ekzamen.bystrickaya.ru/sostav-rabot-proekta-model-processov-msf-biznes-informatika.html
  • turn.bystrickaya.ru/perevod-g-v-barishnikovoj-stranica-45.html
  • kolledzh.bystrickaya.ru/ajman-sholpan-zhiri-le-lshemne-keler-bolsa-ozi-krpesh-bayan-slu.html
  • ucheba.bystrickaya.ru/proekt-moe-otechestvo-po-razvitiyu-duhovno-nravstvennogo-vospitaniya-detej-i-molodezhi-na-2011-2012-gg-proektnaya-liniya-.html
  • shkola.bystrickaya.ru/normativnie-akti-informacionnij-byulleten-administracii-sankt-peterburga-31-732-22-avgusta-2011-g.html
  • lesson.bystrickaya.ru/pervaya-stranica-7.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.