Längen- und Breitengrade in den Geography Datentyp umwandeln

Häufig verfügen Datenbanken mit Adressen über Längen- und Breitengrade. Um diese bspw. in einem Report darstellen zu können, ist es notwendig, dass diese in den Geography Datentyp, bspw. als Punkt umgewandelt werden. U.a. können diese dann super in einen Report mit dem MapControl eingefügt werden (ab 2008R2). Aus Performance Gründen empfehle ich, die Daten nicht bei jeder Abfrage dann umwandeln zu lassen, sondern entsprechend neben den Geo-Informationen zu speichern.

Bspw. können die Längen- und Breitengrade so ausgewertet werden:

-- Tabelle mit Geo- Informationen
CREATE TABLE dbo.Orte (
id int not null primary key identity(1,1),
ort varchar(255) not null,
breitengrad decimal(10,8),
laengengrad decimal(10,8));
GO
 
INSERT INTO dbo.Orte (ort, laengengrad, breitengrad)
VALUES
('Koblenz', '7.589907', '50.360025'),
('Hamburg', '9.9936818', '53.5510846'),
('Berlin', '13.4060912', '52.519171'),
('München', '11.5770851', '48.1366069');

Abfrage mit Umwandlung:

SELECT
ort
, GEOGRAPHY::STPointFromText('POINT(' + CONVERT(VARCHAR, laengengrad) + ' ' + CONVERT(VARCHAR, breitengrad) + ')',4326).STBuffer(20000)
FROM dbo.Orte

Ergebnis:

Unattended Setup – TCP/IP aktivieren und konfigurieren

Bei einer Installation einer Developer- oder Evaluation Edition ist TCP/IP im Standard deaktiviert. Dies stört mich immer wieder, wenn ich automatisch mir ein Test Image mit Windows und SQL installieren lasse und dann erstmal TCP/IP aktivieren zu müssen, um im Netzwerk arbeiten zu können. Dies kann aber in der ConfigurationFile.ini konfiguriert werden.

Dazu muss lediglich TCPENABLED auf 1 gestellt werden.

(zur Automatischen Installation siehe http://www.flip-design.de/?p=37 und auch http://msdn.microsoft.com/en-us/library/dd239405.aspx, bzw. http://msdn.microsoft.com/en-us/library/ms144259.aspx)

Falls auch noch die Port und IP Konfiguration benötigt wird, muss dies über WMI durchgeführt werden. (siehe u.a. hier http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.server.aspx)

SSRS: Dokument-Fußzeile nur auf der ersten Seite darstellen

Innerhalb von Reporting Services ist es nur möglich, einen Seitenkopf und Seitenfuß zu einzurichten, die auf jeder Seite innerhalb des Berichts dargestellt werden. Bspw. in MS Word kann dies auch pro Dokument eingestellt werden, indem bspw. die Fußzeile nur im Ersten Blatt des Dokuments dargestellt wird. Um dies auch in SSRS zu erreichen, sind folgende Schritte notwendig:
1. Legen Sie einen Seitenfuß an (Bericht -> Seitenfuß hinzufügen)
2. Erstellen Sie im Seitenfuß ein Rechteck über die Toolbox
3. Wechseln Sie in die Eigenschaften des Rechtecks und auf die Seite Sichtbarkeit:

 

 

 

 

 

 

 

 

 

 

 

und ergänzen Sie den Ausdruck wie oben dargestellt.

Nun wird immer geprüft, ob die aktuelle Seitennummer der ersten Seite entspricht, wenn dies Wahr ergibt, wird der Dokumenten-Fuß angezeigt.

SSRS: Berechnungen innerhalb eines Tablix mit der vorherigen Zeile

Um innerhalb einer Tabelle (Tablix) mit der vorherigen Zeile zu rechnen, kann die Funktion Previous() genutzt werden. Diese liefert die Daten aus der vorherigen Zeile zurück:

=Fields!Umsatz.Value-Previous(Fields!Umsatz.Value)

Ergebnis:

Um nun jedoch diese Daten als Prozentwert für einen Indikator wiederverwenden zu können (Darstellung eines Trends), darf jedoch die Funktion Pervious() nicht mehr eingesetzt werden, da diese bereits eine Aggregat-Funktion beinhaltet. Dafür ist es dann notwendig, dass die Daten pro Zeile erstmal zwischengespeichert werden. Das kann über eigenen Code innerhalb der RDL erreicht werden:

Nun kann einerseits in der Tabelle die prozentuale Veränderung dargestellt werden

=code.ZeigeProzentualeVeraenderung(Fields!Umsatz.Value, Previous(Fields!Umsatz.Value))

und diese Daten können nun in einem Indikator verwendet werden:

Ergebnis: