Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Zahlenformat im Reportserver

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von lengulins, 18 Oktober 2012.

  1. lengulins

    lengulins Benutzer

    Hallo,
    ich habe einen Report für eine Auftragsbestellung erstellt. Darin ist eine Tabelle, die einen Wert für eine Menge beinhaltet. Die Zugrunde genommene Variable ist eine Dezimalzahl. Je nach Auftrag beinhaltet die Menge entweder eine Stückzahl oder eine Stundenanzahl. Stunden möchte ich gern als Kommazahl darstellen, da ich ja einen Servicetechniker gut und gerne 3,5h bestellen kann. Stückzahlen würde ich gern ohne Komma anzeigen, da es auf einem Bestellschein komisch aussieht, wenn ich 385,0 Stueck Kabel bestelle.
    Wie schaffe ich es das Feld so zu Formatieren, dass wenn es hinterm Komma keinen Wert gibt, der Inhalt als Ganzzahl angegeben wird?
     
  2. ukulele

    ukulele Datenbank-Guru

    Das kannst du auf mehreren Wegen ermitteln, hier mal zwei die mir spontan einfallen als Testscript:
    Code:
    DECLARE    @test DECIMAL(5,2)
    SET        @test = 888.10
    
    IF        @test - round(@test,0) = 0 -- Variante 1
    OR        @test - cast(cast(@test AS INT) AS DECIMAL(5,2)) = 0 -- Variante 2
    BEGIN
            SELECT    'keine Nachkommastellen',cast(@test AS INT)
    END
    ELSE
    BEGIN
            SELECT    'Nachkommastellen vorhanden',@test
    END
    
    Jetzt musst du nur deine Ausgabe (Bestellschein) so umbauen, das entweder ein INT Wert oder ein DECIMAL Wert angezeigt wird. Jetzt weis ich nicht genau, wie der Bestellschein erstellt wird. Meist kann man im Fremdprogram eine Formatierung vorgeben. Wenn nicht, kann man eine CASE Schleife in SQL nutzen. Dafür müsste ich aber den genauen SELECT kennen und wissen, ob sowohl Stunden als auch Stückzahlen in auf einem Schein stehen können.

    Außerdem würde ich eventuell die Nachkomma stellen nicht davon abhängig anzeigen, ob es welche gibt, sondern um welchen Typ (Stunden oder Stückzahl) es sich bei der Position handelt. Das geht aber auch mit einer CASE Schleife.
     
    Walter gefällt das.
  3. lengulins

    lengulins Benutzer

    Danke für die schnelle Antwort, aber es hilft mir nicht sonderlich weiter. Ich habe wirklich das Problem der Anzeigenproblematik im Reportserver (es sollen nur Nachkommastellen angezeigt werden, wenn auch welche vorhanden sind). Eine Typumwandlung per SQL nützt mir nichts. Der Typ der Tabellenspalte steht fest (und wenn ich dem Reportgenerator sage, er soll eine INT- Zahl mit zwei Nachkommastellen anzeigen, macht er das auch, genau wie er eine Realzahl auch ohne Komma schreiben wuerde. Dummerweise allerdings nur immer für die gesamte Spalte und nicht abhängig vom vorhandenen Wert) - Die Frage des Zahlenformats ist also unrelevant. Eine Fomatierungsangabe waere interessant. Ist also weniger eine SQL-Anfrage, mehr eine Anfrage zu Reportserver-Wissen.
     
  4. ukulele

    ukulele Datenbank-Guru

    Ok dann würde ich nicht in INT oder DECIMAL konvertieren sondern in Text. Das ginge auch in SQL und man könnte per CASE Abfrage die Formatierung steuern. Kannst du mal den eigentlichen Select posten?
     
  5. Tommi

    Tommi Datenbank-Guru

    Hi,

    das Thema betrifft wohl eher die Programmierung im Visual Studio oder im Report Builder.
    Du kannst die Formatierung für ein Textfeld in einem Bericht über einen Ausdruck (Formel) bestimmen.

    Dazu erweiterst du am Besten dein Dataset um eine Berechnete Spalte, über die dann die Formatierung des Feldes bestimmt wird.
    Das könnte z.B. so Aussehen, dass für jeden Artikel oder einfacher, für eine Artikelgruppe, ein Darstellungskennzeichen eingesetzt wird.
    Bei mehreren tausend Artikeln ist das aber eine recht umfangreiche Details-Arbeit. Einfacher ließe sich das regeln, wenn jeder Artikel eine Maßeinheit besitzen würde.
    Dann könnte man die Formatierung über dieses Feld festlegen. Bei Maßeinheit "Stück" werden dann keine Nachkommastellen angegeben, bei "Meter" oder "Stunden" aber schon.

    Das folgende Beispiel bezieht sich jetzt auf eine im Dataset vorberechnete Spalte [AnzahlNachkomma] für die Darstellung, wobei ich annehme, dass in der vorberechneten Spalte die Anzahl der Nachkommastellen als Integer angegeben wird.

    Code:
    =Choose(Fields!AnzahlNachkomma.Value+1, "#,0;- #,0", "#,0.0;- #,0.0", "#,0.00;- #,0.00", "#,0.000;- #,0.000")
    Dieses Code-Fragment wird im Eigenschafts-Fenster in die Zeile "Format" geschrieben.

    Viele Grüße,
    Tommi
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden