Примеры альтернативных состояний в выражениях диаграммы

Эти примеры предназначены для того, чтобы продемонстрировать рекомендации по использованию альтернативных состояний разработчиками QlikView и/или опытными пользователями QlikView. Эти примеры доступны в файле: ‘Alternate States Functionality.qvw’

Синхронизация выборок между состояниями

Следующие выражения можно использовать в одной диаграмме:

count({$} DISTINCT [номер накладной])

count({State1} DISTINCT [номер накладной])

count({State2} DISTINCT [номер накладной])

Существует проблема этого метода; разработчику QlikView необходимо дублировать выборки (списки и мультисписки) для всех трех состояний, чтобы конечный пользователь мог создавать соответствующие выборки для различных состояний. Во многих случаях разработчику QlikView потребуется иметь набор «общих» выборок, доступных для всех состояний. Это позволит конечному пользователю определять содержание для различных диаграмм, а затем использовать определенные выборки, чтобы продемонстрировать различия состояний. Анализ Множеств может использоваться с состояниями для сохранения определенных выборок между различными состояниями.

count({State1<Year = $::Year, Month = $::Month>} DISTINCT [номер счета-фактуры])

count({State2<Year = $::Year, Month = $::Month>} DISTINCT [номер счета-фактуры])

Разработчик QlikView сохранит выборки Year и Month в состояниях State1 и State2, синхронизированными с выборками Year и Month в состоянии по умолчанию. Разработчик QlikView может добавить необходимые элементы к модификаторам набора для синхронизации еще большего числа полей между состояниями.

Операторы установки

С состояниями можно использовать операторы установки (+, *, -, /). Следующие выражения являются действительными и будут рассчитывать уникальные номера накладных в состоянии по умолчанию или состоянии State1.

Примеры:  

count({$ + State1} DISTINCT [номер счета-фактуры])
будут подсчитаны уникальные номера накладных в объединении состояний <default> и State1.

count({1 - State1} DISTINCT [номер счета-фактуры])
будут подсчитаны уникальные номера накладных не в состоянии State1.

count({State1 * State2} DISTINCT [номер счета-фактуры])
будут подсчитаны уникальные номера накладных в обоих состояниях <default> и State1.

Примечание: При использовании операторов установки подобным образом следует проявлять осторожность. В некоторых случаях это может привести к непредвиденным результатам. Это обусловлено тем, что выборки в определенном состоянии создают набор данных, который может не быть полностью совместимым с набором(-ами), с которым он объединяется. Это особенно верно с повышением сложности модели данных.

Явные определения значения поля

Другой способ использования операторов установки — это функции элементов P() и E(). Эти функции доступны только в выражениях набора.

Примеры:  

count({$<[номер накладной] = p({State1} [номер накладной])>} DISTINCT [номер накладной])
Это выражение подсчитывает уникальные номера накладных в состоянии <default> на основе возможных номеров накладных, доступных в состоянии State1.

Это почти, но не полностью эквивалентно следующему выражению:

count({$<[номер накладной] = State::[номер накладной]>} DISTINCT [номер накладной])

Различие между выражениями заключается в том, что в первом выражении возможные номера накладных из состояния State1 передаются в состояние по умолчанию. Во втором выражении выбранные значения из состояния State1 передаются в состояние по умолчанию. Если пользователь не создал выборки номеров накладных в состоянии State1, в состояние по умолчанию не будут переданы номера накладных

Операторы установки лучше всего использовать с модификаторами набора. Следующее выражение выполняет поиск пересечения возможных номеров накладных из состояний State1 и State2 и передает эти значения в номера накладных в состоянии по умолчанию.

Примеры:  

count({$<[номер накладной] = p({State1} [номер накладной]) * p({State2} [номер накладной])>} DISTINCT [номер накладной])
Выражение для поиска пересечения номеров накладных в состояниях <default> и State1:

Счетч.({$<[номер накладной] = p({$} [номер накладной]) * p({State1} [номер накладной])>} DISTINCT [номер накладной])

Это выражение может казаться запутанным, поскольку использует состояние (<default> в данном примере) в функции элемента и идентификаторе набора. Необходимо помнить, что функция элемента p($) возвращает возможные значения в состоянии по умолчанию. Идентификатор набора/состояния {$} изменяется результатов функций элемента. Все выборки накладных, существующие в состоянии по умолчанию, переопределяются значениями из пересечения функций элементов.

Следует отметить, что приведенное выше выражение не является полностью совместимым, поскольку его нельзя синхронизировать с общими выборками между состоянием по умолчанию и состоянием State1. Ниже приведено выражение, выполняющее это:

Примеры:  

count({$<[номер накладной] = p({$} [номер накладной]) * p({State1<Year = $::Year, Month = $::Month>} [номер накладной])>} DISTINCT [номер накладной])

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