Przykłady stanów alternatywnych w wyrażeniach wykresu

Te przykłady mają w zamierzeniu pokazywać najlepsze praktyki dotyczące użycia stanów alternatywnych przez programistów i/lub najbardziej zaawansowanych użytkowników programu QlikView. Przedstawione przykłady można znaleźć w pliku: Alternate States Functionality.qvw

Synchronizowanie selekcji między stanami

Poniższych wyrażeń można użyć w pojedynczym wykresie:

count({$} DISTINCT [Invoice Number]){$}

count({$} DISTINCT [Invoice Number]){State1}

count({$} DISTINCT [Invoice Number]){State2}

Z tą metodą związany jest pewien problem; programista QlikView musi powielić selekcje (listy wartości i obiekty Multi Box) dla wszystkich trzech stanów, aby użytkownicy mogli dokonać właściwych selekcji dotyczących różnych stanów. W wielu sytuacjach programista QlikView będzie chciał mieć zestaw „wspólnych” selekcji dostępnych dla wszystkich stanów. Umożliwi to użytkownikowi końcowemu ustawienie kontekstu dla różnych wykresów, a następnie skorzystanie z określonych selekcji, aby pokazać różnice między stanami. Aby zapewnić spójność określonych selekcji w różnych stanach, można użyć analizy zestawów.

count({$} DISTINCT [Invoice Number]){State1<Year = $::Year, Month = $::Month>}

count({$} DISTINCT [Invoice Number]){State2<Year = $::Year, Month = $::Month>}

Programista QlikView zachowa selekcje wartości miesiąca i roku w stanie State1 i State2 zsynchronizowane z selekcjami wartości miesiąca i roku w stanie default. Programista QlikView może w razie potrzeby dodawać elementy do modyfikatorów zestawów, aby zapewnić spójność jeszcze większej liczby pól między stanami.

Operatory zestawów

Można użyć operatorów zestawów (+, *, -, /) ze stanami. Następujące wyrażenia są prawidłowe i będą liczyć odrębne numery faktur będące w stanie default lub stanie State1.

Examples:  

count({$} DISTINCT [Invoice Number]){$ + State1}
liczy odrębne numery faktur zawarte w sumie stanów <default> i State1.

count({$} DISTINCT [Invoice Number]){1 - State1}
liczy odrębne numery faktur ze stanem innym niż State1.

count({$} DISTINCT [Invoice Number]){State1 * State2}
liczy odrębne numery faktur, które są zarówno w stanie <default>, jak i stanie State1.

Uwaga: Używając operatorów zestawów w taki sposób, należy zachować ostrożność. W niektórych przypadkach można otrzymać wynik inny od oczekiwanego. Wynika to z faktu, że selekcje w danym stanie generują zestaw danych, który może nie być całkowicie zgodny z zestawem lub zestawami, z którymi jest łączony. Ten problem staje się bardziej oczywisty w miarę wzrostu złożoności modelu danych.

Niejawne definicje wartości pól

Operatorów zestawów można także używać z funkcjami elementów P() i E(). Funkcje te są dostępne tylko w obrębie wyrażeń zestawów.

Examples:  

count({$<[Invoice Number] = p({State1} [Invoice Number])>} DISTINCT [Invoice Number])
To wyrażenie liczy odrębne numery faktur w stanie <default> na podstawie możliwych numerów faktur dostępnych w stanie State1.

Jest ono bardzo podobne do następującego wyrażenia:

count({$} DISTINCT [Invoice Number]){$<[Invoice Number] = State1::[Invoice Number]>}

Różnica między wyrażeniami polega na tym, że w pierwszym możliwe wartości numeru faktury ze stanu State1 są przekazywane do stanu default. W drugim wyrażeniu wybrane wartości ze stanu State1 są przekazywane do stanu default. Jeśli użytkownik nie wybrał żadnego numeru faktury w stanie State1, żadne wartości numerów faktur nie zostaną przekazane do stanu default.

Operatorów zestawów najlepiej używać w obrębie modyfikatorów zestawów. Poniższe wyrażenie znajduje przecięcie możliwych numerów faktur ze stanu State1 i State2 i przekazuje te wartości do numerów faktur w stanie default.

Examples:  

count({$<[Invoice Number] = p({State1} [Invoice Number]) * p({State2} [Invoice Number])>} DISTINCT [Invoice Number])
Wyrażenie znajdujące przecięcie numerów faktur w stanie <default> i State1 to:

count({$<[Invoice Number] = p({$} [Invoice Number]) * p({State1} [Invoice Number])>} DISTINCT [Invoice Number])

To wyrażenie może wydawać się mylące, ponieważ używa stanu (w tym przykładzie <default>) zarówno w funkcji elementu, jak i w identyfikatorze zestawu. Należy pamiętać, że funkcja elementu p($) zwraca możliwe wartości w stanie default. Identyfikator zestawu/stanu {$} jest modyfikowany przez wynik funkcji elementu. Wszystkie selekcje faktur istniejące obecnie w stanie default są zastępowane wartościami z przecięcia funkcji elementu.

Należy pamiętać, że powyższe wyrażenie w dalszym ciągu nie jest całkowicie poprawne, ponieważ nie udaje mu się zsynchronizować wspólnych selekcji między stanami default a State1. Poniżej znajduje się wyrażenie, które wykonuje tę operację:

Examples:  

count({$<[Invoice Number] = p({$} [Invoice Number]) * p({State1<Year = $::Year, Month = $::Month>} [Invoice Number])>} DISTINCT [Invoice Number])

Jak poprzednio programista QlikView może dodać pola do modyfikatora, aby zapewnić spójność selekcji między różnymi stanami.