Instrukcja użytkownika: Edycja wykresów
Ogólna idea wykresów
Idea wykresów polega na stworzeniu jednolitego, spójnego mechanizmu pozwalającego m.in. na wygodne definiowanie wykresów (inaczej: analiz) prezentujących graficznie i/albo tabelarycznie wybrane dane z bazy, podłączanie wykresów w przewidzianych (przez programistę) punktach programu i wykonywanie. Jest to więc mechanizm analogiczny jak w przypadku wydruków. Z jedną zasadniczą różnicą. Mianowicie wydruki są z samej swej natury pasywne – wykresy natomiast posiadają bardzo ważną cechę aktywności. Aktywność wykresu polega na możliwości jego interakcji z Użytkownikiem, w tym także na możliwości wykonania wykresu podrzędnego po kliknięciu przez Użytkownika w wybrany punkt. Interakcja następuje po wykonaniu przez Użytkownika odpowiedniej akcji na bieżącym wykresie i może mieć postać:- Eksploracji wykresu
- Przeładowania (odświeżenia) danych na wykresie
- Zmiany parametrów graficznych wykresu
- Wydrukowania wykresu na drukarce graficznej
- Zmiany ustawień graficznych wykresu (np. typu wykresu, jego tytułu, zmiany palety kolorów i inne).
- Resetuj ustawienia wykresu – przywraca domyślne ustawienia graficzne.
- Eksport wykresu – zapis wykresu w formie graficznej w jednym ze standardowych formatów graficznych.
- Eksport – zapis danych w formie tekstowej w jednym ze standardowych formatów tekstowych.
- wykresy standardowe (dostarczane przez Comarch)
- wykresy użytkownika (definiowane).
Uszczegółowienie koncepcji
Hierarchiczna struktura wykresów (nawigacja po grafie wykresów)
Przyciski wykresów na toolbarze, punkty wywołania wykresów
Jak powiedziano na początku, w programie istnieją specjalne punkty (tzw. punkty wywołania wykresów, w skrócie: wywołania), do których można podłączać analizy. Od strony Użytkownika punkty te są zazwyczaj tożsame z punktami podłączania wydruków: tam gdzie na toolbarze pojawiają się przyciski wydruków, zwykle pojawiają się także kontrolki do obsługi wykresów. Są to dwa przyciski: przycisk z ikoną wykresu, którego naciśnięcie powoduje wykonanie domyślnego wykresu startowego oraz przycisk z ikoną strzałki w dół powodujący rozwinięcie popup-menu z wyborem wykresu startowego, który należy wykonać. Wykonanie akcji na jednej z kontrolek wykresu powoduje załadowanie danych i otwarcie okna z wynikami (wykresem w postaci graficznej i/albo tabelarycznej). Okno z wynikami posiada własne przyciski wydruków; pozwala to na definiowanie wydruków analiz. Ponieważ jest jedno wspólne okno wynikowe, na którym pojawiają się wszystkie wykresy – definicje wydruków dla wszystkich wykresów w systemie są wspólne; może tak być bo zawsze będziemy robić wydruk na podstawie kolejki o ustalonej strukturze, w której zgromadzone są dane wykresu.Wykresy startowe, domyślny i bieżący wykres startowy
Do każdego wywołania można podłączyć dowolną ilość wykresów – są to tzw. wykresy startowe danego wywołania. Wykresy te są odpowiednio posortowane (wg lp) a jeden z nich jest domyślnym wykresem startowym danego wywołania. Domyślność wykresu startowego oznacza dla Użytkownika najprostszą możliwość wykonania wykresu – poprzez jeden klik lewym przyciskiem myszy w główny przycisk analiz. Każdy inny wykres startowy w tym punkcie może być wykonany tylko poprzez jego wybór z menu kontekstowego. Określanie domyślnego wykresu startowego danego punktu wywołania przebiega wg następującego algorytmu:- Sprawdzamy czy do wywołania (np. kontekstu) jest podłączony wykres użytkownika z zaznaczoną flagą Domyślny. Jeśli tak – wykres ten jest domyślnym wykresem startowym – kończymy poszukiwanie. Jeśli nie:
- Sprawdzamy czy do kolejnych gałęzi nadrzędnych wywołania (np. procedury, potem roota) jest podłączony wykres użytkownika z zaznaczoną flagą Domyślny. Jeśli tak – wykres ten jest domyślnym wykresem startowym – kończymy poszukiwanie. Jeśli nie:
- Sprawdzamy czy do wywołania (np. kontekstu) jest podłączony wykres standardowy z zaznaczoną flagą Domyślny. Jeśli tak – wykres ten jest domyślnym wykresem startowym – kończymy poszukiwanie. Jeśli nie:
- Sprawdzamy czy do kolejnych gałęzi nadrzędnych wywołania (np. procedury, potem roota) jest podłączony wykres standardowy z zaznaczoną flagą Domyślny. Jeśli tak – wykres ten jest domyślnym wykresem startowym – kończymy poszukiwanie. Jeśli nie:
- Pobieramy pierwszy w kolejności lp wykres startowy użytkownika podłączony do wywołania a w przypadku jego braku do kolejnych gałęzi nadrzędnych wywołania. Jeśli taki wykres znajdziemy – wykres ten jest domyślnym wykresem startowym – kończymy poszukiwanie. Jeśli nie:
- Pobieramy pierwszy w kolejności lp wykres startowy standardowy podłączony do wywołania a w przypadku jego braku do kolejnych gałęzi nadrzędnych wywołania. Jeśli taki wykres znajdziemy – wykres ten jest domyślnym wykresem startowym – kończymy poszukiwanie.
- Wykonaj domyślny wykres startowy (przycisk główny wykresów lub klawisz F12),
- Wybierz wykres startowy z menu kontekstowego i wykonaj go (dodatkowy przycisk wykresów z ikoną strzałki lub klawisz Alt-F12) oraz
- Edycja węzła wykresów¬ (Ctrl + lewy klawisz myszy na przycisku głównym lub klawisz Ctrl-F12).
Zagnieżdżanie wykresów (podwykresy)
Każdy wykres (w szczególności także wykresy startowe dla danego wywołania) może mieć dowolną ilość wykresów podrzędnych (podwykresów) podłączonych do niego w uporządkowany sposób; jeden z tych podwykresów jest traktowany jako domyślny (decyduje ustawienie flagi Domyślny podłączenia a w przypadku jej nie ustawienia dla żadnego podwykresu – kolejność podwykresów wg lp; kolejność tą można zmieniać na drzewie hierarchii wykresów używając mechanizmu bąbelkowania). Z drugiej strony każdy wykres może być podłączony do dowolnej ilości wykresów nadrzędnych w stosunku do niego. Nie ma tu ograniczenia aby wykresy ‘nie zapętlały’ się tzn. aby dla żadnego łańcucha wykresów nie zachodziła sytuacja, że jakiś wykres występuje w tym łańcuchu więcej niż jeden raz. Takie podejście, poza prostotą implementacji ma tą dodatkową zaletę, że pozwala wykonać ten sam wykres jako swój podwykres, ale z innymi parametrami. Nie przewidujemy na razie implementacji warunkowego zagnieżdżania wykresów.Graf wykresów – nawigacja w czasie wykonywania
Ponieważ każdy wykres może posiadać dowolną liczbę wykresów podrzędnych – mamy do czynienia z ukierunkowanym grafem i podczas wykonywania wykresów zachodzi konieczność umożliwienia nawigacji poprzez ten graf. Przede wszystkim w każdym węźle-wykresie (poza ‘liśćmi’ nie zawierającymi już podwykresów) musimy umożliwić tzw. drill-down czyli eksplorację do węzłów (wykresów) podrzędnych – jest to realizowane jako akcja wykonywana przy kliknięciu w punkt wykresu. Jeśli klikamy prawym klawiszem – pojawia się menu kontekstowe zawierające pozycje odpowiadające wykresom podrzędnym. Natomiast lewy klik na punkcie wykresu powoduje wykonanie domyślnego podwykresu. Ponieważ zbiór wykresów podłączonych do wywołania stanowi graf, po którym możemy się poruszać – istnieje potrzeba zapamiętywania przebytych ścieżek i ponownego poruszania się po nich (w ramach jednej ‘sesji’ z danym wywołaniem). Ciąg wykonań wykresów danego punktu wywołania, począwszy od bieżącego wykresu startowego nazywamy historią wykonań wykresów. Zapis wykonania wykresu do historii następuje przy wczytywaniu bieżącego wykresu startowego, a następnie przy wykonywaniu akcji Eksploruj. W odpowiednich zmiennych zapamiętywane są dane pozwalające odtworzyć wyświetlony uprzednio wykres w niezmienionej postaci (z dokładnością do zmian wynikających z odświeżenia wyników); dane te to oczywiście zapytanie i wartości parametrów ostatnio użyte w tych zapytaniach oraz ostatnie wartości parametrów graficznych. Na każdym wykresie (poza bieżącym startowym dla opcji Na początek), na specjalnych przyciskach, są dostępne dodatkowo cztery opcje: Na początek (powrót do bieżącego wykresu startowego), Wstecz (powrót do poprzednio wykonanego wykresu), Wprzód (przejście do następnego ‘historycznie’ wykresu) i Na koniec (przejście do ostatniego ‘historycznie’ wykresu). Opcja Wstecz (także Na początek ) nie pojawia się w przypadku gdy jesteśmy na bieżącym wykresie startowym. Wszystkie parametry wykresu (z zapytania i graficzne), do którego się cofamy są odtwarzane na podstawie odpowiednich zmiennych ale dane wykresu są przeładowywane (jest to robione ze względów technicznych – nie przewidujemy cache-owania danych wynikowych wykresu). Analogiczne uwagi dotyczą opcji Wprzód, którą dodatkowo trzeba odróżniać od Eksploruj także w tym sensie, że nawet jeśli Wprzód powoduje przejście do podrzędnego wykresu (tak jak Eksploruj) to po pierwsze nie koniecznie jest to ten sam wykres podrzędny (jeśli jest ich więcej), a po drugie opcja Eksploruj dotyczy klikniętego w momencie jej wybrania punktu a opcja Wprzód bierze pod uwagę punkt poprzednio kliknięty, tj. kliknięty w trakcie wykonywania opcji Eksploruj, które wprowadziło dany wykres do historii.Uwaga
Zapisujemy do kolejki historii tylko bieżący wykres startowy i eksploracje (każdą). Cofanie ani posuwanie się wprzód nie dopisuje do kolejki rekordów a tylko przesuwa pointer wskazujący bieżącą pozycję. Eksploracja usuwa wszystkie rekordy z kolejki historii będące ‘po’ rekordzie odpowiadającym eksplorowanemu wykresowi, dopisuje rekord docelowego podwykresu i ustawia na nim pointer. Powoduje to ‘zapominanie’ części historii po wykonaniu eksploracji ale jest to standardowe zachowanie (por. MSIE).
Edycja wykresów
Do wygodnego podłączania wykresów startowych do wywołań oraz wykresów do wykresów (zagnieżdżanie) zostało utworzone specjalne wielopoziomowe drzewo (korzeń, procedura, kontekst, wykresy startowe, wykresy podrzędne). Poza podstawowymi operacjami takimi jak dodawanie, podłączanie i odłączanie wykresów, ich edycja (w tym testowanie) i usuwanie dostępne będą także różne funkcje pomocnicze, np. włączanie/wyłączanie flagi domyślności, bąbelkowanie, szukanie wykresu zawierającego w definicji podany ciąg znaków i inne.Źródła danych do wykresów
Każdy wykres może być tworzony w oparciu o jedno z niżej wymienionych źródeł:- Zapytanie SQL i dane w bazie
- Kolejka globalna wypełniona przez aplikację
- Wywołanie procedury
Parametry dynamiczne wykresów
Parametrem dynamicznym wykresu (w skrócie: parametrem) nazywamy zmienną występującą w zapytaniu lub parametrach graficznych (można np. sparametryzować tytuł wykresu), której wartość jest ustalana i wstawiana w miejsce definicji parametru w czasie wykonywania wykresu (tzw. runtime). Ogólna składnia definicji parametru dynamicznego jest następująca: ?@[H]Picture[(_Q|_NQ)]|[Nazwa|]Prompt:Default[@?] (PD) W przypadku, gdy chcemy użyć w parametrze bardziej wyrafinowanych opcji lub zadeklarować wszystkie parametry w jednym miejscu – używamy deklaracji parametru dynamicznego mającej postać: @PAR Definicja Opcje PAR@ (PD-DEKL) gdzie Definicja jest określona przez (PD). Deklaracja różni się od definicji pod jeszcze jednym, istotnym względem. Mianowicie deklaracja przy rozwinięciu jest usuwana z tekstu. Definicja parametru jest natomiast zamieniana jego wartością. Niezależnie od tego czy zadeklarujemy czy też zdefiniujemy parametr dynamiczny – najczęściej występuje potrzeba wielokrotnego odwoływania się jego wartości w innych częściach tekstu – korzystamy wówczas z odwołania do parametru dynamicznego (nazywanego także definicją powtórzonego parametru): ??[(_Q|_NQ)]Nazwa (PD2) Szczegółowy opis parametrów dynamicznych został umieszczony w osobnym dokumencie. Początkowe wartości parametrów (tzn. te, które są użyte przy pierwszym wykonaniu wykresu w danej sesji wywołania) mogą być przekazywane do wykresu z poniższych źródeł i wg poniższej kolejności określającej priorytet źródła:- Z danych pobranych z eksplorowanego punktu wykresu nadrzędnego – nie dotyczy to oczywiście bieżącego wykresu startowego.
- Z kolejki parametrów dynamicznych wykresu nadrzędnego (wiązanie po nazwie) – nie dotyczy to oczywiście bieżącego wykresu startowego
- Parametry dynamiczne zdefiniowane w parametrach graficznych dziedziczą wartości z parametrów dynamicznych zdefiniowanych w zapytaniu bieżącego wykresu.
- Z kolejki zmiennych dynamicznych przekazanych do wykresu z aplikacji (dokładniej: z okna, z którego uruchamiamy analizę) – dotyczy to tylko bieżącego wykresu startowego.
- Z wartości domyślnych określonych w definicji parametru (także włączając opcjonalny odczyt ostatnio użytych wartości z rejestru).
Uwaga
Jeśli w parametrach graficznych definicji wykresu umieścimy parametr /@AutoRefresh to odświeżanie będzie następowało automatycznie (tj. bez wciskania przycisku odświeżenia) przy każdej zmianie któregokolwiek z parametrów dynamicznych (zapytania lub graficznych).
- Jeśli mamy do czynienia z bieżącym wykresem startowym – są przeszukiwane parametry przekazane z aplikacji. Wiązanie odbywa się po Nazwie parametru. Dotyczy to tylko parametrów dynamicznych zdefiniowanych w zapytaniu.
- Jeśli wykonujemy opcję Eksploruj – najpierw sprawdzane jest zapytanie wykresu nadrzędnego (dokładniej kolekcja Fields jego wynikowego recordsetu) w poszukiwaniu kolumn o nazwie zgodnej z Nazwą parametru. Jeśli taka kolumna zostanie znaleziona – jest pobierany kliknięty rekord z kolejki z danymi nadrzędnego wykresu a następnie w miejsce parametru wstawiana jest wartość z odpowiedniej kolumny tego rekordu. Dotyczy to zarówno parametrów zapytania jak i graficznych. Jeśli szukana kolumna nie zostanie znaleziona – jest przeszukiwana kolejka parametrów dynamicznych nadwykresu (czyli eksplorowanego wykresu). Jeśli w kolejce tej zostanie znaleziony parametr o nazwie Nazwa – następuje odziedziczenie wartości. Oczywiście dla parametrów zdefiniowanych w zapytaniu przeszukiwana jest kolejka parametrów dynamicznych ‘nadzapytania’ a dla parametrów zdefiniowanych w parametrach graficznych – kolejka parametrów dynamicznych ‘nadparametrów’ graficznych.
- Jeśli mamy do czynienia z parametrem dynamicznym zdefiniowanym w parametrach graficznych, niezależnie od wyników poprzednich poszukiwań, następuje próba odziedziczenia wartości tego parametru z parametru dynamicznego o takiej samej nazwie, zdefiniowanego w zapytaniu bieżącego wykresu. Mamy tu zatem do czynienia z bezwarunkowym dziedziczeniem wartości graficznych parametrów dynamicznych z wartości zapytaniowych parametrów dynamicznych bieżącego wykresu.
- W obu przypadkach jeśli poszukiwania nie dadzą rezultatu – wartość parametru jest ustalana na podstawie jego Defaultu (wartości odczytanej z definicji parametru)
Zmienne dynamiczne przekazywane z aplikacji do bieżącego wykresu startowego
Zmienne dynamiczne mają za zadanie zainicjalizować wybrane parametry dynamiczne wykresu wartościami przekazanymi z aplikacji. Wartości tych zmiennych są ustalane w czasie wykonywania programu i przesyłane do bieżącego wykresu startowego. Można np. przekazać z procedury-listy zmienną zawierającą aktualnie zastosowany filtr na liście.Uwaga
Zmienne dynamiczne są podstawiane pod parametry dynamiczne tylko dla bieżącego wykresu startowego (nie dotyczą podwykresów – tam występuje dziedziczenie wartości parametrów o zgodnej nazwie).
Wyrażenia
Wyrażenia to ciągi znaków występujące w zapytaniach oraz w parametrach graficznych wykresu takie, których wartości są obliczane przed wykonaniem wykresu. W wyrażeniach mogą występować m.in. odwołania do parametrów dynamicznych a także zmienne i funkcje systemowe. Wyrażeń używa bardzo często do określania wartości początkowych parametrów dynamicznych (np. bieżąca data). Składnia wyrażenia jest następująca: {ciąg_znaków} (W) Szczegółowy opis wyrażeń został umieszczony w osobnym dokumencie.Predefiniowane wstawki tekstowe
Wstawki tekstowe
Potrzeba wprowadzenia wstawek tekstowych wynikła z trudności, jakie występowały przy utrzymywaniu standaryzacji dużej liczby wykresów oraz potrzeby wyodrębnienia części wspólnych wielu analiz (likwidacja redundancji). Co do standaryzacji chodzi o to aby np. powtarzające się na wielu wykresach analogiczne kontrolki (lub grupy kontrolek, np. zakres dat) wyglądały na każdym wykresie tak samo (‘dymek’, opcje graficzne, warunek poprawności, komunikat itp.). Do tej pory zmiana jakiejkolwiek własności takiej kontrolki wiązała się z koniecznością wykonania tej zmiany we wszystkich odpowiednich wykresach. Stosując predefiniowane wstawki tekstowe – robimy zmianę w jednym miejscu. Podobnie ma się rzecz, jeśli chodzi o parametry graficzne, które, poza tytułem, typem wykresu i wyborem serii powinny być w zasadzie identyczne dla wszystkich wykresów. Wyodrębnienie wspólnych części wykresów polega na tym, że jeżeli mamy kilka wykresów o bardzo podobnej konstrukcji (różniących się tylko detalami) to za pomocą predefiniowanych wstawek tekstowych można jak gdyby stworzyć jedną, sparametryzowaną definicję wykresu. Oczywiście, formalnie rzecz biorąc, definicji będzie kilka, tyle tylko, że będą one posiadały jedynie wywołanie odpowiedniej, wspólnej wstawki z różnymi parametrami. Tyle ogólnych impresji. Przejdźmy do konkretów. Pierwszą czynnością, jaką wykonuje moduł wykresów po wczytaniu definicji wykresu z bazy, jeszcze przed podaniem tekstów (zapytanie i grafika) do preparsingu, jest poszukiwanie w tych tekstach deklaracji predefiniowanych wstawek tekstowych (PWT) i ich rozwijanie. Deklaracja PWT w tekście zapytania bądź grafiki ma następującą składnię: @INS Nazwa||[Parametry] [ParametryX] INS@ (PWT0) gdzie Nazwa jest unikalną (w ramach bazy wykresu) nazwą wstawki (NO CASE) a opcjonalne człony Parametry i ParametryX posiadają następującą składnię: Parametr[, Parametr…] (PWTP) ^NazwaParametruX=WartoscParametruX [^NazwaParametruX=WartoscParametruX,…] (PWTPX) gdzie Parametr jest dowolnym ciągiem znaków (NO CASE) , nie zawierającym przecinka (seperator parametrów), znaku ^ (definicja parametru typu X) ani ciągu znaków ‘ INS@’ (spacja, INS@ – terminator PWT). Parametry typu X muszą występować po parametrach zwykłych i nie mogą być z nimi wymieszane. Zostaną one omówione w dalszej części tego rozdziału. Parametry są przekazywane do definicji wstawki i decydują o wstawianiu do niej tekstów warunkowych (patrz następny rozdział) i wstawek podrzędnych (tzw. podwstawek). Definicja wstawki jest traktowana jak normalny tekst – wynika stąd, że wstawki mogą być zagnieżdżone. Deklaracja (pod)wstawki we wstawce ma postać: @INS Nazwa|[Warunek]|[Parametry] INS@ (PPWT) gdzie Nazwa jest unikalną (w ramach bazy wykresu) nazwą wstawki podrzędnej (NO CASE) a opcjonalny człon Warunek posiada następującą składnię: Segment[,Segment…] (PWTW) gdzie Segment jest dowolnym ciągiem znaków (NO CASE), nie zawierającym przecinka (seperator segmentów) ani ciągu znaków ‘ INS@’ (spacja, INS@ – terminator PWT). Ponieważ podwstawka może zostać wywołana z parametrami (deklaracja w tekście nadrzędnym) – sprawdzamy czy parametry te spełniają Warunek wstawienia podwstawki. Jeśli Warunek jest spełniony – następuje zamiana deklaracji podwstawki na jej rozwinięcie, jeśli nie – usunięcie deklaracji podwstawki. Walidacja warunku odbywa się w następujący sposób:- Jeśli Warunek jest pusty – uznaje się, że jest spełniony
- Jeśli Warunek nie jest pusty – uznaje się, że jest spełniony, jeśli dla co najmniej jednego z jego członów (Segment) istnieje odpowiednik (równość NO CASE) wśród przekazanych do podwstawki parametrów zwykłych (nie typu X).
Uwaga
Walidacja dotyczy parametrów przekazanych z nadrzędnego tekstu. Parametry określone w deklaracji podwstawki są jedynie przekazywane do jej rozwinięcia w przypadku, gdy to rozwinięcie jest wstawiane.
Uwaga
Warto zwrócić uwagę na fakt, że przed sekwencją kończącą INS@ musi występować co najmniej jedna spacja, zatem deklaracja:
@INS Ala
INS@
nie jest poprawna gdyż bezpośrednio przed końcowym INS@ występuje ENTER zamiast spacji.
Teksty warunkowe
Omawiając parametry przekazywane w deklaracji wstawki wspomnieliśmy o tzw. tekstach warunkowych. Tekst warunkowy jest dowolnym ciągiem znaków, który może zostać wstawiony do definicji wstawki przy spełnieniu określonych warunków. Tekst warunkowy może występować jedynie w definicji predefiniowanej wstawki tekstowej, a jego składnia jest następująca: @IF(Warunek) Tekst IF@ (TW) gdzie Warunek jest analogiczny jak w definicji (PPWT) a Tekst jest dowolnym ciągiem znaków nie zawierającym sekwencji zakończenia ‘ IF@’ (spacja, IF@). Ponieważ TW może występować jedynie w definicji PWT – są określone parametry przekazane do definicji PWT z jej deklaracji w tekście nadrzędnym. Parametry te pozwalają na walidację warunku Warunek (mechanizm dokładnie taki sam jak w przypadku PPWT). Uzupełniającym elementem składni tekstu warunkowego jest zaprzeczony tekst warunkowy: @IFNOT(Warunek) Tekst IFNOT@ (TWNOT) różni się on od TW tylko tym, że tekst jest wstawiany jeśli warunek jest pusty albo żaden jego człon nie ma odpowiednika wśród przekazanych parametrów.Uwaga
Warto zwrócić uwagę na fakt, że przed sekwencją kończącą IF@ (IFNOT@) musi występować co najmniej jedna spacja, zatem deklaracja:
@IF(FAPA)
xxx
IF@
nie jest poprawna gdyż bezpośrednio przed końcowym IF@ występuje ENTER zamiast spacji.
Rozszerzone parametry tekstowe (parametry typu X)
Opisany wyżej mechanizm nie pozwala na parametryzowanie wstawek tekstowych. Przypuśćmy, że chcemy zdefiniować wstawkę wstawiającą zakres dat. Wstawki tej chcemy użyć zarówno w analizie a1 gdzie wartości domyślne dat mają być odpowiednio Today() i Today()+1 i w analizie a2 z wartościami domyślnymi Date(Month(Today()), 1, Year(Today())) i Today(). Aby wstawka mogła zrealizować oba te zadania – musi obsługiwać parametry rozszerzone. Składnia rozszerzonego parametru tekstowego wstawianego do wstawki jest następująca: @INSP(Nazwa) (INSP) gdzie Nazwa jest nazwą parametru przekazanego z tekstu nadrzędnego (zapytania, grafiki bądź podwstawki). Składnia przekazania w/w parametru tekstowego jest określona przez (PWTPX). We wzorze tym NazwaParametruX odpowiada Nazwie w (INSP) (równość jest typu NO CASE). Wartość parametru może być ustalona ale może też zawierać element @INSP().Parametry graficzne wykresu
Aby nie zmieniać struktury tabeli z wykresami przy dodawaniu w przyszłości obsługi kolejnych parametrów graficznych wprowadzamy jedną, parsowaną kolumnę stringową ParametryGraficzne. Kolumna ta powinna zawierać ustawienia wszystkich potrzebnych parametrów graficznych danego wykresu w postaci: /@SymbolGr[=WartoscGr(BezApostrofów)] (PG) gdzie SymbolGr jest nazwą parametru graficznego a WartoscGr jego wartością początkową. Kolumna ParametryGraficzne jest parsowana przy wczytywaniu definicji wykresu i składana przy zapisie. Opcjonalna wartość WartoscGr jest wartością parametru, z którą wykres jest rysowany pierwszy raz; wartość ta może zostać zmieniona w trakcie oglądania wykresu przez edycję odpowiedniej kontrolki dynamicznej, wykreowanej na podstawie parametru dynamicznego wykresu dotyczącego wartości danego parametru graficznego. Wartość WartoscGr może bowiem zawierać parametry dynamiczne. W wartościach parametrów graficznych obu typów mogą występować wyrażenia. Oto najważniejsze symbole dostępnych parametrów graficznych:SymbolGr | Znaczenie | Wartości | D | PD | D(*) | PD(*) |
---|---|---|---|---|---|---|
HeaderName | Tytuł wykresu | 1 | 1 | |||
XAxisName | Tytuł osi X | 1 | 1 | |||
YAxisName | Tytuł osi Y | 1 | 1 | |||
Type | Typ wykresu | 1 – kolumnowy, 2 – liniowy, 4 – kołowy,... | 1 | 1 | 1 | 1 |
Depth | Głębokość 3D | 0 – wykres 2D, >0 – wykres 3D | 0 | 1 | 100 | 1 |
LineWidth | Grubość linii | 1-10 (dotyczy typu 2) | 2 | 1 | 0 | |
PointWidth | Grubość słupka | 1-10 (dotyczy typu 1) | 0 | 0 | ||
ShowDataLabels | Wyświetla wartości punktów | 0 – nie pokazuje, 1 – pokazuje | 1 | 1 | 1 | 1 |
Series | Definicje serii | Kol,...,Kol gdzie Kol,...,Kol - numery kolumn zapytania (4<=Kol<=24). | 4 | 1 | 4 | 1 |
NoHeadOnCols | Wykaz kolumn, które mają nie mieć headera | Kol,...,Kol gdzie Kol,...,Kol - numery kolumn zapytania (1<= Kol <=24). | 0 | 0 | ||
HideCols | Wykaz kolumn, które mają być ukryte (zerowej szerokości) | Kol,...,Kol gdzie Kol,...,Kol - numery kolumn zapytania (1<=Kol<=24). | 0 | 0 | ||
AutoRefresh | Automatyczne odświeżanie po zmianie któregokolwiek parametru | 0 – nie, 1 – tak | 0 | 1 | 1 | 1 |
SkipFirstExec | Nie wykonywanie akcji (zapytania, procedury) za pierwszym razem, dopiero po odświeżeniu. Dotyczy tylko wykresu startowego . | 0 – wykonuj akcję także przy pierwszym wykonaniu wykresu, 1 – nie wykonuj akcji przy pierwszym wykonaniu wykresu (np. nie chcemy wykonywać zapytania z domyślnymi wartościami parametrów) | 0 | 1 | 1 | 1 |
NoPunktIDCol | Zapytanie nie zawiera kolumny z licznikiem wierszy | 0 – zawiera kolumnę z ID wiersza, 1- nie zawiera kolumny z ID wiersza, tworzona jest techniczna kolumna z ID wiersza niewidoczna dla użytkownika. | 0 | 1 |
Nazwa zmiennej | Opis (wartość) |
---|---|
RECORDS | Zwraca ilość rekordów wyniku zapytania. Przykład użycia: /@ShowXLabelsEvery={@Records/3} |
Uwaga
Nazwy zmiennych graficznych są CASE SENSITIVE.
Wywoływanie funkcji
Akcja wykonywana podczas eksploracji wykresu (lub wykonywania wykresu startowego) nie zawsze musi polegać na narysowaniu wykresu czy pobraniu danych w postaci tabelarycznej – zamiast tego może także być wywołana funkcja (procedura). Najczęstsze zastosowanie polega na wywołaniu procedury okna z odfiltrowaną listą zapisów składających się na wartość klikniętego punktu wykresu – mamy wówczas do czynienia z tzw. drill-through. Składnia wywoływania funkcji jest zgodna z językiem DPL i została opisana w oddzielnym dokumencie.Wykresy bez wykresów – tabele z wynikami
Moduł analiz posiada możliwość pobierania danych bez rysowania wykresu. W takim przypadku wyniki nie są prezentowane graficznie a tylko w postaci tabelarycznej. Oczywiście tabela danych wynikowych, podobnie jak wykres, jest aktywna. Oznacza to, że można eksplorować jej rekordy wykonując analizy podrzędne. Wykres typu ‘tylko tabela’ nie posiada rzecz jasna żadnych parametrów graficznych.Uwaga
Wykres typu ‘tylko tabela’ nie zawiera ograniczeń jakie narzucamy dla zapytań normalnych wykresów – zapytania mogą tu zwracać 1-20 kolumn zupełnie dowolnych typów i o dowolnym znaczeniu.
Przekazywanie do wykresów zaznaczonych pozycji
Wykres może odwoływać się do pozycji zaznaczonych na liście. Oczywiście aby takie odwołanie było możliwe – okno aplikacji musi nie tylko posiadać, ale także eksportować zaznaczenia do modułu wykresów (innymi słowy programista danego okna musiał przewidzieć, że Użytkownik będzie chciał w tym miejscu odwołać się w definicji wykresu do zaznaczeń na liście). Jeśli w/w jest spełniony, zbudowanie wykresu opartego o zaznaczenia może być obsłużony na dwa sposoby Obsługa zaznaczeń: Tabela tymczasowa- We właściwościach ogólnych wykresu:
- W zapytaniu wykresu:
- Zadeklarowaniu ukrytego parametru dynamicznego @PAR ?@Hs50|ZazGUID|ZazGUID:’’ PAR@
- Wykonaniu JOIN-a do tabeli WkrZaznaczenia2 (np. … JOIN WkrZaznaczenia2 ON BNa_BNaID = WkZ2_GIDNumer …).
- Umieszczeniu w filtrze zapytania warunku WkZ2_GUID=??_QZazGUID na odziedziczony ze zmiennej dynamicznej GUID
- We właściwościach ogólnych wykresu:
- W zapytaniu wykresu:
- Zadeklarowaniu ukrytego parametru ‘wirtualnego’ @PAR ?@X|Zaznaczenia|Zaznaczenia:1@? PAR@
- Zastosowanie w zapytaniu składni którą silnik wykresów rozwinie do postaci klauzuli IN, składnia powinna wyglądać w ten sposób: „WHERE {Zaznaczenia(ID rekordu, 1)}” ( przykładowe zapytanie: SELECT Knt_KntID, Knt_Kod, Knt_LimitKredytu FROM cdn.Kontrahenci WHERE {Zaznaczenia(Knt_KntID, 1)} )
Eksport wyników wykresu
Wyniki wykonania analizy (wykres w postaci graficznej oraz tabela z wynikami) mogą być zapisywane do pliku, służą do tego ikony Eksport wykresu/Eksport tabeli dostępne na wstążce. Plik ten (tzw. plik wynikowy) może mieć jeden z następujących formatów:- Z zakładki wykres: bmp, emf, gif, jpeg, png, tiff, wmf, pdf, xls, mht (wykres graficzny)
- Z zakładki dane serii wykresu: xlix, xls, xml, txt, html (dane tabelaryczne)
Interface Użytkownika
Edycja wykresów
Drzewo hierarchii wykresów
Podstawową procedurą edycji wykresów jest drzewo hierarchii wykresów. Procedura ta umożliwia wykonywanie wszystkich operacji edycyjnych dla wykresów standardowych i użytkownika:- oglądanie struktury połączeń wykresów (do wywołań oraz wykresów do siebie nawzajem),
- podłączanie i odłączanie wykresów (w tym edycja warunków podłączenia wykresów startowych),
- określanie domyślności i przestawianie kolejności wykresów (bąbelkowanie)
- dodawanie, edycję, testowanie i usuwanie wykresów (można usuwać tylko wykresy nie posiadające podwykresów),
- szukanie podanego ciągu znaków w nazwie wykresu, kontekstu lub procedury,
- proste filtrowanie drzewa,
- aktualizację bazy,
- oglądanie zmiennych dynamicznych wysyłanych z aplikacji do wykresu w danym momencie.
Drzewo hierarchii wykresów – zakładka Ogólne
Na drzewie hierarchii wykresów analizy standardowe są widoczne w kolorze szarym, a ich nazwa jest pisana kursywą, analizy użytkownika są przedstawione czcionką czarną regularną. Wszystkie akcje dostępne dla podświetlonego obiektu (gałąź na drzewie) są możliwe do wykonania z poziomu menu podręcznego otwieranego przez kliknięcie prawym klawiszem myszy na obiekcie. W menu są również podane skróty klawiszowe do poszczególnych akcji. Dla podstawowych i najczęściej wykonywanych akcji pod listami umieszczono dodatkowo przyciski. Poniżej krótki opis znaczenia poszczególnych przycisków. – dodanie nowego wykresu i podłączenie go do podświetlonej gałęzi. Kliknięcie przycisku z Ctrl lub z Shift powoduje zainicjalizowanie dodawanego wykresu danymi podświetlonego wykresu (wzorca), z tym, że użycie Shift wymusza podłączenie nowego wykresu na tym samym poziomie co wzorzec czyli do ojca wzorca (a nie do wzorca). – edycja wykresu (otwarcie formularza definicji wykresu). – usunięcie wykresu. Usuwany wykres nie może mieć podłączonych podwykresów. – wybór wykresu z listy i podłączenie go do podświetlonej gałęzi. – odłączenie podświetlonego wykresu. – otwiera płaską listę wykresów, opisaną w rozdziale 3.1.3. Na liście tej można m.in. znaleźć wykresy nie podłączone do żadnego wywołania a więc niewidoczne na drzewie hierarchii (i nie możliwe do wykonania z poziomu programu). – otwiera listę wstawek tekstowych, opisaną w rozdziale 3.1.4. – wyszukiwanie podanego ciągu znaków w nazwach procedur, kontekstów i wykresów. – testuj analizę – odfiltrowuje (lub nie) gałęzie procedur i kontekstów nie wypełnione, tj. takie, do których nie są podłączone żadne wykresy. – odfiltrowuje (lub nie) gałęzie procedur innych niż aktualna (tj. ta, z której zostało wywołane drzewo konfiguracji wykresów). Wybrane pozycje menu: Edytuj warunek podłączenia – akcja dostępna tylko dla wykresów startowych. Pozwala ustalić warunek jaki musi być spełniony aby dany wykres był możliwy do wykonania (wyboru) w danym punkcie. Warunek musi mieć postać wyrażenia, w którym mogą występować funkcje systemowe i funkcje a także zmienne zabindowane przez aplikację. Przełącz domyślny – ustawia dany wykres jako domyślny w danym punkcie (z dokładnością do bazy wykresu) lub usuwa takie ustawienie. Kopiuj/Wklej wykres – kopiuje/wkleja definicję wykresu (akcja pomocna w kopiowaniu definicji pomiędzy panelami, głównie przy kopiowaniu wykresów standardowych na drzewo wykresów użytkownika). Poziom procedur/kontekstów – (roz)zwija gałęzie drzewa do wybranego poziomu. Druga zakładka dotyczy przekazanych z aplikacji zmiennych dynamicznych. Na liście mamy nazwy i aktualne wartości zmiennych, które byłyby w tym momencie przekazane do wykresu.Drzewo hierarchii wykresów – zakładka Zmienne dynamiczne
Formularz wykresu
Do edycji wykresu służy formularz definicji wykresu. Składa się on z trzech zakładek, które kolejno omówimy. Zakładka OgólneFormularz definicji wykresu – zakładka Ogólne
Przycisk służy do założenia hasła blokującego zmiany w definicji wykresu dla Użytkowników nie znających hasła. Przy wejściu na formularz tak zabezpieczonego wykresu nie mamy możliwości dokonania jakichkolwiek zmian chyba, że wciśniemy przycisk z kluczykiem i wpiszemy poprawne hasło. W takim przypadku definicja zostanie odblokowana i będzie również możliwa zmiana hasła (w tym jego wyczyszczenie czyli odbezpieczenie definicji). Warto zwrócić uwagę na przycisk , służący do testowania edytowanego wykresu. Dokładniej przycisk ten służy do wykonania testu edytowanego wykresu z zastosowaniem bieżących ustawień na formularzu. Po jego naciśnięciu jest wykonywany w trybie testowym edytowany wykres. Tryb testowy polega na tym, że bezpośrednio przed przesłaniem zapytania na serwer zapytanie to (ze wstawionymi bieżącymi wartościami parametrów dynamicznych) jest podawane do edycji Użytkownika. Po wykonaniu wykresu jest możliwa normalna nawigacja począwszy od węzła odpowiadającego edytowanemu wykresowi. Wykonaniu każdego wykresu w trybie testowym towarzyszy okno pozwalające na edycję zapytania przed przesłaniem go do serwera. Pozostałe kontrolki są albo standardowe albo ich opis w pełni wyjaśnia zastosowanie. Dlatego tutaj ograniczymy się tylko do nadmienienia o jednej istotnej sprawie. Mianowicie w celu ułatwienia posługiwania się językiem stosowanym w definicji wykresu (połączenie SQL i języka parametrów dynamicznych) opracowano system zagnieżdżonych wizardów. Wizardy te pozwalają tworzyć i edytować deklaracje i odwołania do parametrów dynamicznych, wyrażenia, zmienne tekstowe, szablon zapytania SQL itp.. Są one dostępne po kliknięciu prawym klawiszem myszy tekstu zapytania lub parametrów graficznych wykresu.Lista wykresów
Do wyboru wykresu, który chcemy podłączyć jak również do edycji wykresów zaimplementowano listy wykresów (rys. 6 przedstawia listę wykresów standardowych; wykresy użytkownika posiadają analogiczną listę). Lista ta może służyć również do edycji wykresów nie podłączonych do żadnego wywołania.Lista wykresów
Po wykonaniu akcji dodania lub edycji wykresu jest otwierany opisany w poprzednim rozdziale formularz definicji wykresu. Należy zwrócić uwagę na to, że dodanie definicji wykresu z tego poziomu nie spowoduje jego podłączenia na drzewie hierarchii. Wykres taki nie będzie nigdzie podłączony do chwili wykonania na nim akcji ‘Podłącz wykres’ dostępnej na drzewie hierarchii wykresów.Lista wstawek tekstowych do wykresów
Do edycji wstawek tekstowych służą listy wstawek tekstowych do wykresów (rys. 7 przedstawia listę wstawek do wykresów standardowych; wstawki użytkownika posiadają analogiczną listę).Lista wstawek tekstowych
Uwaga
Z powodu braku relacji program nie sprawdza czy wstawka została gdziekolwiek użyta. Wynika stąd możliwość skasowania wstawki, do której istnieje odwołanie. Należy uważać na to aby nie dochodziło do takich sytuacji.
Formularz wstawki tekstowej do wykresu
Formularz wstawki tekstowej do wykresu wygląda następująco (rys. 8 przedstawia formularz wstawki standardowej; wstawki użytkownika posiadają analogiczny formularz).Formularz wstawki tekstowej (standardowej)
Okno operacyjne wykresów
Głównym elementem modułu wykresów z punktu widzenia Użytkownika jest tzw. okno operacyjne wykresów. Okno to zaraz po otwarciu wyświetla wykres startowy a następnie pozwala na nawigację po grafie wykresów i zmianę parametrów dynamicznych wykonywanych wykresów. Głównym elementem okna jest kontrolka REGION zawierająca wykres. Pod wykresem dostępne są przyciski nawigacyjne, przycisk odświeżania wykresu oraz panel z kontrolkami parametrów dynamicznych. Na drugiej zakładce umieszczone zostały kontrolki dynamicznych parametrów graficznych wykresu (jeśli ich brak – zakładka ta nie pokazuje się) a na trzeciej – lista z danymi serii wykresu przedstawionymi w formie tabelarycznej. Na toolbarze okna są dostępne przyciski obsługujące wydruki wykresu i eksport danych do Excela. Wydruk z poziomu pierwszych dwóch zakładek produkuje plik .wmf (którego link jest wstawiany do definicji wydruku) a z trzeciej i czwartej zakładki – kolejkę z danymi serii wykresu (wydruk tu podłączony powinien więc operować na kolejce). Eksport danych do Excela obejmuje dane serii wykresu a więc dane z listy na trzeciej zakładce. Jedną z podstawowych akcji wykonywanych na wykresie jest eksploracja do wykresu podrzędnego. Następuje to przez kliknięcie lewym klawiszem myszy w wybrany punkt wykresu (wykonanie podwykresu domyślnego) lub kliknięcie prawym klawiszem myszy w wybrany punkt wykresu i wybór z menu podwykresu, który chcemy wykonać. Umieszczone pod wykresem przyciski nawigacyjne służą do poruszania się po historii wykonanych wykresów od startowego począwszy. Odpowiada to analogicznym przyciskom w internetowych browserach. Należy jednak zwrócić uwagę, że wykonanie każdej akcji nawigacji (Wstecz, Wprzód itp.) wiąże się z odświeżeniem danych (powtórne załadowanie – brak cache’owania wyniku). Jak powiedziano wcześniej, bieżący wykres startowy zostaje po raz pierwszy wykonany z wartościami początkowymi parametrów dynamicznych (nadpisanymi ewentualnie wartościami zmiennych dynamicznych przekazanych z aplikacji). Po zmianie któregokolwiek z parametrów przycisk odświeżenia zmienia ikonę na co ma sygnalizować, że dane na wykresie nie odpowiadają bieżącym nastawom parametrów. Aby uzgodnić dane z parametrami należy wykonać odświeżenie. Sytuacja taka nie występuje jeśli w parametrach graficznych wykresu użyto parametru /@AutoRefresh – wówczas dane odświeżają się automatycznie po każdej zmianie dowolnego parametru.Okno operacyjne wykresów – zakładka Wykres
Okno operacyjne wykresów – zakładka Dane serii wykresu