2014-04-04 42 views
6

Mam tabelę, która daje mi wartości w numerach i dziesiętnym (waga kg) E.g.10.455 kg (czyli 10 kg i 455 gramów) i nos. jak w 10 nrFormat liczb dziesiętny w raportach Birt

Teraz wszystkie te wartości pochodzą z kolumny (dziesiętny (10,3) -mysql) w tabeli i na podstawie kolumny typu jednostki muszę zdecydować, czy w teście BIRT mają być 3 znaki dziesiętne, czy 0 dziesiętne raport.

Wiem, że poprzez skrypty wartości można modyfikować, ale nie jestem w stanie wykorzystać skryptów.

Piszę to na onFetch

if(row["unittype"]=="Nos") 
var df = new Packages.java.text.DecimalFormat("#,###.##"); 
else 
var df = new Packages.java.text.DecimalFormat("#,###"); 

df.format(row["invoicedquantity"]); 
this.setDisplayValue(df); 

nie jestem w stanie uzyskać wartości

+0

co jest widoczne podczas korzystania z tego skryptu po renderowaniu raportu? – Vishrant

+0

Brak zmian w danych wyjściowych –

Odpowiedz

7

nie wierzę, to może pracować ze skryptu onFetch ten rodzaj skryptu należy umieścić w " onRender "zdarzenie elementu danych. Ponadto formater zwraca wynik tak powinno być:

this.setDisplayValue(df.format(row["invoicedquantity"])); 

Ale myślę, że byłoby łatwiej stworzyć kolumna obliczana jako typ danych „ciąg” w zbiorze danych, z wyrażeniem:

if(row["unittype"]=="Nos"){ 
    Formatter.format(row["invoicedquantity"],"#,###.## Kg"); 
}else{ 
    Formatter.format(row["invoicedquantity"],"#,### Kg"); 
} 

EDYTOWANIE: Po głębszym przyjrzeniu się, znalazłem bardziej odpowiedni sposób, zmieniając właściwość "numberformat". W onRender lub onCreate skryptu elementu danych (które powinny być numer typ danych), możemy zrobić coś takiego:

if(row["unittype"]=="Nos"){ 
    this.getStyle().numberFormat="#,###.## Kg"; 
}else{ 
    this.getStyle().numberFormat="#,### Kg"; 
} 

To jest lepszym rozwiązaniem, ponieważ element danych posiada jeszcze typ danych numerycznych, dzięki czemu jeśli raport zostanie wyeksportowany do programu Excel, zostanie uznany przez program Excel jako liczba.

+0

Dziękujemy Dominique za odpowiedź, ale fakturyQuantity i unittype pochodzą z tabeli wielokrotnie (ponieważ na fakturze jest wiele pozycji wiersza) i kiedy dodaję powyższy skrypt do pliku if-else w onRender tej kolumny, nie zmienia/nie wpływa na wartości. Czy coś mi brakuje? Składam wniosek o nadpisanie danych, które mam sformatować –

+0

i zredagowałem odpowiedź lepszym rozwiązaniem – Dominique

+0

Dominique .. to jest niesamowite .. Działa płynnie .. Czy możesz mi pomóc, aby sformatować go dla indyjskiego numeru, który is (#, ##, ##, ## 0.00) ... Nie mogę uzyskać tego zestawu dla tego numeru. Birt dodaje przecinki po każdych 3 liczbach. Dziękuję z góry !! –