Artykuł jest aktualny do wersji 2022.1.
FastReport .NET posiada świetne narzędzie do wyświetlania danych w postaci zintegrowanej tabeli lub macierzy. Wielu z nas chciałoby poprawić funkcjonalność macierzy, np. o tak przydatną opcję jak wybór N najwyższych wartości. Wydaje się to tak proste, jak wybranie N najwyższych wierszy ze źródła danych. Jednak oprócz dokonania wyboru górnych wartości, konieczne jest pogrupowanie wszystkich pozostałych danych w jeden zapis, co stanowi główny problem. Nie da się tego zrobić za pomocą wbudowanych narzędzi obiektu Matrix.
Musimy więc przygotować dane tak, aby zawierały zarówno wartości szczytowe jak i sumę wszystkich pozostałych wartości. Ten sposób jest odpowiedni dla baz danych SQL. Wszystko, czego potrzebujemy, to napisać zapytanie SQL.
Załóżmy, że tworzymy listę wynagrodzeń pracowników według lat. W edytorze źródeł danych możemy użyć zapytania SQL, jeżeli używana jest baza danych SQL.
Tak będzie wyglądało zapytanie SQL, które wybierze 2 najwyższe wartości oraz sumę wszystkich pozostałych wartości:
SELECT top 2 name, year, month, salary FROM crosstest ORDER BY salary UNION SELECT 'Other' AS name, year, month, SUM(salary) FROM crosstest WHERE name NOT IN (SELECT Top 2 name FROM crosstest ORDER BY salary) GROUP BY name, year, month
Tutaj łączymy dwa zapytania za pomocą operatora union. W pierwszym zapytaniu wybieramy najwyższe wartości, w drugim - sumę wszystkich pozostałych wartości.
Efektem tych działań będzie następującą macierz:
Jak widać, stosując różne techniki przygotowania danych wyjściowych, możemy uzyskać pożądany efekt, nawet jeśli taka funkcjonalność nie była początkowo przewidziana w generatorze raportów.