Oskar Oleszkiewicz

Oskar Oleszkiewicz Programista z pasją

Temat: Obliczenia wewnątrz crosstaba, ciekawe pytanie

Stworzyłem sobie crosstaba który w poziomie reprezentuje zakres lat od 2009 do 2030 roku (kolumny) natomiast wiersze to nazwy projektów, wewnątrz dla każdego rekordu w tym crosstabie stworzyłem @podsumowanie osadzone, w którym wpisałem instrukcje warunkową, niestety wbrew moim oczekiwaniom formuła zawarta w @podsumowaniu osadzonym crosstaba nie wylicza mi wartości dla każdej kolumny/wiersza a jedynie sprawdza warunek i wylicza dla pierwszej wartości wypełniając całego crosstaba tą wartością. Poniżej zamieściłem przykład (zrzuty ekranu):

Obrazek


oraz


Obrazek


oraz


Obrazek


Poniżej także formuła zawarta wewnątrz @Podsumowania osadzonego:

if (not IsNull({A_Reports_Sales_Items.A Project Link}))
then
(
if (CurrentDate() > Date({A_Reports_Sales_Items.Year}, {A_Reports_Sales_Items.Month}, Day(CurrentDate())))
then
DistinctCount({A_Sales_Budget_Item.A Product Link})
else if (CurrentDate() < Date({A_Reports_Sales_Items.Year}, {A_Reports_Sales_Items.Month}, Day(CurrentDate())))
then
DistinctCount({A_Contract_Addendum_Product.Product Link})
)
else
1


Dodam także że próbowałem osiągnąć podany efekt, kozystając z przykładów na podanej stronie
Unleashing the Crosstab in Crystal
Reports: The Grid Value Functions


Niestety podane w przykładach opcje są rozbieżne z moimi, ponieważ nie chce dodawać dodatkowej kolumny z wyliczonymi wartościami a jedynie zwracać w konkretnym rekordzie odpowiednie dane w zależności od (w moim przykładzie daty).

Dodam także że próbowałem czegoś takiego:

DistinctCount({A_Sales_Budget_Item.A Product Link}, {POLE})


W miejscu @POLE wstawiałem pola bazy danych
* A_Reports_Sales_Items.A Project Link
lub
*A_Reports_Sales_Items.Year

Aby wyznaczał przy zmianie ale za każdym razem krzyczy że pole jest niezgodne z grupą

Z góry dziękuje za pomoc
Oskar Oleszkiewicz
Oskar Oleszkiewicz

Oskar Oleszkiewicz Programista z pasją

Temat: Obliczenia wewnątrz crosstaba, ciekawe pytanie

Hej, jako ze nie doczekałem się odpowiedzi postanowiłem sam pogrzebać w sieci i rozwiązać swój problem, otóż znalazłem CZĘŚCIOWE rozwiązanie powyższego problemu, dlaczego częściowe a dlatego ze mimo zapewnień iż podsumowania osadzone można "wyklikać" już w CR 2008 to nie jest to prawdą, szukałem rozpaczliwie rozwiązania i tegoż "wyklikania" niestety ostatecznie postanowiłem poznać lub tez zaznajomić się z zawiła składnią odwołań w polach podsumowań do crosstaba, ostatecznie prawie osiągnąłem swój cel:


if ((GridValueAt(CurrentRowIndex, CurrentColumnIndex, 0) > 0) and (GridValueAt(CurrentRowIndex, CurrentColumnIndex, 1) = 0))
then
GridValueAt(CurrentRowIndex, CurrentColumnIndex, 0)
else if ((GridValueAt(CurrentRowIndex, CurrentColumnIndex, 0) > 0) and (GridValueAt(CurrentRowIndex, CurrentColumnIndex, 1) > 0))
then
GridValueAt(CurrentRowIndex, CurrentColumnIndex, 1) - GridValueAt(CurrentRowIndex, CurrentColumnIndex, 0)
else if ((GridValueAt(CurrentRowIndex, CurrentColumnIndex, 0) = 0) and (GridValueAt(CurrentRowIndex, CurrentColumnIndex, 1) > 0))
then
GridValueAt(CurrentRowIndex, CurrentColumnIndex, 1)
else
0


jak widać odwołuje się w zależności od instrukcji warunkowej do odpowiedniego pola siatki, niestety pola podsumowań zliczają mi elementy wyróżnione i tak ma być natomiast problem który pozostał to sumowanie końcowe wszystkich elementów a nie wyznaczanie sumy tak jak w powyższej formule.

Próbowałem funkcji:


GetTotalValueFor


Ale niestety nie wiem jak dokładnie uzyc tej funkcji, może ktos jednak wiedziałby cos na ten temat?
Marcin S.

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

Temat: Obliczenia wewnątrz crosstaba, ciekawe pytanie

Tak, to prawda, że nie da się wszystkiego wyklikać na cross-tabie. Powiedziałbym nawet, że jest wręcz odwrotnie. Kliknięcie to dopiero początek... Marcin Sulecki edytował(a) ten post dnia 10.12.12 o godzinie 15:51

Podobne tematy


Następna dyskusja:

Pytanie




Wyślij zaproszenie do