Diese Schritt für Schritt Anleitung zeigt Ihnen, wie Sie Geodaten in SSRS nutzen können. Angefangen vom Suchen der benötigten Daten und dem Einlesen in eine Datenbank bis zur Übertragung und Nutzung in SSRS. Ziel ist die Erstellung eines Reports mit einer Karte, die unsere Geodaten integriert.
Schritt 1 Vorbereitungen
Zuerst sollte im SQL Server eine Datenbank angelegt werden, in der die Geodaten gespeichert werden können.
.Für unser Beispiel legen wir dazu die Datenbank [GeoData] an.
Schritt 2 Geodaten suchen
Wenn man nach geeigneten Geodaten sucht, stößt man schnell an gewisse Grenzen. Einerseits sind die zur Verfügung stehenden Daten zu unspezifisch (z.B. nur auf Bundeslandebene) oder lassen sich nur beschränkt nutzen, weil sie unter einer freien Lizenz bereitgestellt werden (z.B. nicht für kommerzielle Zwecke). Ansonsten kommt man sehr schnell an den Punkt, an dem man für passende Geodaten zahlen muss. Einige gute Daten lassen sich hier finden:
- http://www.diva-gis.org/gData (kostenlos, für Deutschland auf Ebene der Landkreise und kreisfreien Städte)
- http://www.geopostcodes.com/ (kommerziell aber umfangreich)
- http://arnulf.us/PLZ#Download (kostenlos, Deutschland nach Postleitzahlen, auch über Ort identifizierbar)
- http://www.suche-postleitzahl.org/downloads (kostenlos, Deutschland nach Postleitzahlen etwas genauer, jedoch ohne Ort)
Ziel sollte sein, Geodaten in Form von Shapes zu erhalten, da sich diese ohne größere Manipulationen direkt verarbeiten lassen. Mit diesen Daten (Shapefiles) können grundlegend Regionen auf eine Karte gezeichnet werden.
Schritt 3 Adressen in Geodaten (Breiten- und Längengrade) umwandeln
In unserem Beispiel sollen nun zusätzlich zu Shapes noch einzelne Punkte (z.B. Verkaufsstellen) markiert werden. Hierzu empfiehlt sich z.B. die Seite http://www.findlatitudeandlongitude.com/batch-geocode/.Hier können Adressen zu Breitengrad (Latitude) und Längengrad (Longitude) umgerechnet werden. Dazu sollten der Straßenname, Hausnummer, Postleitzahl und Ort (eventuell auch Land) angegeben werden (1). Die Reihenfolge spielt keine Rolle und es sollte als Trennzeichen nur ein Leerzeichen gesetzt werden. Als delimiter sollte „pipe“ (|) und als format „° dec“ ausgewählt werden (2), da damit die wenigsten Probleme auftreten sollten. Für den Output sollten die Häkchen bei address in, latitude und longitude aktiviert sein(3). Um zu prüfen, welche Adresse wirklich benutzt wurde kann zusätzlich das Häkchen bei address out gesetzt werden. Das Ergebnis (4) kann in ein Textfile kopiert werden, welches als CSV-Datei abgespeichert wird.
Schritt 4 Geodaten in den SQL-Server einspielen
Shapefiles
Um Geodaten in Form von Shapefiles in den SQL Server zu laden, bietet sich das kostenlose Tool Shape2SQL an welches als Teil der SQLSpatialTools hier heruntergeladen werden kann: http://www.sharpgis.net/page/SQL-Server-2008-Spatial-Tools
Um folgendem Fehler bei Shape2SQL vorzubeugen,
kann es von Vorteil sein, in den Ordner von Shape2SQL ebenfalls eine oder mehrere DLLs zu laden. Es handelt sich hierbei um:
- SqlServerSpatial.dll
- SqlServerSpatial110.dll (ab SQL Server Version 2012)
- SqlServerSpatial120.dll (ab SQL Server Version 2014)
Diese können von C:\Windows\system32 kopiert werden. Falls nur eine der unteren Beiden zur Verfügung steht, sollte diese in „SqlServerSpatial.dll“ umbenannt werden, damit Shape2SQL diese nutzen kann. Das Programm sollte danach neugestartet werden
Wenn nun ein Shapefile zur Verfügung steht, kann dieses mit Hilfe von Shape2SQL in den SQL Server übertragen werden. Dazu wird dieses als Eingabe ausgewählt (1). Daraufhin kann man den Server und die Datenbank auswählen, wo die Daten hineingeschrieben werden sollen (2). Die Option „Create Spatial Index“ muss unter Umständen deaktiviert werden, da dies ansonsten zu einem unerwarteten Abbruch des Uploads ohne Fehlermeldung führen kann. Zunächst sollte jedoch die Option mit Anlegen des Indexes versucht werden (3). Es kann der Tabellenname angegeben werden, sowie die Attribute ausgewählt werden (4), die mit in die Tabelle übernommen werden sollten. Ist hier eine ID vorhanden sollte diese abgewählt werden, da es ansonsten zu einem Fehler kommt, da der SQL Server ebenfalls eine ID anlegt. Sind alle Einstellungen getroffen können die Daten in die Datenbank geladen werden.
Es kann nun im SQL Server Management Studio überprüft werden, ob die Daten korrekt übertragen wurden. Dazu gehört bei einer Abfrage auf die neue Tabelle (1), neben den normalen Ergebnissen auch der Tab „Spatial results“ (2). Dort ist eine Vorschau der Vektorgrafiken zu sehen (3). Zu beachten ist dabei, dass im Management Studio nur maximal 5000 Grafiken auf einmal angezeigt werden können und somit bei größeren Shapefiles mit vielen Vektorgrafiken nur ein Ausschnitt angezeigt wird.
Adressdaten und Koordinaten
Um die Adressdaten aus der CSV im SQL Server einlesen zu können, sollte zunächst eine Tabelle mit den entsprechenden Spalten angelegt werden. Als Format für Latitude und Longitude bietet sich decimal(10,6) an. Ist die Tabelle angelegt, können die Daten mit dem folgenden SQL-Statement in die Tabelle geladen werden:
BULK INSERT [GeoData].[dbo].[CSV_Test] FROM 'C:\CSVData\Neu.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = '|', --CSV field delimiter ROWTERMINATOR = '\n' , --Use to shift the control to next row Codepage = 'ACP', TABLOCK )
Zu beachten ist vor allem der Fieldterminator, der gleich dem delimiter sein sollte und die Codepage, damit auch Umlaute verarbeitet werden können. Wurden alle Zeilen geladen, kann in der Tabelle eine neue Spalte vom Typ geometry angelegt werden:
ALTER TABLE [GeoData].[dbo].[CSV_Test] ADD PunktShape geometry Null
Nun kann die neue Spalte mit Werten gefüllt werden. Dazu wird aus Latitude und Longitude und dem Koordinatensystem ein Punktshape gebildet. Vorsicht ist geboten bei der Reihenfolge. Hier werden Longitude und Latitude im Gegensatz zu der CVS-Datei vertauscht:
Update [GeoData].[dbo].[CSV_Test] SET PunktShape = geometry:: Point(Longitude, Latitude, 4326)
Schritt 5 SSRS-Reports erstellen
Zum Ende kann nun in Visual Studio ein Reporting Services Projekt mit einem Report erstellt werden. Als Datenquelle dient die Datenbank, mit den Geodaten aus den Shapefiles und den Adressdaten. Im Report Wizard kann direkt ein Dataset über eine Query angelegt werden. Hier wird unsere gerade erstellte Quelle genutzt um eine Tabelle mit unseren Geodaten in ein Dataset zu verpacken. Zusätzlich können im Report Data Fenster weitere Datasets angelegt werden. Die einfachste Form für ein Dataset ist folgende:
SELECT * FROM [GeoData].[dbo].[post_pl]
Da jedoch teilweise sehr viele Shapes zur Verfügung stehen, ist eine Eingrenzung ratsam, zB durch Bestimmen eines PLZ Bereiches:
Select * FROM [GeoData].[dbo].[post_pl] WHERE ( PLZ99 > 52061) AND ( PLZ99 < 52081)
Für Datasets der Shapefiles der Regionen ist die wichtige Spalte mit den Vektordaten „geom“. Für die Punktshapes ist es die angelegte Spalte (in diesem Beispiel: PunktShape). Wenn der Report, die Datenquelle und die Datasets angelegt sind, kann aus der Toolbox eine Map in den Report gezogen werden.
Als Quelle kann die Option „SQL Server spatial query“ und im darauffolgenden Fenster eines der eben erstellten Datasets ausgewählt werden. Im Folgenden, unten dargestellten Fenster sollten die Angaben für Spatial field (geom/PunktShape) und Layer type (Polygon/Point) bereits automatisch korrekt gesetzt sein. Es sollte nun eine Vorschau der Karte zu sehen sein, welche ebenso wie die Darstellung im SQL Server Management Studio nur eingeschränkt alle Vektorgrafiken darstellt (1). Da sich die Geodaten im Normalfall nicht ändern sollten, können die Daten in den Report integriert werden (2). Dies sorgt für ein schnelleres Rendering der Grafiken, erhöht jedoch natürlich auch den Speicherplatzbedarf des RDL. Die letzte Option „Add a Bing Maps layer“ (3) zeigt nun, ob unsere Karte wirklich mit den richtigen Koordinaten verankert ist. Ist diese Option ausgewählt, sollte um die eigene Karte herum eine Bing Map erscheinen.
Falls die Shapes sich nicht mit der Bing Map verknüpfen lassen, liegt das eventuell den Einstellungen der Karte. Mit einem Rechtsklick auf die Karte lässt sich das Kontextmenü öffnen und die Option „Viewport Properties“ auswählen (1). Im Tab „General“ (2) im folgenden Fenster sollte hier nun die Option „Geographic (Longitude, Latitude)“ (3) und als Projection „Mercator“ (4) ausgewählt werden. Nun sollte die Karte sich mit einer Bing Map verbinden lassen.
Da es nicht immer unbedingt von Interesse ist, die Regionen als komplette Fläche zu sehen, sondern nur als Umrandung bieten sich bei der Erstellung des Datasets ein paar weitere Optionen bei der Abfrage an. Um nur die Ränder der Shapefiles zu betrachten, sollte folgende Abfrage genutzt werden:
Select geom.STBoundary() FROM [GeoData].[dbo].[post_pl] WHERE (PLZ99 > 52061) AND (PLZ99 < 52081)
Zu beachten ist bei der weiteren Nutzung innerhalb einer Karte in SSRS, müssen diese nun als Line betrachtet werden und nicht als Polygon. Sollen mehrere Gebiete zusammengefasst warden nutzt man ein UnionAggregate. Im folgenden Beispiel werden mehrere Shapes anhand ihrer Postleitzahlen zusammengefügt:
SELECT geometry::UnionAggregate(geom).STBoundary() FROM [GeoData].[dbo].[post_pl] WHERE (PLZ99 > 52061) AND (PLZ99 < 52081)
Eine weitere Möglichkeit bietet z.B die Erfassung mehrerer zusammengefasster Shapes über ein Union All:
SELECT geometry::UnionAggregate(geom).STBoundary() FROM [GeoData].[dbo].[post_pl] WHERE (PLZ99 > 52061) AND (PLZ99 < 52073) Union All SELECT geometry::UnionAggregate(geom).STBoundary() FROM [GeoData].[dbo].[post_pl] WHERE (PLZ99 > 52073) AND (PLZ99 < 52081)
Am besten testet man vorher die Abfragen im SQL Management Studio, um Fehlern zuvor zu kommen. Unter anderem kann es passieren, dass folgender Fehler auftritt:
A .NET Framework error occurred during execution of user-defined routine or aggregate „geometry“:
System.ArgumentException: 24144: This operation cannot be completed because the instance is not valid.
Use MakeValid to convert the instance to a valid instance.
Note that MakeValid may cause the points of a geometry instance to shift slightly.
Dieser Fehler tritt auf, wenn die Shapedateien sich überlappen können und mit STBoundary Linien gezeichnet werden sollen. Der Fehler tritt jedoch nur auf, wenn man die Spatial results betrachtet. Es kann vorkommen, dass dieser Fehler automatisch bereinigt wird, dadurch werden jedoch einige Polygone entfernt. Wenn der Fehler dennoch auftritt, kann mit Hilfe der MakeValid() Funktion gegengesteuert werden:
Select geom.MakeValid().STBoundary() FROM [GeoData].[dbo].[post_pl] WHERE (PLZ99 > 52061) AND (PLZ99 < 52081)
Die MakeValid() Funktion kann dazu führen, dass einige Shapefiles verrutschen, von daher ist diese mit Vorsicht zu genießen.
Datenpunkte
Nun ist es noch möglich Datenpunkte zur Darstellung hinzuzufügen. Zunächst werden die dazugehörigen Daten in einem DataSet benötigt. Danach wird in den Map Layers eine neue „Point Layer“ hinzugefügt (1). Über das Kontextmenü des neuen Layers werden nun die „Layer Data“ eingestellt. Im Tab „General“ (2) über die Option „Spatial field in a dataset“ (3) kann das erstellte DataSet mit den Datenpunkten sowie die Spalte mit den Geodaten ausgewählt werden (4).
Nun sollten auch die Punkte auf der Karte sichtbar sein. In den folgenden Abschnitten werden Einstellungen zu den Shapes und Diagrammen behandelt. Viele Einstellungen der Shapes sind vergleichbar zu den Punkten. Daher wird auf die Datenpunkte nicht weiter eingegangen.
Labeltext & Tooltip & Position des Labels
Die weiteren Spalten, die in einem DataSet zur Verfügung stehen, können z. B. zur Beschriftung oder als Tooltip für die Shapes genutzt werden. Dazu ist in den Map Layers das Kontextmenü des Polygon Layers (Erster Klick Map-Objekt auswählen, Zweiter Klick Map Layers anzeigen) zu öffnen und die Option Polygon Properties auszuwählen. Im Tab „General“ (1) können nun die Attribute wie z.B der Ortsname oder die Postleitzahl als Label (2) ausgewählt werden. Als Tooltip(3) lassen sich weitere Informationen unterbringen. So kann der Tooltip die Postleitzahl und den Umsatz des Gebietes angeben. Dazu wird folgende Expression genutzt:
="PLZ: " & CStr(Fields!PLZ99.Value) & VbCrLf & "Umsatz: " & CStr(Format(Fields!Umsatz.Value, "C"))
Die Cstr-Funktion wandelt die Daten in ein String um. Der Befehl „VbCrLf“ ist ein Zeilenumbruch. Die Format-Funktion kann ein vorgegebenes Format auf den Wert anwenden. Das „C“ steht für Curreny und sorgt für eine Darstellung von Zahlen als Währung. Andere vorgefertigte Formate finden sich hier: https://msdn.microsoft.com/de-de/library/dwhawy9k.aspx. Damit auch die richtige Währung angezeigt wird, muss noch die Spracheinstellung definiert werden. Dazu muss im Visual Studio in der Design-Ansicht außerhalb des Berichts geklickt werden, um die erweiterten Einstellungen des Berichts aufzurufen. Dort ist die Language-Option für deutsche Spracheinstellungen auf „de-DE“ zu setzen.
Aufgrund der unterschiedlichen Formen der Shapes kann es bei der Platzierung des Labels zu Schwierigkeiten kommen. Standardmäßig wird das Label in der Mitte des Shapes platziert, jedoch wird bei dieser Einstellung das Shape als Rechteck wahrgenommen. Um für Ausnahmefälle eine Regel einzubauen, muss abermals das Polygon Layer ausgewählt sein. Nun kann im Propertiesfenster im Menü „Appearance“ im Untermenü „PolygonTemplate“ die Option „LabelPlacement“ geändert werden. Für Ausnahmefälle bietet sich hier eine Expression mit einer Unterscheidung an: =iif(Fields!PLZ99.Value=„52074“, „MiddleRight“,„MiddleCenter“)
Einfärbung der Shapes
Auf Wunsch können die einzelnen Shapes auch eingefärbt werden. Hier bieten sich auch wieder verschiedene Möglichkeiten. Im Kontextmenü des Polygon Layers befindet sich die Option „Polygon Color Rule“, welche die für die Einfärbung notwendigen Einstellungen bietet. Im Tab „General“ (1) lassen sich zunächst die Farbeinstellungen vornehmen. In diesem Beispiel wird die Option „Visualize data by using color ranges“ (2) genutzt. Diese ermöglicht anhand eines Datenfeldes (3) aus dem DataSet des Polygon Layers, die Shapes auf Basis von drei Grundfarben (4) zu unterscheiden. Im Tab „Distribution“ (5) lässt sich die Anzahl der Teilbereiche (Number of Subranges) verändern. Sind hier mehr als 3 angegeben, werden automatisch Farbübergänge zwischen den drei Grundfarben erzeugt. Im Tab „Legend“ (6) kann die Anzeige der Legende genauer spezifiziert werden. Die Farbauswahl dient hier nur zu Anschauungszwecken und sollte in eher passivere Farbtöne (z. B. unterschiedliche Grautöne) geändert werden.
Parameter
Mit Hilfe von Berichtsparametern lassen sich die Inhalte eines Berichtes steuern und eine Verknüpfung zu anderen Berichten oder Webseiten herstellen. In den nächsten Schritten soll gezeigt werden, wie ein Parameter angelegt wird und wie anhand dieses Parameters Diagramme dynamisch im Bericht verändert werden können.
In den Fenster „Report Data“ befindet sich ein Ordner „Parameters“, der alle erstellten Parameter enthält. Über ein Rechtsklick kann die Option „Add Parameter“ ausgewählt werden. Im Tab „General“ (1) kann der Name, die Anzeige (Prompt), der Datentyp und die Sichtbarkeit eingestellt werden. Für den vorliegenden Anwendungsfall wird die Option „Allow multiple values“ benötigt. Der Parameter sollte darüber hinaus sichtbar sein (2). Im Tab „Available Values“ (3) können entweder manuell Werte vorgegeben werden (Specify values) oder anhand einer Abfrage die Werte eingeschränkt werden (Get values from a query). Für die zweite Möglichkeit muss das DataSet, die eigentliche Wertespalte und eine Labelspalte angegeben werden (4). Ähnlich sieht dies im Tab „Default Values“ (5) aus. Einziger Unterschied hierbei ist, dass kein Labelfeld angegeben werden muss.
Diagramme
Zur weiteren Darstellung von Kennzahlen bieten sich neben der Karte auch Diagramme an. In diesem Beispiel werden die Umsätze in zwei unterschiedlichen Balkendiagrammen dargestellt. Zum einen sollen die Umsätze der Postleitzahlregionen, die jeweils einem Shape entsprechen dargestellt werden und zum anderen sollen die einzelnen Verkaufsstellen innerhalb der Postleitzahlregionen mit ihren Umsätzen ausgewiesen werden.
Hierzu wird zunächst ein „Chart“ aus der Toolbox in den Report gezogen. Daraufhin kann der Diagrammtyp (Balkendiagramm) gewählt werden. Mit einem Doppelklick in das Diagramm öffnet sich daneben das Fenster „Chart Data“. Im Bereich „Values“ kann über das Plus eine Kennzahl aus einem DataSet ausgewählt werden, welche visualisiert werden soll. Im Bereich „Category Groups“ werden die Dimensionen ausgewählt, in denen die Kennzahl unterschieden werden soll. In unserem Beispiel ist in beiden Diagrammen die Kennzahl der Umsatz und die Kategorie einmal die Postleitzahl und einmal der Verkaufsort. Nun können die Diagramme noch vereinfacht und übersichtlicher gestaltet werden. Dazu können als Erstes die x-Achse, die Legende und die Gitterlinien entfernt werden. Im Menü „Vertical Axis Properties“ lässt sich unter „Axis Options“ das Intervall auf „1“ stellen, um alle Labels anzuzeigen und die Markierungsstriche der Balken lassen sich im Tab „Major Tick Marks“ verstecken. Mit einem Rechtsklick auf die Balken kann die Option „Show Data Labels“ angewählt werden, um die Werte der einzelnen Balken anzuzeigen. Damit die Werte auch immer rechts von den Balken angezeigt werden, kann im Properties-Fenster bei ausgewähltem Chart Area die Option „ValueAxes“ gewählt werden. Im folgenden Editor können im Tab „Primary“ unter dem Menüpunkt „Scale“ das Minimum und Maximum verändert werden. Diese geben an wo die Balken beginnen und enden. Für das Minimum sollte eine „0“ eingetragen werden. Für das Maximum wird eine Expression genutzt:
=Max(Fields!Umsatz.Value)+Max(Fields!Umsatz.Value)*0.15
Der zweite Teil der Expression sorgt dafür, dass die Balken auf eine maximale Länge skaliert werden die größer ist als der größte Umsatzwert. Damit wird für die Datenwerte rechts neben den Balken Platz geschaffen, sodass kein wert abgeschnitten wird. Falls dies doch einmal der Fall sein sollte, kann die 0.15 erhöht werden. Nun kann noch in den „Series Properties“ (Eigenschaften der Balken) im Tab „Fill“ die Farbe der Balken (z. B. auf schwarz) geändert werden. Zu beachten ist, dass das Diagramm mit den Verkaufsstellen noch sehr unübersichtlich wirkt. Dies wird sich in den nächsten Schritten ändern.
Verknüpfen der Diagramme mit Parametern
Um Diagramme mit Parametern zu verknüpfen gibt es verschiedene Möglichkeiten. In diesem Beispiel werden zwei Methoden gezeigt. Für das erste Diagramm (Umsatz nach Postleitzahl) werden die Balkenfarben genutzt um anzuzeigen, welcher Postleitzahlenbereich zurzeit genauer betrachtet wird. Beim zweiten Diagramm werden die Daten gefiltert, die angezeigt werden, d. h. es werden nur Verkaufsstellen angezeigt, die innerhalb der ausgewählten Postleitzahlen (=Parameter) liegen.
Für das erste Diagramm werden wieder die Balkeneigenschaften im Tab „Fill“ geändert. Hierzu wird neben der Farbe die Expression gewählt:
=iif(Join(Parameters!PLZ.Value, „,“).Contains(Fields!PLZ_String.Value),„Black“,„LightGrey“)
Die Expression schreibt zunächst alle ausgewählten Parameterwerte in einen String. Dann wird überprüft, welche Postleitzahlen in diesem String enthalten sind. Falls eine Postleitzahl vorhanden ist, wird der Balken schwarz gefärbt ansonsten grau.
Im zweiten Diagramm wird in den „Chart Properties“ im Tab „Filters“ ein Filter angelegt. Hierzu kann als Expression der Spaltenwert, der dem Parameter entspricht ausgewählt werden. Als Operator sollte „In“ und als Value der Parameter selbst gewählt werden. Nun sind die Diagramme mit dem Parameter verknüpft. Das folgende Beispiel zeigt die Diagramme bei der Auswahl von zwei Postleitzahlen:
Dynamischer/Klickbarer Report
Damit nun die Parameter nicht nur mehr per Hand eingegeben werden müssen, sondern man direkt über die Report-Elemente weiter navigieren kann, müssen Shapes und die Balken eine Aktion ausführen, sobald sie angeklickt werden. Für die Shapes findet sich die Einstellungen in den „Polygon Properties“, für die Balken in den „Series Properties“. Unter dem Tab „Action“ (1) lassen sich verschiedene Möglichkeiten realisieren. Die Option „Go to report“ kann dazu genutzt werden, um auf einen anderen oder auch den gleichen Report zu verweisen (2). Zusätzlich können noch Parameter für diesen Report übergeben werden (3). Es wird der Parametername angegeben und der Übergabewert festgelegt. Zu beachten ist, dass bei dieser Möglichkeit die Parameter auf maximal einen Wert eingeschränkt werden. So können Parameter nach einem Klick auf ein Shape oder einen Balken nicht mehr mehrere Werte gleichzeitig annehmen. Um diesen Problem zu entgehen, kann die Option „Go to URL“ genutzt werden. Dafür wird dann eine Expression genutzt:
=„http://testserver/ReportServer?/Aachen Reports/Aachen&rc:Parameters=True&rs:Command=Render&PLZ=“ & CStr(Fields!PLZ99.Value)
Hierzu wird die Adresse des Reportservers genutzt, wo der Report am Ende deployed wird. Nachteil bei dieser Möglichkeit ist, dass die Actions nicht mehr in der Preview-Ansicht im Visual Studio getestet werden können. Der Aufbau ist immer ähnlich:
„http://<Servername>/ReportServer?/<Projektname>/<Reportname>&rc:Parameters=True&rs:Command=Render&<Parametername>=“ & CStr(<Parameterübergabewert>)
Nachdem alle gewünschten Einstellungen vorgenommen wurden, kann der Bericht deployed werden und steht somit auf dem Report Server zur Verfügung.
Abgrenzung zu Power BI
Microsoft hat mit Power BI eine Toolsammlung im Angebot, welche auch Analysen und Reporting mit Geodaten unterstützt. Vorrangig kann dazu Power Map genutzt werden. Dies funktioniert auch auf Grundlage einer Bing Map, kann jedoch anders als SSRS auch mit Geodaten in Reinform umgehen. D.h. Power Map kann Längen- und Breitengrade, ganze Adressen oder auch Verwaltungsbezirke interpretieren und auf Basis dieser Daten Shapes und Punkte auf der Karte darzustellen. Ein wesentlicher Unterschied von Power Map ist die Darstellung von Kennzahlen über einen Zeitraum hinweg. Somit ist der Einstieg in die Nutzung von Geodaten wesentlich einfacher als mit SSRS, jedoch bietet dafür Power Map bis zum jetzigen Zeitpunkt nur wenige Möglichkeiten zur weiteren benutzerdefinierten, detaillierten Gestaltung. Zum Verknüpfen mit anderen Diagrammen kann Power View genutzt werden, jedoch ist die Darstellung von Kennzahlen auf einer Karte dort sehr eingeschränkt. Der Funktionsumfang von Power BI bietet eine optimale Umgebung für schnelle Ad-hoc-Berichte. Wenn jedoch angepasste, benutzerdefinierte Berichte benötigt werden, bietet SSRS zur Zeit noch mehr Möglichkeiten zur Darstellung der gewünschten Anforderungen.