{"id":179,"date":"2010-06-20T19:14:05","date_gmt":"2010-06-20T18:14:05","guid":{"rendered":"http:\/\/csopro.de\/biblog\/2010\/06\/berechnete-elemente-in-mdx-abfragen-mit-anwendung-in-reporting-services-2005\/"},"modified":"2010-06-20T19:14:05","modified_gmt":"2010-06-20T18:14:05","slug":"berechnete-elemente-in-mdx-abfragen-mit-anwendung-in-reporting-services-2005","status":"publish","type":"post","link":"https:\/\/www.csopro.de\/biblog\/2010\/06\/berechnete-elemente-in-mdx-abfragen-mit-anwendung-in-reporting-services-2005\/","title":{"rendered":"Berechnete Elemente in MDX-Abfragen mit Anwendung in Reporting Services 2005"},"content":{"rendered":"<p>Lange habe ich gesucht, um ein sinnvolles Beispiel f\u00fcr ein berechnetes Dimensions-Element zu finden (berechnete Measures sind ja st\u00e4ndig zu finden).<\/p>\n<p>Ein Beispiel ist eine Matrix in Reporting Services 2005 (in 2008 ist mit der Tablix ja alles (bzw. vieles) besser).<\/p>\n<p>Ich habe \u00fcber das Problem bereits zwei Artikel auf sqlservercentral.com ver\u00f6ffentlicht (<a href=\"http:\/\/www.sqlservercentral.com\/articles\/Reporting+Services+%28SSRS%29\/63415\/\">Reporting Services: Adding extra columns \/ rows to a matrix<\/a> und <a href=\"http:\/\/www.sqlservercentral.com\/articles\/Linked+Server\/63867\/\">Reporting Services: Read Data from SSAS and SQL Server in One Dataset<\/a>). Heute m\u00f6chte ich das Problem auf eine andere Weise l\u00f6sen.<\/p>\n<p>Nehmen wir an, wir wollen in den Spalten alle Monate sehen und die Summe und einen Planwert und die Differenz zwischen Summe und Planwert. Wenn wir es jetzt schaffen, das ganze in einem MDX-Statement zu laden, so kann auch die Matrix von SQL Server Reporting Services 2005 das anzeigen.<\/p>\n<p>Alle Monate in MDX anzuzeigen, ist einfach. Das Beispiel zeigt je Produkt und Monat den Verkaufswert an (ein konstruiertes, vereinfachtes Beispiel &#8211; ich habe sogar auf die Monatsnamen verzichtet und zeige die Monate im Format JJJJMM an):<\/p>\n<blockquote>\n<p>select non empty [Datum].[Monat].[Monat].members on columns,<br \/>\nnon empty [Produkt].[Produkt].[Produkt].members on rows<br \/>\nfrom [Verkaeufe]<br \/>\nwhere ([Measures].[Verkaufswert], [Datum].[Jahr].&amp;[2010])<\/p>\n<p>liefert:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"Monate mal Produkte\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2010\/06\/monatexprodukte.jpg\" width=\"183\" height=\"82\" \/><\/p>\n<\/blockquote>\n<p>Die Spalte Summe geht auch einfach. Dazu m\u00fcssen wir den Alle-Member der Attribut-Hierarchie Monat anzeigen:<\/p>\n<blockquote>\n<p>select non empty {[Datum].[Monat].[Monat].members, [Datum].[Monat].[All]} on columns,<br \/>\nnon empty [Produkt].[Produkt].[Produkt].members on rows<br \/>\nfrom [Verkaeufe]<br \/>\nwhere ([Measures].[Verkaufswert], [Datum].[Jahr].&amp;[2010])<\/p>\n<p>liefert:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"Monate inkl. Alle Mal Produkt\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2010\/06\/monateallxprodukte.jpg\" width=\"211\" height=\"80\" \/><\/p>\n<\/blockquote>\n<p>F\u00fcr den Planwert konstruieren wir ein einfache Element der Attribut-Hierarchie Monat, das konstant 10 ist:<\/p>\n<blockquote>\n<p>with member [Datum].[Monat].[Plan] as 10<br \/>\nselect non empty {[Datum].[Monat].[Monat].members, [Datum].[Monat].[All], [Datum].[Monat].[Plan]} on columns,<br \/>\nnon empty [Produkt].[Produkt].[Produkt].members on rows<br \/>\nfrom [Verkaeufe]<br \/>\nwhere ([Measures].[Verkaufswert], [Datum].[Jahr].&amp;[2010])<\/p>\n<p>liefert:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"Monate inkl. Alle und Plan mal Produkte\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2010\/06\/monatplanxprodukte.jpg\" width=\"269\" height=\"102\" \/><\/p>\n<\/blockquote>\n<p>(Die unsch\u00f6ne unbekannt-Zeile kann man nat\u00fcrlich leicht loswerden, aber das ist hier nicht unser Thema)<\/p>\n<p>Das war noch eine leichte \u00dcbung. Aber in diesen Berechnungen k\u00f6nnen wir auch rechnen, wie in jedem MDX. Somit k\u00f6nnen wir einfach die Differenz anzeigen:<\/p>\n<blockquote>\n<p>with member [Datum].[Monat].[Plan] as 10<br \/>\nmember [Datum].[Monat].[Differenz] as [Datum].[Monat].[All] &#8211; [Datum].[Monat].[Plan]<br \/>\nselect non empty {[Datum].[Monat].[Monat].members, [Datum].[Monat].[All], [Datum].[Monat].[Plan], [Datum].[Monat].[Differenz]} on columns,<br \/>\nnon empty [Produkt].[Produkt].[Produkt].members on rows<br \/>\nfrom [Verkaeufe]<br \/>\nwhere ([Measures].[Verkaufswert], [Datum].[Jahr].&amp;[2010])<\/p>\n<p>liefert:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"Monate inkl. Alle, Plan, Differenz Mal Produkte\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2010\/06\/monatediffxprodukte.jpg\" width=\"329\" height=\"100\" \/><\/p>\n<\/blockquote>\n<p>Das finde ich ein sehr sch\u00f6nes Beispiel, wie man berechnete Dimensions-Elemente einsetzt.<\/p>\n<p>Um das ganze in Reporting Services zu verwenden, muss man alles nat\u00fcrlich auf die Zeilen bringen und nur das Measure in den Spalten haben &#8211; aber das ist trivial.<\/p>\n<p>Au\u00dferdem muss man in der Matrix noch die Sortierung l\u00f6sen, aber \u00fcber iif-Berechnungen in dem Sortierungsfeld ist das auch leicht zu l\u00f6sen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lange habe ich gesucht, um ein sinnvolles Beispiel f\u00fcr ein berechnetes Dimensions-Element zu finden (berechnete Measures sind ja st\u00e4ndig zu finden). Ein Beispiel ist eine Matrix in Reporting Services 2005 (in 2008 ist mit der Tablix ja alles (bzw. vieles) besser). Ich habe \u00fcber das Problem bereits zwei Artikel auf sqlservercentral.com ver\u00f6ffentlicht (Reporting Services: Adding &hellip; <a href=\"https:\/\/www.csopro.de\/biblog\/2010\/06\/berechnete-elemente-in-mdx-abfragen-mit-anwendung-in-reporting-services-2005\/\" class=\"more-link\"><span class=\"screen-reader-text\">Berechnete Elemente in MDX-Abfragen mit Anwendung in Reporting Services 2005<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,11],"tags":[],"class_list":["post-179","post","type-post","status-publish","format-standard","hentry","category-analysisservices","category-reportingservices"],"_links":{"self":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts\/179","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/comments?post=179"}],"version-history":[{"count":0,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts\/179\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/media?parent=179"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/categories?post=179"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/tags?post=179"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}