Зависимые переменные

<< Click to Display Table of Contents >>

Navigation:  Создание отчетов > Источники данных, переменные и функции > Переменные > Локальные переменные > Панель Запросить у пользователя >

Зависимые переменные

 

При создании отчетов с параметрами, можно использовать зависимые переменные. В этом случае, одна переменная будет независимая, а остальные могут подчиняться ей или представлять собой иерархию, т.е. каждая последующая переменная подчиняется предыдущей. Для того чтобы переменная стала зависимой необходимо установить флажок Зависимое значение (расположен на панели Запросить у пользователя, при выборе источника данных Колонки данных). После установки флажка, будут отображаться два поля: Переменная и Зависимая колонка. В первом поле следует выбрать переменную, которая будет главной, т.е. от которой данная переменная будет зависеть. Во втором поле следует указать колонку данных, по которой будет осуществляться связь с главной переменной.

 

Данная возможность, зависимость между переменными, удобна при применении параметров в отчете, к примеру, в Master-Detail отчетах. Допустим, есть список категорий, в каждую категория входит несколько продуктов, а каждый продукт обладает детальной информацией. В этом случае, при использовании параметров в отчете, переменная по продуктам и по детальным данным будет содержать огромный список значений (полностью весь перечень продуктов и весь список детальной информации), и если необходимо произвести выборку продукта или какой-то конкретной дательной информации, придется затратить не мало времени. Если взаимосвязь между переменными будет отсуствувовать, то список значений категорий будет содержать 8 категорий, продуктов -  77 записей, а детальных данных до нескольких сотен. Отыскать необходимый продукт и уж тем более детальные данные в таком случае практически невозможно. На рисунках снизу приведены примеры списков значений без взаимосвязи между переменными:

Возможность зависимых переменных предоставляет возможность сократить списки значений переменных. Иными словами, между переменными можно организовать связь, что приведет к фильтрации списка значений в зависимости от значения главной переменной. Например, в зависимости от выбранной категории, сформируется список значений переменной по продуктам, а в зависимости от выбранного продукта сформируется список детальной информации. К примеру, будет выбрана категория Condiments, тогда список продуктов отфильтруется и будет вида:

 

Теперь выберем продукт Genen Shouyu, и тогда список детальных данных будет вида:

 

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

Создадим переменные Category и Product, типа Значение с инициализацией данных integer. В главной переменной (Category), ключи выберем Categories.CategoryID, а значения Categories.CategoryName.

Примечание: Ключ - это уникальный идентификатор записи (строки) в источнике данных. В данном случае для категорий, колонкой содержащей ключи, будет CategoryID, а для продуктов - ProductID. Именно при помощи ключей организуется зависимость (связь) между источниками данных. Важно понимать, что разные ключи продуктов могут относится к одному и тому же ключу категории.

 

В зависимой переменной ключи укажем Products.ProductID, а значения - Products.ProductName. Установим флажок Зависимое значение, выберем Category как главную переменную, а колонку данных Products.CategoryID, как зависимую колонку. Теперь перейдем на вкладку Предварительного просмотра, как видно на рисунке ниже, отображается два параметра. В первом списке выбирается категория, а второй список (продукты) формируется в зависимости от выбранной категории:

 

 

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

 

strel Добавим третью переменную в словарь данных. Переменная будет с именем All, типа Значение с инициализацией данных bool.

 

strel Теперь используем зависимость переменных в отчете. Допустим есть Master-Detail отчет, где в каждой категории по несколько продуктов. Для того, чтобы при помощи параметров выбирать определенный продукт или продукты определенной категории, добавим на бэнды Данные в шаблоне отчета, фильтры с выражениями:

fly Первый фильтр будет на Master бэнде Данные, т.е. на бэнде при помощи которого формируется список категорий в отчете. Здесь необходимо отфильтровать категории, в зависимости от выбранного параметра отчета, поэтому выражение будет вида (Category == Categories.CategoryID).

fly Далее необходимо добавить второй фильтр на Detail бэнд Данные, т.е. на бэнд при помощи которого формируется список продуктов в отчете. Фильтр будет с выражением (Product == Products.ProductID).

 

strel Осуществляем переход на вкладку предварительного просмотра. В параметрах отчета наобходимо выбрать категорию, затем продукт, применить параметры в фильтрации данных отчета:

 

 

Как видно из рисунка, была выбрана категория Grains/Cereals (обратите внимание, ключ категории = 5) и продукт Gustaf's Knackebrod (ключ продукта = 22). Другими словами, отобразятся все категории с ключом 5 и все продукты с ключом 22.

 

strel Для того чтобы в отчете отобразить полный список продуктов относящихся к выбранной категории, необходимо использовать третью переменную (All). Поэтому следует изменить выражение фильтра на бэнде Данные, при помощи которого формируется список продуктов (Product == Products.ProductID || All). В этом случае, в зависимости от значения третьей переменной (установлен флажок или не установлен), будет осуществляться фильтрация. Если флажок не установлен, то фильтрация будет по ключам продуктов, т.е. в отчете отобразится тот продукт, чей ключ совпадет. Если же флажок будет установлен, то отображаться будут все продукты выбранной категории:

 

 

Как видно из рисунка, отображена одна категория (ключ = 5) и все продукты относящиеся к ней, с разными ключами.

 

Пример, который был рассмотрен выше, представляет собой одноуровневую зависимость. Теперь рассмотрим более сложный пример, из одноуровневой сделаем двухуровневую зависимость. Оставим категории, продукты относящиеся к ним, и добавим детальные данные уже по каждому продукту. Для этого создаем переменную Order, типа Значение с инициализацией данных integer. Далее, установим флажок Запросить у пользователя, выбираем источник данных как колонка данных.

fly Колонкой с ключами OrderDetails.OrderID, со значениями - OrderDetails.UnitPrice.

fly Далее необходимо установить взаимосвязь с продуктами, для этого в качестве главной переменной следует выбрать Product, зависимой колонкой будет OrderDetails.ProductID.

fly Теперь в шаблон отчета, следует добавить бэнд Данные с детальной информацией по продуктам. В данном примере, у бэнда Данные следует выбрать Order Details как источник данных. Master компонентом будет бэнд Данные с продуктами, и также необходимо указать связь между источниками данных.

fly Добавить фильтр с выражением Order == Order_Details.OrderID на бэнд Данные, который содержит детальные данные по продуктам.

fly Осуществляем переход на вкладку предварительного просмотра.

 

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

 

 

Если необходимо, чтобы можно было отображать всю детальную информацию по выбранному продукту, то следует изменить выражение фильтрации на бэнде Данные с детальными данными продуктов. Выражение будет с использованием Variable3 и примет вид Order == Order_Details.OrderID || All. Теперь, можно просто указать категорию, выбрать продукт и получить все детальные данные по нему:

 

 

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