[gelöst]Report -Zeilenausblenden bei Count unter Schwellwert

28. Januar 2016 16:44

Hallo,

folgendes Szenario bzgl. einer Report-Erstellung:

In einer Kunden-Datenbank liegen div. Datensätze, unter anderem von wem der Kunde ggf. geworben wurde.
Nun ist gefordert, nicht nur zu sehen, wieviel Neukunden jemand geworben hat, sondern auch via Request-Page nur die Werber/Promoter(ebenfalls Kunden) anzuzeigen, die eine Mindestanzahl (z.B. 5,25,100) Kunden geworben haben.
Mittels Count(Name) bzw. =CountRows(„PromoterName“) kann ich mir im Layout-Designer die Summe/Geworbene Neukunden pro Kunde angeben lassen.
In den Tablix-Properties kann ich auf die Kontakte filtern, deren PromoterName ungleich „kein Werber“ ist.

Ich kann aber leider nicht nach [Count(Name)]>5 filtern lassen, da mir ansonsten NAV 2015 folgende Fehlermeldung ausgibt:

Error while validating RDL content: A FilterExpression for the tablix ‚Tablix1‘ includes an aggregate function. Aggregate functions cannot be used in dataset filters or dataregion filters.


Kann ich diesen Umstand irgendwie umschiffen, wenn ja, wie?

Mein Problem erscheint mir zu alltäglich, um mir vorzustellen, dass das System das generell nicht erlaubt (z.B. anderes Szenario: Kunde kauft Artikel, nur Kunden anzeigen, die mind. 5 Artikel gekauft haben).


C/AL-Code, Variablen, Report Dataset Designer
http://www.bilder-upload.eu/show.php?file=15c67e-1453993220.png

Layout-Designer
http://www.bilder-upload.eu/show.php?file=6a87d0-1453993249.png

Report-Vorschau
http://www.bilder-upload.eu/show.php?file=76b6f4-1453993266.png

Edit 1: Bilder intern hochgeladen
Edit 2, 03.02.2016: Betreff geändert von "Report - filter on aggregate function" zu "Report - Ergebnisse ausblenden bei Count bzw. Summenbildung unter Schwellwert"
Edit 3, 03.02.2016: Betreff geändert von "Report - Ergebnisse ausblenden bei Count bzw. Summenbildung u" zu "Report - Ergebnisse ausblenden bei Count unter Schwellwert"
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von NAV2015 am 9. Februar 2016 10:24, insgesamt 5-mal geändert.

Re: Report - filter on aggregate function

28. Januar 2016 17:12

Herzlich Willkommen im Forum!

Bitte verwende zum Zeigen von Screenshots keine externen Bildhoster.
Lade bitte die Bilddatei(en) mittels der Funktion "Dateianhang hochladen" beim Editieren des Beitrags hoch.

Re: Report - filter on aggregate function

28. Januar 2016 17:39

Die Fehlermeldung kommt nicht aus NAV, sondern vom SQL-Server, das sind diese Funktionen.
Aggregate Functions Reference (Report Builder and SSRS)

Innerhalb von NAV könnte man das entweder über ein zusätzliches Count-Flowfield in der Tabelle Contact mit den benötigten Kriterien filtern, oder alternativ im Report eine Funktion einbauen, die den Count in C/AL macht und für die Kontakte unterhalb des Schwellenwerts ein CurrReport.SKIP macht.

Re: Report - filter on aggregate function

29. Januar 2016 10:24

Vielen Dank für die Anregung,

bzgl "alternativ im Report eine Funktion einbauen, die den Count in C/AL macht" ist jedoch mein Problem, dass er die Kontakte der Reihenfolge nach ContactNo durchgeht, und schaut, ob ein Promoter vorhanden ist - (siehe Bild 1; zuerst liest er Kontakt first ein, dann Kontakt second, dann Kontakt#3).

Ich stehe wohl auf dem Schlauch, wie ich ihn da in C/AL via Code den Count machen kann.

Re: Report - filter on aggregate function

29. Januar 2016 11:02

Ein Flowfield kann man nicht nur auf andere Tabellen, sondern auch auf die Ausgangstabelle legen, also einen Count auf Datensätze der eigenen Tabelle machen, die bestimmten Kriterien entsprechen.

Wenn ich die Struktur richtig verstehe,sind die Promoter auch Kontakte. Bei den Nicht-Promotern (=Kunden) in den Kontakten ist die zugehörige Promoternummer eingetragen.
Wenn man ein Integer-Flowfield in die Kontaktabelle einbaut, wo alle Kunden-Datensätze gegriffen werden, also wo die Promoternummer (als Primärschlüssel) der Promoternummer beim Kunden entspricht, dann zeigt das Flowfield beim Promoter die Anzahl der zugehörigen Kunden an.
Flowfieldformel wäre dann:
Code:
Count(Contact WHERE (Promoter=FIELD(No.)))

Darauf kann man dann im Report filtern.

Re: Report - filter on aggregate function

2. Februar 2016 15:54

Es ist mir nicht gestattet, in anderen Tabellen Felder hinzuzufügen.

Ich konnte für den Minimalfall nun folgende Lösung ausfindig machen:
in den Textbox-Properties unter "Hidden" folgende Zeile hinzufügen
=IIF(CountRows("PromoterName")>=2,false,true)

Bzw. die Ziffer durch eine Variable, welche in der RequestPage abgefragt wird, ersetzen.


Dummerweise scheint hidden die Elemente nur unsichtbar zu machen, und nicht "gar nicht anzuzeigen" - was zu denkbar hässlichen leeren Feldern führt. Gibt es hierfür eine elegantere Lösung?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Report - filter on aggregate function

3. Februar 2016 15:55

NAV2015 hat geschrieben:Es ist mir nicht gestattet, in anderen Tabellen Felder hinzuzufügen.

Dann bleibt aber noch die andere Variante mit der Funktion im Report.

Zum Einsatz von Filterbefehlen in C/AL haben wir hier einen FAQ-Artikel. In deinem Fall reicht ein COUNT nach der Filterung.

Re: Report -Ergebnisse ausblenden bei Count unter Schwellwer

5. Februar 2016 14:30

ich bitte um Verzeihung, wenn ich mich zu trottelig anstellen sollte, aber die ganze Thematik ist ziemlich neu für mich.

Mir ist nicht ganz klar, worauf ich da filtern soll, wie also mein Setfilter aussieht - meine Tabelle sieht etwa so aus

No..........10.....12.....14.....27.....34.....56......35.....32.....78 (entspricht Kundennummer)
Promoter..27.....27.....56.....56.............27..............56.....56 (entspricht "wurde geworben von Kunde X")

Die Kontaktnummer 27 hat also 3 geworbene Neukunden (10,12,56).
Die Kontaktnummer 56 hat 4 geworbene Neukunden (14,27,32,78).
Manche Kontakte wurden von niemandem geworben.


Ich kann ja nicht einfach auf einen bestimmten Bereich filtern (z.b. Zahlen zwischen 10 und 20) da ich ja zu den Kontaktnummern Promoter-Nummern habe, die wiederum Kontaktnummern sind.

Und wenn ich den Filter habe, wo ich den unterbringe - wahrscheinlich OnPreDataItem, da er es ja für jeden Kontakt neu durchsuchen muss, oder? Das wäre bestimmt eine ziemlich lange Datenbankabfrage, da er ja für jeden Kontakt alle Kontakte mit Promoter-Nummern durchgucken muss.

Über eine Alternativ-Lösung im Layout (Report Designer) über hidden/visibility (nur ohne leere Plätze) wäre ich auch dankbar.

Re: Report -Ergebnisse ausblenden bei Count unter Schwellwer

7. Februar 2016 10:39

Du kannst auch in den Eigenschaften der Tablixzeile eine visible expression setzten. Alternativ kannst du in den Gruppeneigenschaften auch Filter hinterlegen.

Re: [gelöst]Report -Zeilenausblenden bei Count unter Schwell

9. Februar 2016 10:30

Vielen Dank für die ganze gemachte Mühe. Ich konnte das Problem nun lösen.

Der Weg ging für mich über die row visibility property

Ich wusste nicht, dass es einen Unterschied macht, ob ich auf row visibility gehe oder auf die Zeile und dann unter tablix properties die visibility-Eigenschaft setze.



Picture mirror: http://abload.de/img/solution_hiddendeslj.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.