Temat: Accumulate po kilku polach

Mam zagwozdkę. W przykładach na Accumulate ciągle znajduję sumowanie po jednym warunku i to ok. Ale powiedzmy, mam bazę DB, w niej pola P1, P2, P3, PQty. Chciałbym posumować ilość po tych 3ech kategoriach.

(przykładowo P1 Producent, P2 kolor, P3 Coś do pisania jak długopis, mazak etc., Pqty Ilosc) - Czyli zbiory mają części wspólne.

Czy może mi powiedzieć ktoś, czy dobrze kombinuję chcąc zsumować po producentach, kolorach i rodzaju pisaka?

for each DB no-lock
break by P1 by P2 by P3:

accumulate PQty (SUB-TOTAL by P1 by P2 by P3).

if last-of(P3) then
display P1 P2 P3 accum sub-total by P3 (PQty).
end.
Maciej Popławski edytował(a) ten post dnia 08.11.11 o godzinie 12:38

konto usunięte

Temat: Accumulate po kilku polach

Ok, zacznijmy od zasadniczej części. Piszesz:
"mam bazę DB, w niej pola P1, P2, P3, PQty"
Rozumiem, że masz tablicę o nazwie DB w niej pola P1,P2,P3 oraz Pqty.

Początek masz dobry, później widzę problem związany z odświetlaniem zagregowanych danych. I tak, założyłeś grupowanie z sumowaniem na trzy pola, teraz aby odświetlić posumowane dane powinieneś:

- dla grupy P1:
if last-of(P1)
then display "Suma po producentach" accum sub-total by P1 Pqty.

- dla grupy P2:
if last-of(P2)
then display "Suma po kolorach" accum sub-total by P2 Pqty.

- dla grupy P3:
if last-of(P3)
then display "Suma po czymś do pisania" accum sub-total by P3 Pqty.

Możesz oczywiście wszystko wyświetlić w podsumowaniu raportu, ale wtedy wyglądałoby, tak:

display "Suma po producentach" accum sub-total by P1 Pqty
"Suma po kolorach" accum sub-total by P2 Pqty
"Suma po czymś do pisania" accum sub-total by P3 Pqty
.

Temat: Accumulate po kilku polach

Świetnie dziękować.

PS. Sorka, rzeczywiście tablicę :-)

Temat: Accumulate po kilku polach

Przemysław Ćwięcek:
Początek masz dobry, później widzę problem związany z odświetlaniem zagregowanych danych.

Mam jeszcze jedno pytanie. (bardziej chyba merytoryczne, bo chyba źle rozumiem to sumowanie).

Jak rozumiem, co rekord w tablicy DB on "akumuluje" pole PQTY. Więc nie powinno być problemu, żeby jeszcze coś innego robił w każdym kroku pętli.

Powiedzmy, że chciałem dodatkowo wypisać wszystkie wartości pola PQty.

Próbowałem w taki sposób:

def var AAA as char format "x(100)".

for each DB no-lock
break by P1:
accumulate PQty (SUB-TOTAL by P1 ).

AAA = AAA + string(PQty, "->>>>>>9.<<<<") + ";".

if last-of(P1) then
display P1 accum sub-total by P1 (PQty).
display substring(AAA, 1, length(AAA) - 1).

end.

Jednak wynikiem jest pusty ekran, a jak robię bez tej zmiennej, to wszystko jest OK.
Coś źle rozumuję?

konto usunięte

Temat: Accumulate po kilku polach

Hello,
Rzadko tu ostatnio zaglądam, ale do rzeczy.
Niezła kombinacja alpejska z tym ;):


AAA = AAA + string(PQty, "->>>>>>9.<<<<") + ";".


Na pierwszy rzut oka już można się spodziewać, że jeśli ilość rekordów w tablicy jest sporo to progress odmówi posłuszeństwa i wypluje komunikat w rodzaju 'naruszenie ochrony pamięci' itp.
Agregujesz typ char, którego maksymalną liczbą znaków jest 32K. Trochę to niebezpieczne.
Nie bardzo rozumiem co chcesz uzyskać, ale efekt będzie taki że jeśli w kolejnych rekordach będziesz miał np:
PQty = 1435,21
PQty = 2435,21
PQty = 4435,23
PQty = 5435,43
PQty = 7435,45
PQty = 8435,46
PQty = 1435,56

to wynikiem wykonania się AAA = AAA + string(PQty, "->>>>>>9.<<<<") + ";". będzie coś w rodzaju ciągu znaków:

1435,21;2435,21;4435,23;5435,43;7435,45;8435,46;1435,56;

Przykład ten jest tylko dla 7 rekordów, strach pomyśleć jakby ten ciąg wyglądał dla 10000 albo więcej ;). Wtedy na pewno dostałbyś wspomniany komunikat. Nawet gdyby progress udźwignął i dał rady wyświetlić np 20000 znaków, to raczej nikt z takiego czegoś nic ciekawego się nie dowie.

Jeśli chcesz dodatkowo uzyskać wszystkie wartości pola PQty to wystarczy (jak wspomniałeś).
zrobić display tego pola z jakimś ładnym formatowaniem.

Temat: Accumulate po kilku polach

Niestety żądanie klienta wew., musi być w jednej linijce....:(
Kombinacja może i alpejska, ale używam tego do tabeli, gdzie wynikowych będzie kilka rekordów, ale dobrze znać te ograniczania.

Czasami przy displayu nie ma jeszcze większych ograniczeń?

Dzięki wielkie za pomoc.

PS. Obszedłem to już bez accumulate, ale przyda się mini lekcja :-)Maciej Popławski edytował(a) ten post dnia 13.01.12 o godzinie 11:01

Następna dyskusja:

Poszukuje pilnie optymisty ...




Wyślij zaproszenie do