Реферат по предмету "Компьютеры и цифровые устройства"


Введение в разработку принятия решений

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

другое. Ситуация, когда аналитику приходится иметь дело с многофакторными данными, осложняется двумя обстоятельставами: • Во-первых, средний человек может одновременно оперировать тремя-четырьмя сущностями, учитывая при этом связи между ними; с увеличением числа сущностей эффективность обработки информации человеком падает; • Во-вторых, чисто психологически человеку, живущему в трехмерном мире, трудно представить представить пространство размерностью больше 3 Математики давно оперируют с многомерными пространствами,

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

Delphi позволяет оперировать с многомерными данными, состоит в следующем. Данные представляются в виде так называемого метакуба (или кросстаба, или многомерного куба), где одному фактору соответствует свое измерение. Рис. 1. Данные в трехмерном кубе. На рис. 1.1 приведен куб. В нем представлена информация по продажам. Одно измерение соответствует городам, в которых осуществлялись продажи; второе – фирмам, которым продавался

товар; третье – временным периодам. В конкретной ячейке, как правило, предоставляются данные – сумма, среднее, максимальное значение – или вновь, многомерные данные (кубы). Пример такого куба, содержащего информацию об отпусках товара по конкретной фиреме из конкретного города для конкретного временного отрезка предоставлен на рис 1.2. Рис. 2. Ячейка метакуба также может быть метакубом.

Обзор компонентов Delphi для разработки систем принятия решений. При создании в приложении формы для многомерного представления данных следует помнить, что при этом обязательно должны решаться следующие задачи: - должен быть создан группирующий и суммирующий запрос SQL, обеспечивающий открытие набора данных для метакуба; - перед отображением данных необходимо настроить параметры размерностей метакуба; - непосредственный показ данных в метакубе; - работающий метакуб должен

эффективно управляться на уровне размерностей. Для этого в форме приложения требуется разместить как минимум пять компонентов со страницы Decision Cube Палитры компонентов. Вкладка Decision Cube имеет следующий общий вид: Для создания запроса SQL можно использовать компонент TDecisionQuery (полный функциональный аналог компонента

TQuery). TDecisionQuery служит для определения набора данных, на основании которого затем будет создаваться многомерный куб. Этот компонент разработан специально для указанных целей, и, поэтому его использование при разработке систем принятия решений является более предпочтительным, чем использование компонентов набора данных – TTable и TQuery. Однако и эти Компоненты могут применяться для хранения данных, на которых стоиться метакуб Запрос должен быть связан с компонентом

TDecisionCube, который осуществляет подготовку набора данных запроса к многомерному показу. Связан с набором данных (как правило это компонент TDecisionQuery) при помощи свойства DataSet. Для соединения многомерного набора данных с компонентом отображения данных используется компонент TDecisionSource — полный функциональный аналог TDataSource. Этот компонент, в свою очередь, должен связываться и с набором данных, и с инструментом

многомерного представления данных. Многомерный «источник данных» соединяется с компонентом TDecisionCube при помощи свойства DecisionCube. Непосредственный показ многомерного набора данных проводится при помощи компонентов TDecisionGrid и TDecisionGraph. Они должны поддерживать соединение с компонентом TDecisionSource. TDecisionGrid имеет в системах многомерных данных то же функциональное предназначение что и компонент

TDBGrid при работе с обычным набором данных. В TDecisionGrid показываются непосредственные данные из многомерного куба. Данные по одним измерениям куба выводятся построчно (горизонтально), по другим – вертикально, в виде столбцов. Компонент связан с компонентом TDecisionSource через свойство DecisionSource. TDecisionGraph предназначен для показа графиков, источником которых служат многомерные данные. Компонент связан с компонентом

TDecisionSource через свойство DecisionSource. Наконец, управление многомерным представлением данных реализует компонент TDecisionPivot, он также должен быть связан с компонентом TDecisionSource. TDecisionPivot позволяет открывать и закрывать измерения метакуба. Для этого пользователю следует нажать (или отжать нажатую) кнопку, соответствующую конкретному изменению. Компонент TDecisionQuery. Компонент TDecisionQuery настолько похож на компонент

TQuery, что не имеет отличных от него, уникальных свойств, методов и событий. Набор данных формируется при помощи запроса, который основан на стандартном синтаксисе SQL 92. Для обеспечения работы многомерного представления данных запрос должен удовлетворять ряду требований. 1. Поля, по которым должны строиться измерения многомерного куба перечисляются после ключевого слова SELECT; 2. Поля, по которым должны измерений строить не нужно в операторе

SELECT в качестве возвращаемых полей результирующего набора данных не перечисляются; 3. только после источников-полей для измерений кубапречисляются агрегатные выражения – сумма, среднее и число повторений; агрегированные данные затем будут выводиться по указанным ранее измерениям; 4. Обязательно использование GROUP BY, где необходимо перечислить все поля, по которым строятся измерения куба, причем в том же порядке, в котором они следуют после ключевого слова

SELECT. Компонент TDecisionQuery должен только обеспечить выполнение запроса и создание набора данных, он не имеет никаких дополнительных свойств или методов. Поэтому для создания набора данных можно использовать и обычный компонент TQuery. Преимущество компонента TDecisionQuery состоит в том, что он имеет специализированный редактор для создания текста запроса (рис 3.1). Он вызывается командой

Decision Query Editor из всплывающего меню компонента или двойным щелчком на компоненте. Элементы управления страницы Dimensions/Summaries позволяют создавать текст запроса, манипулируя именами полей таблиц. Псевдоним базы данных выбирается в комбинированном списке Database. После этого в списке Table задается нужная таблица. Если в запросе требуется использовать несколько таблиц, то для их выбора можно воспользоваться утилитой

SQL Builder, которая вызывается щелчком на одноименной кнопке. рис 3. 1 Окно редактора многомерного запроса В списке List of Available Fields перечислены поля таблицы БД, чье имя выбрано в соответствующем списке Table. Используя кнопки с изображением стрелок, поля, по которым должны строиться измерения в многомерном кубе, перемещают в список Dimensions. Тем же способом в список

Summaries помещают поля, по которым нужно производить агрегацию. Тип агрегации запрашивается тут же. Это SUM (сумма), COUNT (счетчик повторений) и AVERAGE (среднее значение). Запрос формируется автоматически при работе с описанными элементами управления. Текст запроса доступен для просмотра и редактирования на странице

SQL Query. Кнопка Query Builder позволяет перейти в режим запроса по образцу (Query By Example) для построения оператора SELECT. Компонент TDecisionCube. Компонент TDecisionCube осуществляет преобразование набора данных, который содержится в компоненте TDecisionQuery, к виду, доступному для отображения визуальными компонентами многомерного представления данных. Обычную таблицу набора данных компонент преобразует в многомерный куб.

Число размерностей создаваемого метакуба зависит от числа полей данных набора данных. Значения в ячейках метакуба зависят от типа агрегатной функции в запросе SQL. Разберем основные свойства и методы компонента TDecisionCube. Свойства Объявление Описание property Active: Boolean; Разрешает или запрещает преобразование набора данных в метакуб property

BinData: Boolean; Значение True означает, что хотя бы одна размерность находится в свернутом состоянии (данные не отображаются) property Capacity: Integer; Определяет число байтов, используемых для хранения многомерного массива данных куба. В случае нехватки памяти вызывается исключение ELowCapacityError property CurrentSuramary: Integer; Содержит индекс текущей суммы метакуба property

DataSet: TDataSet; Ссылка на экземпляр набора данных, который отображается в метакубе. Рекомендуется для этих целей использовать TDecisionQuery type TCubeDesignState = (dsNoData, dsMetaData, dsDimensionData, dsAHData); property DesignState: TCubeDesignState; Задает режим отображения данных в метакубе: dsNoData — во время разработки данные не видны; dsMetaData — видны названия размерностей; dsDimensionData — видны названия размерностей

и значения, суммы не видны; dsAHData — видны все данные property DimensionCount: Integer; Возвращает число размерностей property DimensionMap: TCubeDims; Индексированный список ссылок на объекты параметров размерностей. Определяет параметры компонента TDecisionCube, такие как число и состав измерений куба; формат представления значений по конкретному измерению; метки, которые будут соответствовать каждому измерению в компонентах

TDecisionGrid и TDecisionPivot; максимальное число измерений; состав показываемых значений. Установка указанных параметров осуществляется в редакторе куба (Decision Cube Editor), который активизируется при двойном щелчке мышью на компоненте TDecisionCube в форме приожения или при нажатии кнопки кнопки в поле данных свойства DimensionMap в инспекторе объектов. property DimensionMapCount:

Integer; Общее число полей набора данных, включая поля размерностей и сумм property MaxCells: Integer; Задает максимальное число ячеек метакуба property MaxDimensions: Integer; Задает максимальное число размерностей property MaxSummaries: Integer; Задает максимальное число сумм property ShowProgressDialog: Boolean; При значении True при подготовке метакуба отображается прогресс-индикатор

property SummaryCount: Integer; Возвращает число полей, использованных для формирования сумм Методы Объявление Описание function GetDetailSQL (ValueArray : TSmalllntArray; SelectList: string; bActive: Boolean) : string; Возвращает текст запроса SQL, который может быть использован для создания набора данных, включающего данные из метакуба без сумм function GetSQL(ValueArray:

TSrralllntArray; bActive: Boolean): string; Возвращает текст запроса SQL, который может быть использован для создания набора данных, включающего данные из метакуба без сумм procedure ShowCubeDialog; Вызывает специализированный редактор компонента, в котором могут быть изменены или переопределены свойства куба, установленные во время разработки. procedure Refresh (DimensionMap : TCubeDims; bForce: Boolean) ;

Обновляет список объектов параметров размерностей Методы-обработчики событий Объявление Описание type TCubeRefreshEvent = procedure (DataCube: TCustomDataStore; DimMap: TCubeDims) of object; property OnRefresh: TCubeRefreshEvent; property AfterClose: TCubeNotifyEvent;

Наступает перед изменением плана куба. Это происходит после изменения параметров куба во время выполнения (см метод ShowCubeDialog). property AfterOpen: TCubeNot if yEvent; Вызывается сразу после закрытия компонента (Active := False) property BeforeClose: TCubeNotif yEvent ; Вызывается сразу после открытия компонента (Active := False) property BeforeOpen: TCubeNotifyEvent; Вызывается перед закрытием компонента (Active :=

False) TErrorAction = (eaFail, eaContinue) ; TCapacityErrorEvent = procedure (var EAction: TErrorAction) of object; property OnLowCapacity: TCapacityErrorEvent ; Вызывается перед открытием компонента (Active := False) Разберем подробнее определения свойств куба, для этого в инспекторе объектов отыщем свойство DimensionMap и в поле данных этого куба нажмем кнопку (…).

Появится окно редактора многомерного куба. Оно показано на рис. 4.1. В списке Avalibe Fields перечислены поля, по которым стоятся измерения куба, и формулы для расчета агрегированных значений. Для текущего поля или формулы слева показываются параметры: - Display Name – метка, которая будет показываться для измерения в компонентах TDecisionGrid, TDecisionPivot, TDecisionGraph; - Type - тип (Dimension,

Sum, Average, Count); - Active Type – определяет показываемую информацию – As Needed (показывается, когда необходимо); Active (показывается всегда); Inactive (не показывается никогда); - Format – формат представления значений; - Grouping – группировка по году, кварталу, месяцу и отдельному значению; - Initial Value – начальное значение; Закладка Memory

Control позволяет определить установки памяти: - Максимальное число измерений, сумм, ячеек (группа Cube Maximums); - Показывать только заголовки данных во время разработки приложения для экономии времени и ресурсов компьютера (группа Designer Data Options). TDecisionSource. Компонент TDecisionSource предназначен для связывания визуальных компонентов многомерного представления (TDecisionGrid, TDecisionGraph) с не визуальным компонентом

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

TDecisionSource. Объявление Описание type TDecisionControlType = (xtCheck, xtRadio, xtRadioEx) ; property ControlType: TDecisionControlType; Определяет способ управления отдельной размерностью в компоненте TDecisionGrid. Имеет средства для управления состоянием многомерного представления в визуальных компонентах. Для этого используется свойство ControlType. Рассмотрим его возможные значения: xtcheck — щелчок на кнопках размерности в компонентах TDecisionGrid и TDecisionPivot приводит к открытию или закрытию размерности;

xtRadio — щелчок на кнопках размерности в компонентах TDecisionGrid и TDecisionPivot приводит к открытию или закрытию данной размерности и закрытию всех остальных в этом направлении; xtRadioEx — щелчок на кнопках размерности в компонентах TDecisionGrid и TDecisionPivot приводит к открытию или закрытию данной размерности и закрытию или открытию всех остальных размерностей в этом направлении. property

CurrentSum: Integer; Содержит индекс текущей суммы в компоненте TDecisionGrid property DecisionCube: TDecisionCube; Связывает данный компонент с компонентом TDecisionCube. Содержит ссылку на экземпляр компонента TDecisionCube type TNotifyEvent = procedure (Sender: TObject) of Object; property

OnBeginPivot: TNotifyEvent Наступает перед изменением данных в кубе при нажатии (отжатии) кнопки, соответствующей измерению куба в компоненте TDecisionPivot, или при раскрытии (свертке) данных по измерению в TDecisionGrid property OnEndPivot: TNotifyEvent Событие вызывается той же причиной, что и OnBeginPivot, однако наступает после изменения данных в кубе, но до отображенияэтих изменений в связанных с TDecisionSource компонентах property OnLayoutChange:

TNotifyEvent Наступает после изменения схемы данных в кубе. Событие наступает после события OnBeginPivot, но перед событием OnEndPivot и только в том случае, когда данные в кубе остаются теми же. При изменении состава измерений, которое сопровождается изменением данныхв кубе, property OnNewDimensions: TNotifyEvent Наступает при изменении состава измерений, которое сопровождается изменением

данных в кубе property OnLayoutChange: TNotifyEvent Наступает после изменения свойств куба (компонент TDecisionCube) property Ready: Boolean; Значение True означает, что данный компонент связан с активным компонентом TDecisionCube property SparseCols: Boolean; При значении True в компоненте TDecisionGrid не показываются столбцы с пустыми значениями property

SparseRows: Boolean; При значении True в компоненте TDecisionGrid не показываются строки с пустыми значениями TDecisionGrid. Компонент TDecisionGrid предназначен для многомерного представления данных в табличном виде. Параметры отображаемого набора данных (какие размерности будут видны при открытии, как группировать данные, как управлять размерностями) настраиваются при помощи других компонентов многомерного представления.

В компоненте TDecisionGrid можно настроить только свойства самой сетки. Показ промежуточных сумм. Для каждого значения данных по измерению, показываются промежуточные суммы. Их показ можно устранить. Для этого нужно щелкнуть по компоненту TDecisionGrid правой кнопкой мыши и во всплывающем меню выбрать Subtotals on/off. Повторный выбор данного элемента приведет к включению промежуточных сумм в сетку.

Подобного же эффекта, но для конкретного измерения, можно добиться если выбрать мышку ячейку заголовка конкретного измерения и нажать правую кнопку. Выбор элемента Display Data and Subtotals приводит к показу промежуточных сумм. Выбор Display Data Only устраняет показ промежуточных сумм для измерения. Те же действия осуществимы и для конкретного значения по измерению.

Если щелкнуть правой кнопкой мыши по ячейки данных, соответствующих нужному измерению, то появится меню, в котором к элементам Display Data and Subtotals и Display Data Only добавится элемент Display Subtotals Only. Выбор этого элемента приводит к показу только промежуточных сумм. Установка одного из названных режимов показа относится не к измерению в целом, а к данным, касающимся

того или иного значения измерения, которое показывается в ячейке. Все возможности, о которых идет речь, доступны как во время разработки приложения, так и во время его выполнения. Исключение и включение измерения в состав показываемых в сетке данных. Для того, чтобы скрыть данные по измерению можно воспользоваться двумя способами. Первый способ. Щелкнуть правой кнопкой мыши по ячейке данных измерения щелкнуть правой кнопкой мыши

по ячейке данных измерения, которое показывается построчно, и во всплывающем меню выбрать элемент Drill in to this value. Второй способ. Нажать правую кнопку мыши: - Над заголовком измерения; - Над пустой ячейкой в ряду сетки, расположенным над рядом, в котором показываются названия измерений; - Над крайним левым (пустым) столбцом сетки, в списке измерений снять отметку с необходимого измерения. Чтобы включить измерение в состав показываемых, нужно воспользоваться вторым

способом и установить отметку у необходимого измерения. Свойства Объявление Описание Property CaptionColor: TColor Определяет цвет фона для заголовков столбцов и строк Property CaptionFont: TFont Определяет шрифт для заголовков столбцов и строк property Cells [ACol, ARow: Integer] : string; Индексированный массив значений всех ячеек компонента в строковом

формате property ColCount : Integer; Возвращает общее число колонок в сетке Property DataColor: TColor Определяет цвет фона во всех ячейках property DecisionSource: TDecisionSource; Указывает на компонент TDecisionSource, через который осуществляется связь с набором данных Property DefaultColWidth: Integer; определяет умалчиваемую ширину (в пикселях) всех ячеек

TDecisionGrid. Установка нового значения этого свойства приводит к изменению ширины сразу всех ячеек компонента Property DefaultRowWidth: Integer; определяет высоту (в пикселях) всех ячеек TDecisionGrid. Установка нового значения этого свойства приводит к изменению ширины сразу всех ячеек компонента property Dimensions: TDisplayDims; Объект TDisplayDims представляет индексированный список объектов визуальных свойств размерностей

Property DefaultRowWidth: Integer; Определяет умалчиваемую ширину (в пикселях) всех ячеек TDecisionGrid. Установка нового значения этого свойства приводит к изменению ширины сразу всех ячеек компонента. property DefaultRowHeight: Integer; Определяет умалчиваемую высоту (в пикселях) всех ячеек. property FixedCols:Integer; Возвращает количество столбцов, используемых для показа заголовков измерений и меток данных, то есть для показа служебной информации. property

FixedRows: Integer ; Возвращает количество строк, используемых для показа служебной информации. property GridLineColor: TColor; Определяет цвет линий, отделяющих ячейки друг от друга. property GridLineWidth: Integer; Определяет толщину линий (в пикселях). property LabelColor: TColor; Содержит цвет фона для заголовков столбцов и строк. property LabelFont: TFont; Определяет шрифт для заголовков столбцов и строк. property

LabelSumColor: TColor; Задает цвет фона ячеек, в которых показываются заголовки сумм. property RowCount: Integer; Возвращает количество строк в TDecisionGrid type TDecisionGridOption = (cgGridLines, cgOutliner, cgPivo table) ; TDecisionGridOptions = set of TDecisionGridOption; property Options: TDecisionGridOptions; Определяет общие настройки компонента: cgGridLines — отображаются вертикальные

и горизонтальные разделительные линии; cgOutliner — отображаются элементы управления в виде знаков "+" и "-" для открытия и закрытия размерностей; cgpivotable — размерности можно переупорядочивать при помощи перетаскивания property ShowCubeEditor: Boolean; Разрешает или запрещает использование специализированного редактора компонента TDecisionCube property Totals: Boolean; При значении

True сетка имеет промежуточные суммы по каждой колонке и строке Методы Объявление Описание type TDecisionDrawStates = i (dsGroupStart, dsRowCaption, dsColCaption, dsSum, dsRowValue, dsColValue, dsData, dsOpenAfter, dsCloseAfter, dsCloseBefore, dsOpenBefore, dsRowIndicator, dsColIndicator, dsRowPlus, dsColPlus, dsNone); TDecisionDrawState = set of TDecisionDrawStates; function CellDrawState(ACol, ARow:

Integer; var Value: string; var DrawState: TDecisionDrawState) : boolean; Позволяет определить назначение любой ячейки сетки. Параметры ACol и ARow определяют положение ячейки в сетке. В параметре Value возвращается строка, содержащая значение в том виде, как оно представлено в ячейке. Параметр DrawState возвращает информацию о назначении ячейки function

CellValueArray (ACol, ARow: Integer; var ValueArray: TValueArray): boolean; Возвращает индексы всех полей, данные которых суммированы в ячейке. Параметр ValueArray содержит индексы полей Свойства компонента TDisplayDims: Property Count: integer возвращает число измерений в TDecisionGrid, т.е. число компонентов TDisplayDim в коллекции

TDisplayDims; Property Items[Index:Ineger] возвращает компонент TDisplayDim с индексом Index. TDisplayDim соответствует серии данных по одному измерению. Значение Index лежит в диапазоне 0 Count – 1 type TGridDrawState = set of (gdSelected, gdFocused, gdFixed); TDecisionDrawState = set of (dsGroupStart, dsRowCaption, dsColCaption, dsSum, dsRowValue, dsColValue,

dsData, dsOpenAfter, dsCloseAfter, dsRowIndicator, dsColIndicator, dsRowPlus, dsColPlus, dsNone); TDecisionDrawCellEvent -procedure (Sender: TObject; Col, Row: Longlnt; var Value: String; var AFont: TFont; var AColor: TColor; AState: TGridDrawState; ADrawState: TDecisionDrawState) of Object; property OnDecisionDrawCell:

TDecisionDrawCellEvent; Наступает при прорисовке ячейки: Col -номер столбца; Row - номер строки; Value -символьное представление значения, показываемого в ячейке; AFont - шрифт, которым показывается значение в ячейке; AColor - цвет фона в ячейке; AState -состояние ячейки {gdSelected выбранная ячейка; gdFocused- ячейка с фокусом ввода; gdFixed — фиксированная ячейка); ADrawState - множество, определяющее вид показываемых

в ячейке данных; dsGroupStart - ячейка - первая строка или первый столбец для измерения; в этом случае в множество входят также значения dsRowValue или dsCol¬Value; dsRowCaption — в ячейке показывается заголовок строки; dsColCaption - в ячейке показывается заголовок столбца; dsSum - в ячейке показывается метка или значение промежуточной суммы; в этом случае в множество входят также значения dsRowValue, dsColValue и dsData; dsRowValue — в ячейке показывается одно из значений измерения (метка), а не собственно данные;

название измерения в этом случае расположено в ячейке слева; dsColValue-в ячейке показывается одно из значений измерения (метка), а не собственно данные; название измерения в этом случае расположено в ячейке сверху; dsData — в ячейке показываются данные; dsOpenAfter — ячейка имеет кнопку «+», использующуюся для раскрытия данных по следующему измерению; в этом случае в множество входят также значения dsRowCaption, dsColCaption, dsRowPlus и dsColPlus; dsCloseAfter - ячейка имеет кнопку «-»; в этом случае в множество

входят также значения dsRowCaption, dsColCaption, dsRowPlus и dsColPlus; dsRowIndicator - ячейка используется только для показа кнопок «+» или «-» и располагается в самом левом столбце TDecisionGrid; dsColIndicator - ячейка используется только для показа кнопок «+» или «-» и располагается в самой верхней строке; dsRowPlus - ячейка, определяемая dsRowIndicator, содержит кнопку «+»; появляется только совместно с dsRowIndicator, dsColPlus - ячейка, определяемая dsColIndicator, содержит кнопку

«+»; появляется только совместно с dsColIndicator, dsNone - у ячейки нет специального предназначения. type TDecisionExamineCellEvent = procedure (Sender: TObject; ICol, IRow: Longlnt; ISum: Integer; const ValueArray: TSmalllntArray) of Object; property OnDecisionExamineCell: TDecisionExamineCellEvent; Наступает, когда пользователь, находясь в ячейке данных, нажимает правую

кнопку мыши: ICol - номер столбца ячейки; IRow -номер строки ячейки; ISum - номер текущей суммы; ValueArray — массив координат в -координатной сетке TDecisionSource (а не TDecisionGrid). Для получения имени измерения, соответствующего конкретному элементу массива, следует использовать метод GetDimensionName. property OnTopLeftChanged: TNotifyEvent; Наступает при прокрутке данных в сетке

TDecisionGrid Свойства компонента TDisplayDim Property Alignment: TAlignment Определяет выравнивание Property Color: TColor Определяет цвет фона в ячейках Property DisplayName: String Определяет текст заголовка Property FieldName: String Определяет поля, по которому строится измерение

Property Format: String Определяет формат представления значений в ячейках Property Subtotalst: Boolean Определяет следует ли (True) или нет (False) показывать значения промежуточных сумм по измерению. TDecisionGrid – визуальный компонент. Приведем несколько примеров отражающих его свойства. Также на их основе можно будет наглядно посмотреть, что из себя представляют многомерные данные.

Пусть имеем 3 таблицы базы данных. Первая таблица Tovary.DB содержит сведения о товарах. В состав таблицы входят поля: - Tovar – наименование товара; - Typ_Tovara – тип товара; - Ed_Izm – единица измерения товара; - Zena – цена за единицу измерения товара. Первичный ключ построен по полю Tovar. Вторая таблица

Pokup.DB содержит сведения о покупатеях товара. В состав таблицы входят поля: - Pokup – наименование покупателя; - Gorod – город, в котором расположена организация-покупатель. Первичный ключ построен по полю Pokup. Третья таблица Rashod.DB содержит сведения о расходе товара со склада. В состав таблицы входят поля - N_Rash – уникальный номер расхода; -

Den – день; - Mes – месяц; - God – год даты расхода; - Tovar – наименование товара; - Pokup – наименование покупателя; - Kolvo – количество единиц отпущенного товара; Первичный ключ построен по полю N_Rash. Таблица находится в отношении «многие-к-одному» с таблицами Tovary.DB и Pokup.DB. Для наглядности наших дальнейших примеров, разместим все эти три таблицы на форме

(что не является обязательным). Для таблицы Tovary.DB: Для этого разместим на форме компонент TTable с именем Table1, в свойстве DatabaseName имя базы данных (в нашем случае DB), в свойстве Table – имя таблицы (Tovary.DB); компонент TDataSource с именем DataSource1, в свойстве DataSet укажем имя компонента

Ttable, т.е.Table1; компонент TDBGrid, с именем DBGrid1, в свойстве DataSource укажем DataSource1. Аналогичные действия проведем с таблицами Pokup.DB и Rashod.DB. Пример 1. Построить многомерный куб для представления: - Общей суммы расхода - Общего числа позиций купленных товаров По измерениям - Товар - Город - Покупатель - Тип товара -

Месяц из даты отпуска товара Расположим на форме компонент TDecisionQuery с именем DecisionQuery1. Занесем в свойство DatabaseName имя базы данных (в нашем случае DB). В свойстве SQL определим оператор Select, в котором произведем внутреннее соединения таблиц Rashod, Tovary и Pokup: SELECT P.GOROD, R.POKUP, T.

TYP_TOVARA, R.TOVAR, R.MES, SUM ( R.KOLVO * T.ZENA ), Count(R.Kolvo) FROM "RASHOD.DB" R, "POKUP.DB" P, "TOVARY.DB" T WHERE R.POKUP = P.POKUP AND T.TOVAR = R.TOVAR GROUP BY P.GOROD, R.POKUP, TYP_TOVARA, R.TOVAR,R.MES Компонент TDecisionCube с именем

DecisionCube1. Занесем в свойство DataSet DecisionQuery1. В свойстве Active DecisionQuery1 установим значение True. Расположим компонент TDecisionSource с именем DecisionSource1. В свойство DecisionCube запишем имя куба DecisionCube1. Расположим компонент TDecisionGrid с именем

DecisionGrid1. В свойство DecisionSource помещаем DecisionSource1. Отображение многомерных данных в виде таблицы готово. Пример 2. Показать на красном фоне те значения в области данных (но не значений измерений), где значения больше 2000. Для тех полей области данных, которые содержат пустые значения, выводить 0. Добавим следующую процедуру procedure TForm1.DecisionGrid1DecisionDrawCell(Sen der:

TObject; Col, Row: Integer; var Value: String; var aFont: TFont; var aColor: TColor; AState: TGridDrawState; aDrawState: TDecisionDrawState); begin IF dsData in aDrawState THEN \ вид значений - данные begin IF Value = then Value:= '0'; IF not(gdFocused in AState) AND (StrToInt(Value)>2000)

THEN AColor:=clRed; end; end; В результате получим Пример 3. При нажатии правой кнопки на ячейку правой кнопки мыши, содержимое должно помещаться в компонент TEdit. Разместим на форме компонент TEdit. Для решения поставленной задачи используем следующий метод: Компонент TDecisionGraph Компонент TDecisionGraph создает график на основе многомерного представления набора данных. Конкретный вид графика (назначение горизонтальной и вертикальной осей) зависит от настроек

компонентов TDecisionCube и TDecisionPivot. По умолчанию к оси абсцисс привязывается первая вертикальная размерность, к оси ординат — первая сумма. Первая горизонтальная размерность отображается в легенде графика. Одним из предков компонента TDecisionGraph является класс TChart, от которого унаследованы все многочисленные свойства и методы для настройки графика. Для подключения к графику набора данных используется свойство property

DecisionSource: TDecisionSource; которое ссылается на экземпляр компонента источника данных. Сразу после подключения автоматически строится график с осями, заданными по умолчанию. Разместим на форме компоненты TDecisionQuery, TDecisionCube,TDecisionSource и TDecisionGraph. Соединим их. Получим следующие диаграммы: Для управления графиком во время выполнения можно использовать компонент

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

Элементы списка соответствуют вычисляемым полям с использованием агрегатных функций из запроса соответствующего компонента TDecisionQuery. Выбор поля приводит к изменению значений в ячейках кросстаба. Например, выбор поля с функцией зим изменит значения в ячейках на суммы полей, поле с функцией COUNT произведет подсчет количества элементов в полях. Средняя часть панели предназначена для размещения кнопок, соответствующих горизонтальным размерностям.

Правая часть панели используется для кнопок, соответствующих вертикальным размерностям. Кнопка в нажатом состоянии показывает размерность. Одновременно отображается и общая сумма по размерности. Размерности можно менять местами и перемещать с вертикали на горизонталь и обратно. Для этого можно выбрать команду Moved to Column Area из всплывающего меню кнопки.

Во время выполнения можно использовать обычное перетаскивание кнопок при помощи мыши. Всплывающее меню кнопки размерности имеет еще одну команду — Drilled In. По этой команде размерность переходит в режим детального просмотра по каждому значению поля. Конкретное значение можно выбрать из списка, который открывается при щелчке на кнопке. В этом случае суммы в ячейках кросстаба рассчитываются не по всей размерности, а только по выбранному

значению. Из рисзшка видно, что кнопки в компоненте TDedsionPivot размещены в трех областях. В левой области размещена кнопка сумма. Это кнопка предназначена для выбора агрегатных функций. По умолчанию в качестве текущей агрегатной функции берется первая из функций, определенных в операторе SELECT (компонент TDedsionQuery). Чтобы сменить агрегатную функцию, нужно нажать кнопку и из появившегося

списка выбрать нужную функцию. Средняя область компонента TDedsionPivot содержит кнопки измерений, данные по которым показываются построчно. В нашем случае это кнопки, соответствующие измерениям «Тип товара», «Покупатель», «Товар», «Месяц». Правая часть компонента содержит кнопки измерений, данные по которым показываются в виде столбцов. В нашем случае это кнопка, соответствующая измерению «Город».

Чтобы перевести кнопку из одной области в другую, следует щелкнуть по ней правой кнопкой мыши и во вспомогательном меню выбрать опцию Move to Row Area (при переводе измерения в построчный показ) или Move to Column Area (при переводе измерения в показ по столбцу). Обычно по измерению показываются все его данные. Например, по измерению « Покупатель» показываются все покупатели. Однако часто бывает необходимо показывать данные не по всем,

а по конкретному покупателю. Для этого следует переместить указатель мыши на кнопку соответствующего измерения, нажать правую кнопку мыши и отметить опцию Drilled in во вспомогательном меню. Кнопка «Покупатель» изменит свой заголовок на «Покупатель. All Values». Теперь, чтобы зафиксировать конкретного покупателя, следует нажать правую кнопку мыши и в появившемся списке выбрать название конкретного покупателя.

При этом его имя будет показываться в кнопке, соответствующей измерению «Покупатель», а данные в кубе будут сечением по координате измерения, соответствующей конкретному покупателю Например данные по покупателю Сидорову. Свойства Объявление Описание property ButtonAutoSize:' Boolean; Разрешает/запрещает автоматически согласовывать размеры кнопок, соответствующих измерениям куба в компоненте

TDecisionPivot, с размерами самого компонента. property ButtonHeight: Integer; Определяет высоту (в пикселях) кнопок для случая, когда свойство ButtonAutoSize = False. property ButtonSpacing: Integer; Определяет расстояние (в пикселях) между кнопками. property ButtonWidth: Integer; Определяет ширину (в пикселях) кнопок для случая, когда свойство

ButtonAutoSize = Fake. property DecisionSource: TDecisionSource; Определяет компонент TDecisionSource, через который осуществляется управление многомерным представлением данных type TDecisionButtonPosition = (xtHorizontal, xtVertical, XtLeftTop) ; property GroupLayout: TDecisionButtonPosition; Задает способ расположения кнопок на панели: xtHorizontal — в ряд слева направо; xtVertical — в колонку

сверху вниз; xtLeftTop — кнопки вертикальных размерностей вдоль верхнего края, кнопки горизонтальных размерностей вдоль левого края, кнопка сумм в левом верхнем углу type TDecisionPivotOption = (xtRows, xtColumns, xtSuiranaries); TDecisionPivotOptions = set of TDecisionPivotOption; property Groups : TDecisionPivotOptions; Определяет, какие кнопки входят в

TDecision-Pivot: xtRows - кнопки измерений куба, которые выводятся как строки; xtColumns — кнопки измерений куба, которые выводятся как столбцы; xtSummaries - кнопки, соответствующие суммам. property GroupSpacing: Integer; Определяет размер в пикселах промежутка между группами кнопок procedure SetBounds (Left, Top, Height, Width: Integer); override; Переустанавливает размеры компонента в соответствии с параметрами метода

Список использованных источников. 1. Шумаков П.В. Delphi 3 и разработка приложений баз данных М.: «НОЛИДЖ», 1998 704с 2. Фаронов В.В Шумаков П.В. Delphi 5. Руководство разработчика баз данных М.: «НОЛИДЖ», 2000 640с 3. Фаронов В.В. Система программирования Delphi – Спб.: БХВ-Петербург, 2005. – 912с 4. docs.luksian.com/programming/delphi/delp hi7



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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.