W większości raportów w formułach stosujemy funkcje warunkowe.
Okazuje się, że Crystal Reports posiada wiele różnych konstrukcji warunkowych, które warto znać i dobierać do konkretnego przypadku.
Funkcja if-else-then
To podstawowa i najczęściej stosowana funkcja warunkowa w Crystal Reports.
Przykład:
Pamiętajcie, że typ formuły jest określany na podstawie pierwszej zwracanej wartości. W związku z tym nie możemy mieszać typów w jednej formule.
Przykład niepoprawny:
if {Orders Detail.Quantity} <> 0 then {Orders Detail.Quantity} else "nothing"
Taka formuła wyświetli błąd, gdyż Crystal spodziewa się wartości numerycznej na podstawie pierwszej pierwszej wartości. Zatem musimy dokonać jawnej konwersji typu.
Przykład poprawny:
If {Orders Detail.Quantity} <> 0 Then ToText({Orders Detail.Quantity}) Else "nothing"
Funkcje if-then-else można zagnieżdżać, ale lepiej zachować umiar.
Przykład:
Funkcja IIF
Bardzo podobną konstrukcją do if-else-then jest funkcja IIF i różni się tylko składnią.
Przykład:
Funkcja Switch
Funkcja switch umożliwia zastąpienie wielu zagnieżdżonych funkcji if-then-else jedną zgrabną konstrukcją. Dzięki temu nasza formuła stanie się bardziej czytelna i możemy uniknąć błędów.
Przykład
Funkcja select-case
To bardzo słabo udokumentowana funkcja (brak opisu w helpie) ale może bardzo uprościć nasze formuły.
Przykład:
Funkcja Choose
Jeszcze na koniec jedna ciekawa funkcja Choose, która na podstawie pierwszego argumentu, który musi być liczbą, zwraca określony element z listy. Oczywiście może być stosowana tylko w bardzo specyficznych sytuacjach.
Przykład
zwraca "środa".
Co ciekawe, można również zwracać zakresy danych.
Przykład
Okazuje się, że Crystal Reports posiada wiele różnych konstrukcji warunkowych, które warto znać i dobierać do konkretnego przypadku.
Funkcja if-else-then
To podstawowa i najczęściej stosowana funkcja warunkowa w Crystal Reports.
Przykład:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if {Orders Detail.Quantity} <> 1 then "wiele wartości" else "wartość pojedyncza" |
Pamiętajcie, że typ formuły jest określany na podstawie pierwszej zwracanej wartości. W związku z tym nie możemy mieszać typów w jednej formule.
Przykład niepoprawny:
if {Orders Detail.Quantity} <> 0 then {Orders Detail.Quantity} else "nothing"
Taka formuła wyświetli błąd, gdyż Crystal spodziewa się wartości numerycznej na podstawie pierwszej pierwszej wartości. Zatem musimy dokonać jawnej konwersji typu.
Przykład poprawny:
If {Orders Detail.Quantity} <> 0 Then ToText({Orders Detail.Quantity}) Else "nothing"
Funkcje if-then-else można zagnieżdżać, ale lepiej zachować umiar.
Przykład:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if {Taxes.Description}='Kategoria 23%' then '23' else | |
if {Taxes.Description}='Kategoria 8%' then '8' else | |
if {Taxes.Description}='Kategoria 0%' then '0' else | |
if {Taxes.Description}='Kategoria BEZVAT' then 0 |
Funkcja IIF
Bardzo podobną konstrukcją do if-else-then jest funkcja IIF i różni się tylko składnią.
Przykład:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
IIF ({Orders Detail.Quantity} <> 1, "wiele wartości","wartość pojedyncza" ) |
Funkcja Switch
Funkcja switch umożliwia zastąpienie wielu zagnieżdżonych funkcji if-then-else jedną zgrabną konstrukcją. Dzięki temu nasza formuła stanie się bardziej czytelna i możemy uniknąć błędów.
Przykład
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Switch ( | |
{Orders.Order Amount} > 5000, "large", | |
{Orders.Order Amount} < 1000, "medium", | |
True, "small") |
Funkcja select-case
To bardzo słabo udokumentowana funkcja (brak opisu w helpie) ale może bardzo uprościć nasze formuły.
Przykład:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
select {Taxes.Description} | |
case 'Kategoria 23%': '23' | |
case 'Kategoria 8%': '8' | |
case 'Kategoria 0%': '0' | |
case 'Kategoria BEZVAT': 'BezVat' | |
default: '0' |
Funkcja Choose
Jeszcze na koniec jedna ciekawa funkcja Choose, która na podstawie pierwszego argumentu, który musi być liczbą, zwraca określony element z listy. Oczywiście może być stosowana tylko w bardzo specyficznych sytuacjach.
Przykład
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Choose (3, "poniedziałek", "wtorek", "środa", "czwartek") |
zwraca "środa".
Co ciekawe, można również zwracać zakresy danych.
Przykład
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Choose (2, 10 To 20, 100 To 200, 60 To 70) |
Komentarze