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({State1} DISTINCT [Invoice Number])

count({State2} DISTINCT [Invoice Number])

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({State1<Year = $::Year, Month = $::Month>} DISTINCT [Invoice Number])

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

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.

Przykłady:  

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

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

count({State1 * State2} DISTINCT [Invoice Number])
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.

Przykłady:  

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({$<[Invoice Number] = State::[Invoice Number]>} DISTINCT [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.

Przykłady:  

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ę:

Przykłady:  

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.