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

YouTube

 

Видеоурок по созданию зависимых переменных в Web дизайнере.

 

 

 

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

 

Информация

 

Параметр Зависимое значение (Dependent Value) будет отображаться только в том случае, если параметр переменной Источник данных (Data Source) установлен в значение Колонки данных (Data Columns).

 

 

 

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

 

 

 

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

 

 

 

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

 

 

 

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

 

 

 

Пример 1 - создание и использование переменных в отчете.

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

 

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

 

Информация

 

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

 

 

 

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

 

 

 

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

 

Шаг 5: Вернуться в шаблон отчета и добавим третью переменную в словарь данных. Переменная будет с именем All, вида Значение с типом данных bool.

 

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

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

 

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

 

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

 

 

 

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

 

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

 

 

 

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

 

 

Создание иерархии зависимых переменных

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

 

Шаг 10: Необходимо создать переменную Order, вида Значение с типом данных integer. Установить флажок Запросить у пользователя, выбирать источник данных как Колонки данных с ключами OrderDetails.OrderID, со значениями - OrderDetails.UnitPrice.

 

Шаг 11: Установить взаимосвязь с продуктами, для этого в качестве главной переменной следует выбрать переменную Product, зависимой колонкой будет OrderDetails.ProductID.

 

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

 

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

 

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

 

 

 

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

 

 

 

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