Работа с деревом расчета
Правила выращивания дерева расчета
Дерево расчета разделено секциями, каждая из которых может содержать определенный набор элементов, причем пользователь может добавлять новые элементы или изменять существующие при помощи предоставляемых деревом средств. На рисунке ниже показан пример общего вида дерева, а также некоторые из упомянутых средств. Далее в этом параграфе они описываются более подробно.
Секции дерева
Каждая секция дерева полностью описывает свойства какого-то отдельного шага в проведении расчета (см. "цикл проведения расчета"). При этом, ввиду различного смыслового значения каждого шага, каждая секция может содержать элементы только определенных, присущих ей типов.
Смысл элементов для каждой секции, вообще говоря, различен. Так, для секций пользователей и активностей смысл элементов заключается в том, что они накладывают условия на выбор данных, для секции столбцов - в том, что они указывают какие из свойств из этих данных выводить в таблицу, а для секции формул - какие вычисления проводить над полученными данными.
Рис. 52: Основные элементы дерева расчета: 1 - секция дерева, 2 - элемент дерева, 3 - меню добавления элементов, 4 - редактор настройки элемента, 5 - меню редактирования элемента.
Тем не менее, основные принципы работы с элементами секций похожи, хотя и могут иметь незначительные отличия, которым, легко научиться при практической работе.
Так, например, все секции можно сворачивать или разворачивать при помощи щелчка по круглой кнопке в правой части названия секции. Это может быть полезным для того, чтобы скрыть детали, которые не представляют интереса при решении текущих задач.
Элементы секций
Каждый из элементов дерева вносит свой вклад в определение свойств той секции, к которой он принадлежит. Текст элемента секции кратко описывает смысл элемента и при этом может занимать несколько строк.
Слева от каждого элемента находится выключатель. Если щелкнуть по нему мышкой, в нем установится или снимется крестик. В последнем случае, данный элемент не будет учитываться в расчете. Для секций выбора данных, это означает, что соответствующее условие не будет накладываться, а для остальных секций, переключатель контролирует видимость соответствующего столбца, формулы, группы или раздела документа.
Треугольная стрелка справа от названия элемента служит для вызова ниспадающего меню (4), посредством которого осуществляется редактирование (см. ниже).
Основное свойство элемента заключается в его унитарности. Т.е. один элемент накладывает одно, причем простое условие на значение или диапазон значений. В случае, если нужно наложить более сложное условие, это осуществляется при помощи нескольких элементов, объединяемых в группы (5), что описано в статье "группы элементов".
Добавление элементов
После создания нового пустого расчета, основные секции дерева еще не содержат элементов. Тем не менее, в конце каждой секции выводится ссылка для их добавления. При щелчке по ссылке, появляется выпадающее меню, отмеченное на рисунке цифрой "3". Чтобы добавить новый элемент, нужно выбрать его тип, а затем произвести настройки в соответствующем диалоговом окне.
Эти действия хорошо иллюстрируются рисунком из пункта "выбор испытуемых" в параграфе "цикл проведения расчета". Принципы работы с различными типами элементов и вариантами диалоговых окон рассматривается в последующих параграфах этой главы.
Добавление условия посредством ссылки в конце каждой группы всегда добавляет новое условие последним в группу самого верхнего уровня. Варианты добавления условий в группы с другими условиями описываются следующих пунктах.
Изменение свойств элементов
Редактирование свойств элемента осуществляется в диалоговом окне, с рядом которых мы уже познакомились в параграфе "Цикл проведения расчета". Все диалоговые окна редакторов имеют ряд общих черт в расположении элементов и поведении.
Например, чтобы открыть редактор простого (не группового) элемента дерева, достаточно просто щелкнуть мышкой по названию этого элемента. Открывшееся диалоговое окно, как правило, имеет следующие части:
1. Справочная информация - полоса в левой части окна, в верхней части которой выводится иконка в соответствии с типом данного элемента, а под ней - подсказку о возможностях окна данного редактора и, возможно, принципах работы с ним.
2. Динамическая надпись, которая передает текущее состояние настроек редактора простым человеческим языком. Например, на рисунке, надпись выводит "поле "группа" содержит текст "9Б"". Если мы выделим теперь пункт "совпадает вся строка", то надпись покажет "поле "группа" совпадает с текстом "9Б"".
В случае, если какие-либо настройки диалога введены неправильно, надпись (ненавязчиво и без вывода диалоговых окон) сообщит об ошибке. Например, если мы в нашем случае полностью удалим текст из значения поиска, то надпись изменится на "Ошибка: не введена строка поиска".
Мы также надеемся, что в диалоговых окнах с большей свободой в настройках, динамические надписи помогут быстрее обучиться работе с программой.
Рис. 53: Общие части диалогового окна редактирования элементов дерева расчета.
3. Стандартная пара кнопок "Ок" и "Отмена" в правом нижнем углу используется для того, чтобы сохранить изменения, внесенные в элемент дерева профилей или для того, чтобы закрыть окно без обновления свойств элемента.
4. Остальные элементы управления диалогового окна располагаются в главной части окна и предоставляют средства редактирования, зависящие от конкретного типа изменяемого элемента дерева расчета.
Удаление и перемещение элементов
Щелчок по треугольной стрелке справа от названия элемента позволяет открыть выпадающее меню редактора элемента. Аналогичного вида меню также появляется, если щелкнуть в области элемента правой кнопкой мышки.
- Опция "удалить"- после получения подтверждения от пользователя, данный элемент исключается из дерева. При удалении группы, удаляются также все вложенные в эту группу условия. Если от элемента данной секции зависят элементы в других секциях (например формулы или группы), то программа также запросит дополнительное подтверждение об удалении этих зависимостей.
- Перемещение элементовосуществляется выбором команд "вверх" или "вниз" в контекстном меню. Соответственно, если это возможно, элемент перемещается на одну позицию в выбранном направлении. При перемещении обновляются все элементы управления программы, зависящие от положения элементов в дереве.
Группы элементов
На рисунке показано последовательно добавление двух условий в секцию пользователей.
Рис. 54: Последовательное добавление элементов в дерево расчета.
Рисунок состоит из нескольких частей:
В секции нет еще ни одного условия.
В секцию добавлено одно условие.
В секцию добавлено еще одно условие.
Переход между первым и вторым состояниями выглядит достаточно логично - с добавлением одного условия, добавился один элемент секции. Однако после того, как мы добавили второе условие, произошло в самом верху секции добавился дополнительный элемент. Зачем он нужен?
Дело в том, что при наличии нескольких условий, дерево должно знать как эти условия соотносятся друг с другом. Требуется ли выполнения двух этих условий одновременно или достаточно выполнения только одного из них? Автоматически добавленный элемент является групповым элементом, который как раз и позволяет группировать условия и определять их общие логическое значение.
Логический оператор отношения условий выводится жирным шрифтом в названии группового элемента. Так, если заголовок группы гласит "где КАЖДОЕ из условий выполняется", это означает, что для того, чтобы условие всей группы целиком выполнялось, должны выполняться условия всех входящих в нее элементов одновременно. Т.е. в примере с картинки, запрос выдаст данные только для тех испытуемых, в логине которых содержится подстрока "user1", причем все они должны быть зарегистрированы 11.08.2005.
Рис. 55: Установка логического оператора группы.
Если же заголовок гласит "где ХОТЯ БЫ ОДНО из этих условий верно", то запрос выдаст данные для всех тех испытуемых, в логине которых содержится подстрока "user1" вне зависимости от того были они зарегистрированы 11.08.2005 или нет. Более того, запрос выдаст еще и всех испытуемых, зарегистрированных 11.08.2005 вне зависимости от того содержится ли подстрока "user1" в их логине.
Для того, чтобы изменить значение логического оператора, щелкните на нем мышкой и из выпадающего списка выберите нужное значение.
Заметим, что для некоторых из секций группировка условий не имеет смысла. Например задачей секции столбцов является просто поддержка списка всех столбцов данных в расчете, поэтому добавление нового столбца и осуществление каких либо других операций с ними не приводит к образованию групп.
Вложенные группы
Иногда бывает необходимо скорректировать какое-либо из существующих условий. В частности в примере добавления элемента мы создали условие о том, чтобы найти данные для всех пользователей, которые были зарегистрированы в системе 11.08.2005. Теперь представим, что мы хотели бы расширить диапазон интересующих нас дат регистрации также и другими значениями. Скажем нас еще интересуют пользователи, зарегистрированные с 03.08.2005 до 05.08.2005. При этом как и прежде нас будут интересовать только те из испытуемых, логин которых содержит текст user1.
Первым предположением может быть добавление еще одного нового условия в главную группу. Щелкнем на кнопке добавления нового условия, которая, как мы знаем, всегда добавляет новое условие последним в группу самого верхнего уровня. Однако мы обнаружим, что это не приводит к нужному результату.
Рис. 56: Возможные варианты добавления условия, так, чтобы получить и тех из них, которые зарегистрированы с 03.08.2005 до 05.08.2005 и тех, которые зарегистрированы 11.08.2005.
Действительно, на варианте 1, показанном на рисунке, мы видим, что мы фактически производим запрос данных для пользователей, которые зарегистрированы 11.08.2005 и в то же время зарегистрированы с 03.08.2005 до 05.08.2005. Поскольку система хранит только одну дату регистрации и никто не может быть зарегистрирован одновременно в два разных периода времени, то данный запрос не выдаст вообще никаких данных. Возьмем этот случай на заметку и будем внимательны чтобы не составлять заведомо пустые запросы.
Даже если мы изменим логический оператор для поиска и будем искать в соответствии с утверждением "где ХОТЯ БЫ ОДНО из условий выполняется", мы все равно получим не то, что хотели. В данном случае мы действительно найдем всех пользователей, зарегистрированных 11.08.2005 или в интервале с 03.08.2005 до 05.08.2005. Однако в этом случае никак не учитывается условие по логину - система выдает и тех испытуемых, которые содержат подстроку user1 в логине и тех, что не содержат эту подстроку. Более того, система также находит всех пользователей логин которых содержит подстроку user1, но которые не зарегистрированы в какую-либо из интересующих нас дат.
Поэтому единственным верным решением был бы вариант 3, на котором диапазон дат добавлен в свою собственную группу, вложенную в главную группу. Причем элементы главной группы как и прежде объединяется условием "где КАЖДОЕ из условий выполняется", а вложенная группа - условием "где ХОТЯ БЫ ОДНО из условий выполняется". В результате запроса мы получаем данные по интересующей нас категории пользователей.
Добавить элемент к текущему
Рис. 57: Добавление нового условия к произвольному существующему условию с объединением их обоих в группу.
Рассмотрим варианты того, как формировать разного вида группы путем добавления новых элементов. Мы уже знаем что кнопка добавления нового условия внизу каждой группы позволяет добавить условие последним в самую верхнюю группу. Другой способ добавления условий, который будет работать с любой группой, а не только самой верхней, заключается в использовании кнопки, которая находится в правой части каждого из них. При щелчке на ней выпадает контекстное меню из которого можно выбрать добавление и тип желаемого условия.
На рисунке ниже показано добавление элемента к текущему условию, не являющемуся группой, причем заметим, что в результате этой операции вновь созданный элемент и элемент, на котором был осуществлен щелчок были отъединены автоматически созданной группой. Далее Вы можете выбрать нужный логический оператор группы и добавить в нее новые элементы.
Добавить элемент в группу
Для того чтобы добавить элемент вложенным в существующую группу, мы, также как и для элемента, используем кнопку редактирования условия, находящуюся в правой части заголовка группы. Как показано на рисунке, в данном меню содержится два различных выбора добавления элементов.
Рис. 58: Добавление нового условия к группе, которая уже содержит элементы.
Это "добавление вложенного условия" и "добавление следующего условия". Следуя логике, добавим условие, используя первый из этих вариантов. Как видно из рисунка, новое условие действительно было добавлено вложенным в группу, которую мы использовали.
Объединить элемент с группой
Иногда возникает необходимость добавить условие на одном уровне с какой-либо существующей группой. При выполнении этого действия, группа и вновь добавляемое условие объединяется группой более высокого уровня и они связываются ее логическим оператором.
Рис. 59: Добавление нового элемента на одном уровне с существующей группой. Показано объединение главной группы с вновь создаваемым условием. При этом для них создается новая группа, которая становится новой главной группой.