{"id":55000263,"date":"2021-02-01T00:00:00","date_gmt":"2021-04-29T18:37:53","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=263"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Reporting_Services_Gruppen_und_Summen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Reporting_Services_Gruppen_und_Summen\/","title":{"rendered":"Reporting Services: Gruppen und Summen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/076e11358dec4c1ebb7de9cac14dd368\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Im Artikel &#8220;Reporting Services: Tabellarische Berichte&#8221; haben wir uns am Beispiel einer Kundenliste bereits angesehen, wie Sie einfache Tabellen erstellen und einfache Features wie sich wiederholende Spalten&uuml;berschriften nutzen. In diesem Artikel wollen wir Kunden, Bestellungen und Bestellpositionen zum Thema machen und dazu wiederum eine Tabelle verwenden. Wegen der verschiedenen Ebenen soll diese allerdings Gruppierungen enthalten, die uns unter anderem Informationen &uuml;ber die Ums&auml;tze je Position, Bestellung und Kunde liefern.<\/b><\/p>\n<h2>Vorbereitungen<\/h2>\n<p>Als Vorbereitung ben&ouml;tigen Sie die Beispieldatenbank <b>AdventureWorks<\/b>. Deren Download und Installation beschreiben wir im Artikel <b>AdventureWorks: Schnelle Beispieldatenbank <\/b>(<b>www.datenbankentwickler.net\/254)<\/b>. <\/p>\n<h2>Ziel<\/h2>\n<p>Wir m&ouml;chten einen Bericht erstellen, der die Bestellpositionen nach Bestellung und Kunde gruppiert und die Gruppensummen anzeigt. Die Detaildatens&auml;tze sollen also jeweils eine Bestellposition enthalten. Die Bestellpositionen einer Bestellung sollen einen Gruppenkopf enthalten, der das Bestelldatum enth&auml;lt und einen Gruppenfu&szlig; mit der Bestellsumme. Au&szlig;erdem wollen wir noch eine weitere Gruppierung hinzuf&uuml;gen, welche die Bestellungen nach Kunde gruppiert. Diese soll im Gruppenkopf einige wesentliche Kundendaten anzeigen wie die Kundennummer, Vor- und Nachname und die Firma. Im Gruppenfu&szlig; dieser Gruppe soll die Summe der Bestellpositionen erscheinen, also der gesamte Umsatz mit diesem Kunden.<\/p>\n<h2>Umsatz je Kunde anzeigen<\/h2>\n<p>Wir n&auml;hern uns dem Schritt f&uuml;r Schritt. Zun&auml;chst m&ouml;chten wir die Umsatzsummen je Kunde in jeweils einer Zeile des Berichts anzeigen. Jede Zeile der Tabelle soll also einen Kunden und die Ums&auml;tze dieses Kunden liefern.<\/p>\n<h2>Gruppierungen per Assistent<\/h2>\n<p>Im ersten Anlauf wollen wir die gruppierte Tabelle per Assistent erstellen. Dazu rufen wir im SQL Server Report Builder mit dem Ribbonbefehl <b>Datei|Neu <\/b>den Dialog <b>Neuer Bericht oder neues Dataset <\/b>auf. Hier w&auml;hlen wir den Eintrag <b>Tabellen- oder Matrix-Assistent<\/b> (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_01\/pic_263_002.png\" alt=\"Starten des Assistenten\" width=\"700\" height=\"174,7724\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Starten des Assistenten<\/span><\/b><\/p>\n<h2>Datenquelle festlegen<\/h2>\n<p>Im nun folgenden Dialog <b>Neue Tabelle oder Matrix <\/b>aktivieren wir die Option <b>Dataset erstellen <\/b>und klicken auf <b>Weiter<\/b>. Damit gelangen wir zum Schritt <b>Verbindung mit einer Datenquelle ausw&auml;hlen<\/b>. Hier klicken Sie auf die Schaltfl&auml;che <b>Neu<\/b>. Im Dialog <b>Datenquelleneigenschaften <\/b>definieren Sie die Datenquelle, die beispielsweise wie in Bild 2 aussieht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_01\/pic_263_003.png\" alt=\"Datenquelle definieren\" width=\"624,6265\" height=\"416,7357\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Datenquelle definieren<\/span><\/b><\/p>\n<h2>Dataset definieren<\/h2>\n<p>Zur&uuml;ck im Assistenten sehen Sie den Schritt Abfrage entwerfen. Hier w&auml;hlen Sie im linken Bereich die kompletten Tabellen oder auch nur einzelne Felder aus, die im Bericht verwendet werden sollen.<\/p>\n<p>Aus Gr&uuml;nden der &Uuml;bersicht sollten Sie nur die Felder w&auml;hlen, die Sie sp&auml;ter auch nutzen. In diesem Fall nutzen wir Felder der Tabellen <b>Customer<\/b>, <b>Product<\/b>, <b>ProductCategory<\/b>, <b>SalesOrderDetail <\/b>und <b>SalesOrderHeader<\/b>. Mit einem Klick auf die Schaltfl&auml;che <b>Abfrage ausf&uuml;hren <\/b>k&ouml;nnen Sie sich die zu erwartenden Daten direkt als Abfrageergebnis anschauen (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_01\/pic_263_001.png\" alt=\"Dataset definieren\" width=\"649,627\" height=\"659,2445\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Dataset definieren<\/span><\/b><\/p>\n<p>Wie Sie Datenquelle und Dataset ohne Assistent anlegen, beschreiben wir im Detail Artikel <b>SQL Server Report Builder <\/b>(<b>www.datenbankentwickler.net\/258)<\/b>.<\/p>\n<h2>Gruppierungen definieren<\/h2>\n<p>Nachdem wir festgelegt haben, welche Daten wir im Bericht sehen wollen, folgt im n&auml;chsten Schritt die Anordnung der Felder. Hier wird es interessant, denn hier finden wir vier Listen vor:<\/p>\n<ul>\n<li><b>Verf&uuml;gbare Felder<\/b>: Alle Felder, die wir im vorherigen Schritt selektiert haben.<\/li>\n<li><b>Spaltengruppen<\/b>: <\/li>\n<li><b>Zeilengruppen<\/b>:<\/li>\n<li><b>Werte<\/b>: <\/li>\n<\/ul>\n<p>Im ersten Beispiel wollen wir nur die Ums&auml;tze nach Kunden ausgeben. Dazu reicht es aus, wenn wir einfach die anzuzeigenden Felder in den Bereich <b>Werte <\/b>ziehen. Wir w&auml;hlen hier die Kundennummer (<b>CustomerID<\/b>), die Firmenbezeichnung (<b>CustomerName<\/b>) und den Umsatz je Bestellposition, also das Feld <b>LineTotal <\/b>der Tabelle <b>SalesOrderDetail<\/b> (siehe Bild 4). F&uuml;r Felder mit numerischen Datentypen stellt der Assistent automatisch die <b>Sum<\/b>-Funktion als Aggregatfunktion ein. F&uuml;r das Feld <b>CustomerID <\/b>wollen wir das jedoch aus nachvollziehbaren Gr&uuml;nden nicht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_01\/pic_263_004.png\" alt=\"Felder f&uuml;r die Tabelle ausw&auml;hlen\" width=\"649,627\" height=\"439,5049\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Felder f&uuml;r die Tabelle ausw&auml;hlen<\/span><\/b><\/p>\n<p>Um dies zu &auml;ndern, klicken Sie einfach auf die Schaltfl&auml;che mit dem nach unten zeigenden Dreieck. Es erscheint eine Liste aller Aggregatfunktionen. Vielleicht suchen Sie wie in Access-Abfragen nach einem Eintrag wie Ausdruck. Diesen gibt es nicht: Damit einfach nur der Wert des Feldes angezeigt wird, klicken Sie einfach auf die Zeile, die mit dem Haken markiert ist. Dann ist keine Aggregatfunktion mehr f&uuml;r dieses Feld festgelegt (siehe Bild 5). Wenn Sie das Textfeld <b>CompanyName <\/b>hinzuf&uuml;gen, wird automatisch keine Aggregatfunktion selektiert. Erst f&uuml;r das Feld <b>LineTotal <\/b>legt der Assistent wieder die Aggregatfunktion <b>Sum <\/b>fest, die in diesem Fall ja auch erw&uuml;nscht ist.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_01\/pic_263_006.png\" alt=\"Einstellen der Aggregatfunktion\" width=\"374,6267\" height=\"361,7086\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Einstellen der Aggregatfunktion<\/span><\/b><\/p>\n<p>Die folgenden beiden Schritte des Assistenten bieten aufgrund der aktuellen Einstellungen keine weiteren Auswahlm&ouml;glichkeiten, sodass wir die Erstellung abschlie&szlig;en k&ouml;nnen. Das Ergebnis der Arbeit mit dem Assistenten sieht wie in Bild 6 aus. Die Spaltenbreiten haben wir nachtr&auml;glich vergr&ouml;&szlig;ert.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_01\/pic_263_005.png\" alt=\"Resultierender Entwurf des Assistenten\" width=\"499,6267\" height=\"235,0689\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Resultierender Entwurf des Assistenten<\/span><\/b><\/p>\n<p>Wenn wir den Bericht nun ausf&uuml;hren und in die <b>Seitenlayout<\/b>-Ansicht wechseln, erhalten wir den Bericht mit dem Ausschnitt aus Bild 7. Die angezeigten Daten entsprechen unseren W&uuml;nschen, allein am Layout k&ouml;nnte man noch arbeiten. Beispielsweise sollen die Spalten&uuml;berschriften deutsche Texte erhalten und der Umsatz soll in der W&auml;hrung <b>EUR <\/b>angezeigt werden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_01\/pic_263_007.png\" alt=\"Seitenlayout-Ansicht des Berichts\" width=\"499,6267\" height=\"248,8101\" \/><\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000263\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000263?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000263\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"9fac6dd15a\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Artikel &#8220;Reporting Services: Tabellarische Beriche&#8221; haben wir uns am Beispiel einer Kundenliste bereits angesehen, wie Sie einfache Tabellen erstellen und einfache Features wie sich wiederholende Spalten&uuml;berschriften nutzen. In diesem Artikel wollen wir Kunden, Bestellungen und Bestellpositionen zum Thema machen und dazu wiederum eine Tabelle verwenden. Wegen der verschiedenen Ebenen soll diese allerdings Gruppierungen enthalten, die uns unter anderem Informationen &uuml;ber die Ums&auml;tze je Position, Bestellung und Kunde liefern.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012021,662021,44000024],"tags":[],"yst_prominent_words":[],"class_list":["post-55000263","post","type-post","status-publish","format-standard","hentry","category-66012021","category-662021","category-Berichte_und_Reporting"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000263"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000263\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000263"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}