Dorota Trybała

Dorota Trybała
Projektant-programis
ta

Temat: Problem z optymalizacją raportu CR

Mam raport, który trudno mi zoptymalizować w CR.

Opiszę problem bez własnego rozwiązania.

Jest tabela główna wnioski (ok. 2000 rekordów, dość długich), do niej dobieram kilka informacji z tabeli decyzje (relacja 1-1, left outer).
Każdy rekord w tabeli wnioski i w tabeli decyzje stemplowany jest identyfikatorem użytkownika, więc muszę jeszcze dobrać 2 zestawy nazwisko+imie z wnioski i decyzje, każdy zestaw z tej samej tabeli operator.
Do tego 2 podraporty, prezentujące zestaw informacji dla danego rekordu z wnioski (relacja 1 do wielu).

Nie wydaje mi się, żeby to był jakiś szczególnie skomplikowany raport, jednak jego przygotowanie zajmuje CR przynajmniej 3 minuty, u użytkownika spodziewam się ponad 10.

Teraz zastosowane rozwiązania. Połączenie wnioski i decyzja oraz operator dla jednego z zestawów nazwisko+imie zrobiłam w SQL Query. Samo zapytanie zajmuje 2 sekundy. Sprawę spowolniły podraporty oraz konieczność ponownego przeszukiwania zbioru operator dla drugiego zestawu nazwisko+imie. Zbiory do podraportów i operator po raz drugi połączyłam relacją poprzez id rekordu wnioski.

Jak to można zopytmalizować w CR?

Zbiory w podraportach zazwyczaj zawierają jeden rekord dla danego rekordu z tabeli wnioski, czasem zdarza się kilka. Ten post został edytowany przez Autora dnia 22.11.13 o godzinie 13:34
Piotr Dryńkowski

Piotr Dryńkowski Specjalista ds.
Systemów ERP,
Crystal Reports,
PL/SQL

Temat: Problem z optymalizacją raportu CR

Podraporty podpinane w sekcji Details potrafią skutecznie spowolnić działanie raportu. Więc najlepiej gdybyś z nich zrezygnowała i cały zestaw danych wyciągała zapytaniem. Jeśli dane będą pączkować (relacja 1 do wielu) można pokombinować z ukrywaniem sekcji.
Dorota Trybała

Dorota Trybała
Projektant-programis
ta

Temat: Problem z optymalizacją raportu CR

Miałam 2 podraporty, więc poradziłam sobie z jednym z nich za pomocą kwerendy, ale nie wiem już co zrobić z tą drugą tabelą. Możesz mi coś podpowiedzieć. Z samym SQL mam trochę doświadczenia, mniej z CR.
Piotr Dryńkowski

Piotr Dryńkowski Specjalista ds.
Systemów ERP,
Crystal Reports,
PL/SQL

Temat: Problem z optymalizacją raportu CR

Opisz co rozumiesz przez "tą druga tabele"(chodzi o dodatkowe dane do wniosku czy imie+nazwisko?) co z niej wyciągasz dlaczego podraportem i i czy jesteś w stanie wykonać w swoim zapytaniu relacje do niej.
Dorota Trybała

Dorota Trybała
Projektant-programis
ta

Temat: Problem z optymalizacją raportu CR

Fakt, że trochę niezrozumiale się wyraziłam. Wcześniej w podraportach miałam dane z dwóch tabel: zakład i kontenery

Zrobiłam kwerendę, z której uzyskuję dane z: zakład (przeniosłam go z podraportu do kwerendy i złączyłam przez right outer z główną tabelą, czyli wnioski), wnioski, decyzje, operator (jeden zestaw nazwisk w kwerendzie, drugi rozwiązałam relacją), no i nie wiem co innego, niż podraport mogę zastosować, aby drukować kontenery (relacja 1 do wielu z tabelą wnioski).

Ten sam wydruk bez kontenerów wykonuje się w ciągu sekundy, z kontenerami w podraporcie kilka minut i nie ma znaczenia, czy dane z tabeli kontenery, z których potrzebuję tylko jedno pole, są wyczytywane w podraporcie kwerendą, czy w Field Explorer dołączam po prostu tabelę kontenery. Wierszy tabeli wnioski jest tylko ok. 2000.

Czy teraz opisałam problem dość jasno?
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Problem z optymalizacją raportu CR

Jeśli posiadasz już kwerendę (SQL command) to nie powinnaś jej łączyć z innymi tabelami w designerze, gdyż wówczas proces linkowania odbywa się po stronie klienta, a nie na serwerze.

Postaraj się wszystko zawrzeć w jednym SQL Command. Możesz również utworzyć procedurę składowaną i z niej pobierać dane do raportu. To będzie najbardziej optymalne rozwiązanie pod względem szybkości.
Dorota Trybała

Dorota Trybała
Projektant-programis
ta

Temat: Problem z optymalizacją raportu CR

Ale nie bardzo sobie wyobrażam jak mogę dołączyć kontenery do tego zapytania.

Możemy pominąć decyzje i operatora, a skupić się tylko na wnioski, zakłady i kontenery.
W każdej z tabel jest pole idwn, które je łączy, a wnioski to tabela nadrzędna, kontenery i zakłady - podrzędne w relacji 1 do wielu.
Czy możecie mi ułożyć JEDNO zapytanie, które pobierze wszystkie dane z tych tabel?
Piotr Dryńkowski

Piotr Dryńkowski Specjalista ds.
Systemów ERP,
Crystal Reports,
PL/SQL

Temat: Problem z optymalizacją raportu CR

select
w.daneWnioski,
z.daneZakłady,
k.daneKontenery

from
wnioski w
left join zakłady z on
z.idwn = w.id
left join kontenery k on
k.idwn = w.id

Czy o to Tobie chodzi?
Dorota Trybała

Dorota Trybała
Projektant-programis
ta

Temat: Problem z optymalizacją raportu CR

Tak. O to mi chodzi. Nie zdawałam sobie sprawy, że tak można zrobić. Fakt, pojawiają się wszelkie możliwe kombinacje danych z zaklady i z kontener, ale to jest już do ogarnięcia. A myślałam, ze znam się na SQLu ;-).

Bardzo dziękuję.
Dorota Trybała

Dorota Trybała
Projektant-programis
ta

Temat: Problem z optymalizacją raportu CR

Wynik zapytania pojawia się bardzo szybko, jednak mimo wszystko nie potrafię teraz posortować niezależnie danych z kontenery i danych z zakłady.
Jakie jest na to rozwiązanie?

edit:
Sortuję wg danych z tabeli zakłady, więc one drukują się unikanie, natomiast dane z kontenery powtarzają się dla każdego kolejnego rekordu z zakłady.

Jak mogę przechwycić informację, że jeden zestaw danych z kontenery już się wydrukował?

edit:
Ostatecznie wyczytałam informacje o pierwszym rekordzie z zakłady i dla następnych ukrywam pole z danymi z kontenery.

Mam nadzieję, że już teraz będzie ok.Ten post został edytowany przez Autora dnia 27.11.13 o godzinie 14:20
Dorota Trybała

Dorota Trybała
Projektant-programis
ta

Temat: Problem z optymalizacją raportu CR

A jak zrobić, żeby pusty wiersz są nie drukował. Pusty, czyli taki, w którym informacje są ukryte dla określonego warunku lub są ukryte, bo powielone?
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Problem z optymalizacją raportu CR

W opcjach sekcji masz opcję suppress i możesz tam wpisać warunek.
Możesz również skorzystać z opcji SuppressIfDuplicated na polach.
Dorota Trybała

Dorota Trybała
Projektant-programis
ta

Temat: Problem z optymalizacją raportu CR

Tak. To już mam, ale nie wystarczy. Kazałam mu ukryć dane i ukrył prawidłowo, tylko teraz tam są puste miejsca, a ja chcę, żeby nie było pustych miejsc, tylko kolejne dane,

czyli zamiast np.

1

2

3

było
1
2
3

Uprzedzając ewentualne inne pytania od razu informuję, że w innych kolumnach też nie ma żadnych widocznych informacji. Wszystko jest ukryte wg zadanego warunku.

edit:
Marcin. Miałeś rację. Miałam supress na polach, a do sekcji raportu nie zajrzałam. zaznaczyłam ukrywanie pustych sekcji i teraz działa. Bardzo dziękuję.Ten post został edytowany przez Autora dnia 28.11.13 o godzinie 13:11
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Problem z optymalizacją raportu CR

Cieszę się :)

Pamiętaj, że w przypadku gdybyś korzystała z podraportów i chciałabyś je ukrywać jeśli są puste to możesz skorzystać z opcji Suppress Blank Subreport, a później tak samo Suppress Blank Section.
Piotr Dryńkowski

Piotr Dryńkowski Specjalista ds.
Systemów ERP,
Crystal Reports,
PL/SQL

Temat: Problem z optymalizacją raportu CR

Ciekawą i prostą formułą w przypadku ukrywania sekcji w której dane chcemy pokazać tylko raz a Query z jakiś względów je "pączkuje" jest
Previous(id.pole) = id.pole
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Problem z optymalizacją raportu CR

Faktycznie, ciekawe rozwiązanie, ale trzeba pamiętać o tym, że samo ukrycie sekcji nie powoduje pominięcia wartości w ewentualnym podsumowaniu. Dlatego już na etapie pobierania danych powinniśmy zadbać o prawidłowe dane (można zastosować distinct lub group by w SQL). Poza tym po co pobierać dane z bazy danych, które chcemy za chwilę ukryć.
Piotr Dryńkowski

Piotr Dryńkowski Specjalista ds.
Systemów ERP,
Crystal Reports,
PL/SQL

Temat: Problem z optymalizacją raportu CR

Marcin S.:
Faktycznie, ciekawe rozwiązanie, ale trzeba pamiętać o tym, że samo ukrycie sekcji nie powoduje pominięcia wartości w ewentualnym podsumowaniu. Dlatego już na etapie pobierania danych powinniśmy zadbać o prawidłowe dane (można zastosować distinct lub group by w SQL).
Słusznie ale...
Poza tym po co pobierać dane z bazy danych, które chcemy za chwilę ukryć.
...odnosiłem się do zapytania które zaproponowałem Dorocie. Distinct czy Group By niewiele by tam pomógł.Ten post został edytowany przez Autora dnia 29.11.13 o godzinie 10:53
Dorota Trybała

Dorota Trybała
Projektant-programis
ta

Temat: Problem z optymalizacją raportu CR

Piotr D.:
...odnosiłem się do zapytania które zaproponowałem Dorocie. Distinct czy Group By niewiele by tam pomógł.

Tak. Nie pomógł. Próbowałam jeszcze przed ukrywaniem sekcji ;-) Lubię SQLa od pierwszego wejrzenia :-)

Następna dyskusja:

Problem z linkowaniem z rap...




Wyślij zaproszenie do