Przejdź do głównej zawartości

Wskaźnik

W Crystal Reports brakuje opcji, która umożliwia wyświetlenia wartości w postaci graficznego wskaźnika tak jak to potrafi Excel. Na szczęście istnieje pewien sposób aby uzyskać efekt jak poniżej...

Załóżmy, że mamy pole w tabeli, które posiada wartość procentową zapisaną w postaci ułamka 0..1

Skrypt do założenia przykładowej tabeli:

CREATE TABLE [dbo].[Tasks](
[TaskId] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NULL,
[Progress] [decimal](3, 2) NULL,
CONSTRAINT [PK_Tasks] PRIMARY KEY CLUSTERED
(
[TaskId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Tasks] ON
GO
INSERT [dbo].[Tasks] ([TaskId], [Name], [Progress]) VALUES (1, N'Task 1', CAST(0.50 AS Decimal(3, 2)))
GO
INSERT [dbo].[Tasks] ([TaskId], [Name], [Progress]) VALUES (5, N'Task 2', CAST(0.90 AS Decimal(3, 2)))
GO
INSERT [dbo].[Tasks] ([TaskId], [Name], [Progress]) VALUES (7, N'Task 3', CAST(0.75 AS Decimal(3, 2)))
GO
INSERT [dbo].[Tasks] ([TaskId], [Name], [Progress]) VALUES (8, N'Task 4', CAST(1.00 AS Decimal(3, 2)))
GO
INSERT [dbo].[Tasks] ([TaskId], [Name], [Progress]) VALUES (9, N'Task 5', CAST(0.25 AS Decimal(3, 2)))
GO
SET IDENTITY_INSERT [dbo].[Tasks] OFF
GO
view raw cr-progress.sql hosted with ❤ by GitHub

  1. Umieść pole Progress na raporcie
  2. Zaznacz opcję Size and Position i przy parametrze Width wpisz formułę:

    {Tasks.Progress} * 1440
    view raw cr-progress hosted with ❤ by GitHub
    Dzięki temu rozmiar pola będzie uzależniony od wartości procentowej. Tajemnicza stała 1440 to coś podobnego do rozdzielczości DPI - więcej na ten temat znajdziesz w moim starym wpisie.

  3. Zaznacz pole, wybierz opcję Highlighting Expert, wpisz progi i określ formatowanie:

  4. Zaznacz pole, wybierz opcję Format Field, przejdź na zakładkę Common i w opcji Display String

    wpisz formułę:
    ToText({Tasks.Progress}*100, 0) + "%"

Gotowe!

Komentarze

Popularne posty z tego bloga

Konwersja daty w CDN Optima

Crystal Reports jest bardzo często zintegrowany z popularnymi aplikacjami. Przykładem jest system CDN Optima . Początkujących użytkownikom sprawiają kolumny z datą, bo data nie jest zapisana jako datetime lecz jako liczba. Otóż data w CDN Optima zapisana jest w formacie Clarion, czyli liczba dni, które upłynęły od daty 1800-12-28 . (Czy ktoś wie co to za data w historii?) Dlatego jeśli chcemy użyć takiego pola na raporcie, pierwsze co powinniśmy zrobić to dokonać konwersji liczby na datę. W innym przypadku Crystal Reports nie będzie wiedział, że jest to data i żadne formatowanie dat, grupowanie po okresach nie będzie działać. Formuła do konwersji formatu Clarion na datę : Jeśli mamy wiele takich pól to najlepiej utworzyć własną funkcję:

Funkcje Crystal Reports

Crystal Reports posiada bardzo dużo funkcji (ok. 200) do operacji na tekstach, liczbach, datach itd. Można się z nimi zapoznać przeglądając drzewo Funkcje (Functions) w Edytorze Formuł (Formula Editor) i czytając helpa. Warto je znać, aby nie wyważać otwartych drzwi.  Problem w tym, że trzeba wiedzieć czego się szuka.   Dla wielu osób dodatkową barierą może być język angielski, bo nawet w polskiej wersji Crystala, help, o przepraszam.... pomoc jest w języku Szekspira. Dlatego stworzyłem niegdyś listę funkcji Crystal Reports w języku polskim, którą otrzymywali uczestnicy moich szkoleń w formacie PDF.  Teraz postanowiłem  opublikować ją w sieci, aby była zawsze była pod ręką i dostępna dla szerszego grona.  Lista funkcja dostępna jest tutaj . Lista funkcji nie jest jeszcze w pełni kompletna, więc będę ją na bieżąco aktualizować. Czekam na wasze komentarze i uwagi, zwłaszcza propozycje lepszych tłumaczeń. Miłego korzystania!

Zamiana daty i czasu na data-czas

Kolejne szkolenie u klienta i kolejne wyzwanie za mną... Chodziło o wygenerowanie raportu czasu pracy z uwzględnieniem, że zmiana następuje o godz. 6:00 a nie o północy. To znaczy, że godziny do 6:00 powinny być jeszcze zaliczane do dnia poprzedniego. Dodatkowym utrudnieniem u klienta był fakt, że data w bazie danych była rozbita na 2 pola: data w formacie: yyyy-mm-dd 00:00:00 godzina w formacie: 1900-01-01 HH:mm W takim razie do dzieła! Załóżmy, że mamy następującą tabelę: 1. Tworzymy formułę która zamieni 2 osobne pola z datą i czasem w jedno pole typu datetime: W ten sposób otrzymamy jedną wartość w formacie yyyy-mm-dd HH:mm 2. Następnie od tak utworzonej daty odejmujemy 6 godzin: Otrzymamy w rezultacie coś takiego: Kolumna WorkDate wyświetla datę do której została zakwalifikowana pozycja. Na podstawie tak utworzonej formuły można utworzyć grupowanie na raporcie.