Russian Belarusian English German Japanese Ukrainian

Decision Cube - многомерный анализ данных

CuBook55

Для анализа многофакторной информации, получаемой из базы данных, в C++Builder имеются специальные компоненты, размещенные на странице библиотеки Decision Cube. При анализе данные представляются в виде так называемого многомерного куба (метакуба) или куба решений. Каждое измерение этого куба соответствует одному полю. Например, данные по сотрудникам организации, содержащиеся в таблице Pers, могут анализироваться по подразделениям, по признаку пола, по году рождения, по тому, работают ли они в управлении или в производственном отделе. Таким образом возникает четырехмерный куб. При анализе может возникнуть желание узнать, сколько человек работают в управлении и в производстве, сколько всего в организации мужчин и женщин, как распределяются мужчины и женщины в управлении и на производстве, распределение сотрудников по годам рождения и т.п.
 
Таких вопросов может быть великое множество и в приложении невозможно предусмотреть какие-то меню, кнопки и иные управляющие элементы, которые бы охватывали все, что может захотеться знать пользователю, принимающему решения на основе сведений, почерпнутых из базы данных. Желательно иметь инструмент, с помощью которого пользователь мог бы сам наглядно формулировать любые запросы, получая на них ответы в удобной табличной или графической форме. Именно таким инструментом и является система Decision Cube.
 
Эта система включает следующие компоненты:
Значение Описание
DecisionCube Реализует многомерный куб данных.
DecisionGraph Отображает графики, соответствующие выбору, сделанному пользователем в многомерном кубе.
DecisionGrid Отображает в табличном виде данные, соответствующие выбору, сделанному пользователем в многомерном кубе.
DecisionPivot Дает возможность пользователю закрывать и открывать отдельные измерения куба.
DecisionQuery Определяет набор данных, используемый для построения куба. Аналог компонентаQuery,приспособленный для задач Decision Cube.
DecisionSource Источник данных, аналогичныйDataSource,но приспособленный для задач Decision Cube.
 
Построим приложение, работающее с неоднократно использовавшимися в предыдущих главах таблицами Pers баз данных ib или dbP. При работе сib никаких проблем не возникнет. А при работе с таблицей базы Pers данных dbP возникнут определенные сложности с формой отображения логического поля Sex.
 
Начнем с простого приложения, работающего с таблицей Pers. Начните новое приложение и перенесите на форму компоненты DecisionQuery, DecisionCube, DecisionSource и DecisionGrid. Компоненты DecisionQuery, DecisionCube и DecisionSource не визуальные. Так что разместить их можно в любом месте формы. А компонент отображения данных DecisionGrid визуальный. Задайте в его свойстве Align значение alClient, чтобы он заполнил всю поверхность формы.
 
Свяжите размещенные компоненты друг с другом цепочкой ссылок, похожей на ту, которая связывает обычные компоненты, работающие с базами данных. В компонент отображения данных DecisionGrid1 надо в его свойстве DecisionSource ввести ссылку на компонент источника данных DecisionSource1. В источник данных DecisionSource1 надо в его свойстве DecisionCube ввести ссылку на метакуб DecisionCube1. А в метакубе DecisionCube1 надо в свойстве DataSet сослаться на набор данных DecisionQuery1. Таким образом создается цепочка: набор данных(DecisionQuery)==>метакуб(DecisionCube)==>источник данных(DecisionSource1)==>отображение данных(DecisionGrid). От привычной цепочки, используемой при работе с базами данных, эта цепь отличается только одним звеном наличием метакуба между набором и источником данных.
 
Начать проектирование следует с настройки набора данных DecisionQuery1. Сделайте на этом компоненте двойной щелчок. Перед вами откроется окно редактора запроса Decision Cube.
 
В окошке Database вы должны выбрать из выпадающего списка базу данных, с которой собираетесь работать, а в окошке Table таблицу этой базы данных. После этого в списке всех доступных полей (List Of Available Fields) вы увидите список полей таблицы. Отберите из них те, которые вы хотите анализировать. Для отбора надо выделить соответствующее поле в списке List Of Available Fields и нажать кнопку со стрелкой вправо между этим списком и списком Dimensions измерения. Тем самым вы создаете измерение метакуба, соответствующее выбранному полю.
 
Последовательность занесения полей в список Dimensions не безразлична. Дело в том, что первое измерение будет в дальнейшем соответствовать столбцам таблицы, а остальные строкам. Причем доступ пользователя к строкам будет тем проще, чем выше расположено поле в списке Dimensions.
 
В список Summaries следует добавить те суммарные характеристики, которые будут отображаться в ячейках таблицы или нужны для расчета характеристик, отображаемых в ячейках. Пусть мы хотим отображать в таблице число сотрудников по отделам, полу, возрасту, и, кроме того, хотим иметь возможность отображать средний год рождения. При расчете среднего года рождения автоматически будет рассчитываться сумма годов рождения и количество содержащихся в каждом разделе годов рождения, т.е. число сотрудников. Так что нам достаточно обеспечить расчет среднего года рождения Year_b, а число сотрудников рассчитается автоматически. Выделите в списке поле Уеаг_b и нажмите кнопку со стрелкой вправо около окна Summaries. Перед вами возникнет выпадающее меню с тремя разделами: sum - сумма, count - количество и average - среднее. Выберите average. Однако в окно Summaries при этом занесется не AVG{YEAR_B), а SUM(VEAR_B} и COUNT(YEAR_B). Это занеслись промежуточные величины, необходимые для подсчета среднего значения.
 
Ниже представлен запрос SQL, который сформировался в результате всех действий, описанных выше. В нашем случае он будет иметь вид:
SELECT Dep, Sex, Year_b, SUM( Yearjb ), COUNT( Year J) ) FROM "PERSm.DB" GROUP BY Dep, Sex, Year_b
 
В этом запросе после ключевого слова SELECT указаны поля измерений (Dep, Sex, Year_b), затем указаны суммарные характеристики. В конце оператора указана группировка GROUP BY. Тут обязательно должны быть повторены все поля, соответствующие измерениям, и в той же последовательности, в которой они фигурировали в списке SELECT. Вы можете при желании отредактировать этот запрос, нажав предварительно кнопку Edit Query, или просто начав вводить какие-то символы. При этом надпись на кнопке Edit Query изменится на Edit Done. После завершения редактирования нажмите на эту кнопку, и введенные вами изменения зафиксируются, или вам будет выдано сообщение об ошибке, если вы что-то написали неправильно. Кнопка Edit Cancel позволяет прервать редактирование.
 
Первая из суммарных характеристик, указанных в запросе SQL, появится в ячейках таблицы при первом предъявлении ее пользователю. В приведенном выше запросе SQL первой указана сумма годов рождения вспомогательная величина, абсолютно бессмысленная для пользователя. Поэтому желательно отредактировать запрос, переставив величину COUNT(YEAR_B) перед SUM(YEAR_B). Если вы после этого вернетесь на страницу Dimention/Surnmaries, то увидите, что последовательность этих величин в окне Summaries изменилась.
 
Завершив всю работу в окне редактора запроса, нажмите ОК. Вы вернетесь в проектируемое вами приложение, а имя базы данных и запрос SQL автоматически занесутся в свойства Database и SQL компонента DecisionQuery.
 
Компонент DecisionQuery настроен. Теперь можно его активизировать. Измените значение его свойства Active на true. При этом прямо в процессе проектирования в компоненте DecisionGrid1 отобразятся данные.
 
Прежде всего хотелось бы иметь в заголовках русские надписи. Сделайте двойной щелчок на компоненте DecisionCube1, или нажмите кнопку с многоточием в окне Инспектора Объектов около свойства DimensionMap этого компонента, или щелкните на компоненте правой кнопкой мыши и выберите в контекстном меню раздел Decision Cube Editor.
 
На странице Decision Settings этого окна вы можете, выбирая каждое поле в списке Available Fields, задать для него в окошке Display Name имя, которое будет фигурировать в заголовках компонентов отображения данных. Окошко Туре указывает тип выделенного в списке Available Fields элемента: является ли он измерением куба или суммарной характеристикой. Значение в этом окошке изменять невозможно. Выпадающий список Active Туре определяет, когда загружается соответствующая информация: As Needed - когда требуется ее отображать, Active - всегда, Inactive - никогда. В большинстве случаев следует выбирать значение As Needed.
 
Окошко Format позволяет задать строку форматирования отображения. Выпадающий список Grouping дает возможность выбрать отображение всех значений (None), или только лежащих в определенных границах: Year - год, Quarter - квартал, Month - месяц, Single Value - одномерное отображение. Все это относится к данным, распределенным во времени, и в нашем примере использоваться не может.
 
Страница Memory Control окна редактора куба решений особого интереса не представляет. Если вы откроете ее, то имеет смысл обратить внимание только на опцию Designer Data Options, которая указывает, что именно должно отображаться в процессе проектирования. На отображение данных в процессе выполнения приложения эта опция не влияет.
 
Редактор куба решений позволяет вам задать описанным выше способом настройку (в частности, Display Name отображаемые русские названия) сразу для всех компонентов отображения данных, если их несколько в вашем приложении. Но каждый компонент отображения данных позволяет произвести дополнительную индивидуальную настройку отображения. Обратите внимание в компоненте DecisionGrid на свойство Dimensions. Нажав кнопку с многоточием около него вы попадете в редактор списка измерений. В нем вы можете для каждого измерения задать отображаемое имя (DisplayName), формат и в свойстве Subtotal указать, надо ли для данного измерения отображать промежуточные суммарные данные: например, число сотрудников по каждому отделу, по полу, по каждому году рождения.
 
Последнее, видимо, не надо, так что для поля года рождения следует задать Subtotal = false. А для среднего года рождения полезно задать формат "###0.#". Он означает, что отображение будет проводиться до первого знака после запятой и что, если какой-то категории сотрудников нет и, следовательно, их средний год рождения 0, то этот 0 будет отображаться в ячейке таблицы.
Из свойств DecisionGrid обратите также внимание на DefaultColWidth ширина колонки таблицы по умолчанию. Это свойство задает ширину по умолчанию. В процессе выполнения приложения пользователь сможет по своему усмотрению изменять ширину колонок.
 
Свойства LabelColor и LabelSumColor позволяют задавать цвета соответственно основных ячеек таблицы и строк и столбцов сумм. Последние, наверное, неплохо выделить цветом, отличным от основных ячеек.
Обратите внимание еще на одно свойство компонента DecisionGrid - Options. Опции cgGridLines и cgOutliner управляют отображением линий таблицы.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий