SQL Server 2012 - Analytische Funktionen
Mit dem neuen SQL Server 2012 werden auch einige neue analytische Funktionen eingefügt, die in Oracle teilweise schon seit Jahren bekannt sind. Zu diesen neuen Funktionen gehören:
CUME_DIST
PERCENT_RANK
FIRST_VALUE
LAST_VALUE
PERCENTILE_CONT
PERCENTILE_DISC
LEAD
LAG
Auf die beiden letzten Funktionen möchte ich noch etwas näher eingehen, da ich diese in Auswertungen für besonders wertvoll erachte.
Mit den beiden neuen analytischen Funktionen LEAD und LAG ist es nun ein leichtes Zeiträume miteinander zu vergleichen. Dies war vorher nur mit einiger Mühe und Self-Joins zu erreichen. Als Beispieldatenbank dient hierbei die AdventureWorks2008R2 Datenbank.
Mit der LAG Funktion, kann man den aktuellen Zeitraum mit einem früheren Zeitraum vergleichen. Es werden also vorhergehende Zeilen in eine nachfolgende Betrachtung mit einbezogen. Hierzu folgendes Beispiel:
Die LEAD Funktion arbeitet im Gegenzug zur LAG Funktion genau anders herum. Zu einem bestimmten Zeitraum kann ein nachfolgender Zeitraum betrachtet werden. Hierzu werden nachfolgende Zeilen in die Betrachtung mit einbezogen. Folgendes Beispiel soll dies verdeutlichen:
Ich denke, diese neuen Funktionen, sind nicht nur für Controller sehr wertvoll.
USE [AdventureWorks2008R2]
GO
SELECT
YEAR(QuotaDate) AS Verkaufsjahr
, LAG(sum(SalesQuota)) OVER (ORDER BY YEAR(QuotaDate)) AS Vorjahresumsatz
, sum(SalesQuota) AS Jahresumsatz
, (sum(SalesQuota) - LAG(sum(SalesQuota), 1,0) OVER (ORDER BY YEAR(QuotaDate))) AS Differenz
FROM Sales.SalesPersonQuotaHistory
GROUP BY YEAR(QuotaDate)
GO
Man erhält somit folgendes Ergebnis:
Die LEAD Funktion arbeitet im Gegenzug zur LAG Funktion genau anders herum. Zu einem bestimmten Zeitraum kann ein nachfolgender Zeitraum betrachtet werden. Hierzu werden nachfolgende Zeilen in die Betrachtung mit einbezogen. Folgendes Beispiel soll dies verdeutlichen:
USE [AdventureWorks2008R2]
GO
SELECT
YEAR(QuotaDate) AS Verkaufsjahr
, sum(SalesQuota) AS Jahresumsatz
, LEAD(sum(SalesQuota)) OVER (ORDER BY YEAR(QuotaDate)) AS Folgejahresumsatz
, (sum(SalesQuota) - LAG(sum(SalesQuota), 1,0) OVER (ORDER BY YEAR(QuotaDate))) AS Differenz
FROM Sales.SalesPersonQuotaHistory
GROUP BY YEAR(QuotaDate)
GO
Als Ergebnis bekommt man nun dieses Resultat.
Ich denke, diese neuen Funktionen, sind nicht nur für Controller sehr wertvoll.| Print article | This entry was posted by Falk Krahl on 28.02.12 at 08:38:00 . Follow any responses to this post through RSS 2.0. |


