none
Report Server: Interaktive Sortierung von berechneten Spalten RRS feed

  • Frage

  • Guten Abend,

    wahrscheinlich ist es ein alter Hut :) für mich ein großes Problem. Ich versuche es hoffentlich verständlich zu beschreiben.

    Bisher habe ich den Reportserver mehr nur als letzte darstellung meiner Scripte benutzt. Berechnungen von Spalten waren meistens bereits im Script vorhanden.
    Diesmal habe ich nur einen einfachen Select auf eine kleine Tabelle mit 4 Ausgabespalten die dadurch auch bestandteil des datasets sind. Eine Spalte ist dann das datum das ich dann als Spaltengruppe der Matrixvorlage verwendet habe. Summen Pro Datum habe ich dann über die Matrixvorlage als: SUM, AVG, STDVEP, MIN usw. durch die Matrix gleich mit berechnen lassen. Diese berechneten Spalten sind dann natürlich kein bestandteil des Datasets. Pivot durch Matrixvorlage. Super.

    Am Ende gab es von mir noch eine Bewertungsspalte, die mir mit IiF( und Verkettung) aufgrund der berechneten Spalten mir True oder False zurück gibt. Alles bestens.

    Hier komme ich an mein Problem, ich bekomme die interaktive Sortierung für diese Spalte nicht hin. 

    Ich möchte das Tablix nach der Bewertung dieser Spalte sortieren oder auch filtern. 

    - Die vorher durch die Matrixvorlage berechneten Felder sind natürlich nicht bestandteil des Datasets ich kann sie daher nicht direkt verwenden.

    - Meine Bewertungsspalte berechnet somit per Aggregat was dann als Sortierung auf bereits vorhandene Aggregate nicht mehr angewendet werden kann.

    Ich habe eine Menge ausprobiert, hier eine menge gelesen. Entweder so als Lösung für mich nicht verstanden oder nicht gefunden. Hier also mit großer Bitte um Hilfe. 

    Dienstag, 8. Oktober 2013 21:06

Antworten

  • Hallo Peter,

    irgendwie verstehe ich das nicht ganz.

    Eine Matrix ist nach Zeilengruppe und Spaltengruppe sortiert. Fügst Du berechnete Spalten hinzu, werden diese für jede Zeilengruppe & Spaltengruppe berechnet. Für das gleiche Datum (Spaltengruppe) erhältst Du also durchaus mehrere verschiedene Werte. Wie willst Du jetzt diese Spaltengruppe sortieren?

    Auch für eine Zeilengruppe kann es in unterschiedlichen Spalten unterschiedliche Ergebnisse für Deine Bewertungsspalte geben. Was soll da sortiert werden? Die mit den meisten FALSE nach hinten?

    Vielleicht hast Du mal ein Bild dazu mit ein paar Beispieldaten.

    Die Filterung sollte über einen Parameter gehen, der aber lediglich die Eingangswerte filtern kann. Eine Filterung über Aggregatsfunktionen ist nicht möglich.

    Alternativ verwende doch ein komplexeres SQL, welches auch per CTE und PIVOT eine Menge an Möglichkeiten bieten kann.


    Einen schönen Tag noch,
    Christoph Muthmann
    Microsoft SQL Server MVP - Blog

    Mittwoch, 9. Oktober 2013 08:06
    Beantworter
  • Wir gehen also davon aus, dass Du pro Datum und Kunde nur eine Zeile hast. Das wäre dann z. B. folgender Input:

    Select 1 as Kunde, '2013-09-16' as Datum, 2000 as Wert, 5000 as AktuelleSumme
    UNION ALL
    Select 1 as Kunde, '2013-09-23' as Datum, 4000 as Wert, 5000 as AktuelleSumme
    UNION ALL
    Select 2 as Kunde, '2013-09-16' as Datum, 2000 as Wert, 3500 as AktuelleSumme
    UNION ALL
    Select 2 as Kunde, '2013-09-23' as Datum, 4000 as Wert, 3500 as AktuelleSumme
    UNION ALL
    Select 3 as Kunde, '2013-09-16' as Datum, 2000 as Wert, 1500 as AktuelleSumme
    UNION ALL
    Select 3 as Kunde, '2013-09-23' as Datum, 4000 as Wert, 1500 as AktuelleSumme

    Jetzt definiere ich für die Spalte Bewertung die interaktive Sortierung.

    Interaktive Sortierung zu Gruppe Kunde

    dann ergibt sich dieser Ausdruck für die Sortierung:

    =IIF(Fields!AktuelleSumme.Value <= Max(Fields!Wert.Value) and not IsNothing(Max(Fields!Wert.Value)), "0", "1") + Cstr(Fields!Kunde.Value)

    Hier konkateniere ich die Bewertung mit der Kundennummer, damit diese auch mit sortiert werden.

    Der Inhalt der Spalte Bewertung ist abweichend davon folgender Ausdruck:

    =IIF(Fields!AktuelleSumme.Value <= Max(Fields!Wert.Value) and not IsNothing(Max(Fields!Wert.Value)), true, false)

    Was damit immer noch nicht geht, ist die Filterung, da hier keine Aggregatsfunktionen erlaubt sind.

    HTH!


    Einen schönen Tag noch,
    Christoph Muthmann
    Microsoft SQL Server MVP - Blog

    Mittwoch, 9. Oktober 2013 11:43
    Beantworter

Alle Antworten

  • Hallo Peter,

    irgendwie verstehe ich das nicht ganz.

    Eine Matrix ist nach Zeilengruppe und Spaltengruppe sortiert. Fügst Du berechnete Spalten hinzu, werden diese für jede Zeilengruppe & Spaltengruppe berechnet. Für das gleiche Datum (Spaltengruppe) erhältst Du also durchaus mehrere verschiedene Werte. Wie willst Du jetzt diese Spaltengruppe sortieren?

    Auch für eine Zeilengruppe kann es in unterschiedlichen Spalten unterschiedliche Ergebnisse für Deine Bewertungsspalte geben. Was soll da sortiert werden? Die mit den meisten FALSE nach hinten?

    Vielleicht hast Du mal ein Bild dazu mit ein paar Beispieldaten.

    Die Filterung sollte über einen Parameter gehen, der aber lediglich die Eingangswerte filtern kann. Eine Filterung über Aggregatsfunktionen ist nicht möglich.

    Alternativ verwende doch ein komplexeres SQL, welches auch per CTE und PIVOT eine Menge an Möglichkeiten bieten kann.


    Einen schönen Tag noch,
    Christoph Muthmann
    Microsoft SQL Server MVP - Blog

    Mittwoch, 9. Oktober 2013 08:06
    Beantworter
  • Hallo Christoph, vielen Dank für die schnelle Antwort. Ja es ist so wie Du schreibst. Für die gleichen Spaltengruppen (in dem Fall Datum) bekomme ich die Werte und auch die Zeilengruppen. Alles Prima.

    Ich kann leider kein Bild hier in der Arbeit einfügen. Ich versuchs besser zu beschreiben:

    Matrixaufbau:

                  Datum1;   Datum2;

                  16.09.13  23.09.13

    Kunde; Summe1; Summe2; MinSumme; MaxSumme; aktuelle Summe; Bewertung

    1           2000        4000        2000           4000            5000                   False

    2           2000        4000        2000           4000            3500                   True

    3           2000        4000        2000           4000            1500                   True


    Meine Bewertung beruht dann darauf das die aktuelle Summe, wenn sie innerhalb des MIN/MAX oder unterhalb des MIN Wertes liegt OK ist also TRUE und wenn sie oberhalb des MAX Wertes liegt, FALSE also nicht OK.

    Die User die das anwenden wollen, wollen aber nach dieser Bewertung sortieren bzw. Filtern.

    Ich fürchte aber so wie Du schreibst dass ich das doch wieder nur über SQL Pivot usw. erledigen kann. Oder Du hast doch noch eine Idee.



    • Bearbeitet Peter Reuel Mittwoch, 9. Oktober 2013 09:37
    Mittwoch, 9. Oktober 2013 09:33
  • Wir gehen also davon aus, dass Du pro Datum und Kunde nur eine Zeile hast. Das wäre dann z. B. folgender Input:

    Select 1 as Kunde, '2013-09-16' as Datum, 2000 as Wert, 5000 as AktuelleSumme
    UNION ALL
    Select 1 as Kunde, '2013-09-23' as Datum, 4000 as Wert, 5000 as AktuelleSumme
    UNION ALL
    Select 2 as Kunde, '2013-09-16' as Datum, 2000 as Wert, 3500 as AktuelleSumme
    UNION ALL
    Select 2 as Kunde, '2013-09-23' as Datum, 4000 as Wert, 3500 as AktuelleSumme
    UNION ALL
    Select 3 as Kunde, '2013-09-16' as Datum, 2000 as Wert, 1500 as AktuelleSumme
    UNION ALL
    Select 3 as Kunde, '2013-09-23' as Datum, 4000 as Wert, 1500 as AktuelleSumme

    Jetzt definiere ich für die Spalte Bewertung die interaktive Sortierung.

    Interaktive Sortierung zu Gruppe Kunde

    dann ergibt sich dieser Ausdruck für die Sortierung:

    =IIF(Fields!AktuelleSumme.Value <= Max(Fields!Wert.Value) and not IsNothing(Max(Fields!Wert.Value)), "0", "1") + Cstr(Fields!Kunde.Value)

    Hier konkateniere ich die Bewertung mit der Kundennummer, damit diese auch mit sortiert werden.

    Der Inhalt der Spalte Bewertung ist abweichend davon folgender Ausdruck:

    =IIF(Fields!AktuelleSumme.Value <= Max(Fields!Wert.Value) and not IsNothing(Max(Fields!Wert.Value)), true, false)

    Was damit immer noch nicht geht, ist die Filterung, da hier keine Aggregatsfunktionen erlaubt sind.

    HTH!


    Einen schönen Tag noch,
    Christoph Muthmann
    Microsoft SQL Server MVP - Blog

    Mittwoch, 9. Oktober 2013 11:43
    Beantworter
  • Hallo Christoph, Hallo Raul sorry wegen meiner späten Antwort, leider hatte ich diesen Lösungsansatz auch schon. Ich will aber nicht nach der Kundennummer sortieren, sondern eben nach dem Bewertungsausdruck und da habe ich scheinbar keine Chance. Ich muss wohl doch die SQL Anweisung verstärken um mir direkte Werte zu erschaffen die ich dann sortieren kann.

    Ich bin gerade noch dabei die Bewertung auf Diagramme zu setzen (mit einer neu hinzugefügten Gruppe) aber auch das wird mir wohl nichts helfen.

    eventuell kann man noch per Code was machen, da bin ich aber totaler neuling.

    vielen dank für deine Hilfe Christoph du hast mir auf alle Fälle gut geholfen. Man kommt bei sowas ja auf die extremsten Ideen und denkt sich...könnte ja vielleicht funktionieren. Wenn man aber sieht das jemand mit mehr Know How als ich ebenfalls diesen Weg einschlägt, ... bin ich zufrieden und brauche nicht weiter meinen abstrakten Lösungen nachhängen :)

    Peter
    • Bearbeitet Peter Reuel Donnerstag, 10. Oktober 2013 11:18
    Donnerstag, 10. Oktober 2013 11:17