Dominando las funciones de ventana (window functions) en TSQL

25
Dominando las funciones de ventana en TSQL 19 de Noviembre (12 pm GMT -5) José L. Rivera Resúmen: Las funciones de ventana (TSQL window functions), originalmente presentadas en SQL Server han probado ser muy útiles para resolver escenarios complejos de clasificación/ordenamiento y agregación. Las mejoras que nos trae SQL Server 2012 hace imperativo conocer su funcionamiento y aplicación. En esta sesión discutiremos sus componentes principales y como utilizar las mismas tomando como ejemplos situaciones de la vida real. Próximos Eventos 3 y 4 de Diciembre Configurando transactional replication para reporteo de una forma segura 26 de Noviembre Kenneth Ureña Está por comenzar:

description

Las funciones de ventana (TSQL window functions), originalmente presentadas en SQL Server han probado ser muy útiles para resolver escenarios complejos de clasificación/ordenamiento y agregación. Las mejoras que nos trae SQL Server 2012 hace imperativo conocer su funcionamiento y aplicación. En esta sesión discutiremos sus componentes principales y como utilizar las mismas tomando como ejemplos situaciones de la vida real.

Transcript of Dominando las funciones de ventana (window functions) en TSQL

Page 1: Dominando las funciones de ventana (window functions) en TSQL

Dominando las funciones de ventana en TSQL

19 de Noviembre (12 pm GMT -5)

José L. Rivera

Resúmen:

Las funciones de ventana (TSQL window functions),

originalmente presentadas en SQL Server han probado

ser muy útiles para resolver escenarios complejos de

clasificación/ordenamiento y agregación. Las mejoras

que nos trae SQL Server 2012 hace imperativo conocer

su funcionamiento y aplicación. En esta sesión

discutiremos sus componentes principales y como

utilizar las mismas tomando como ejemplos situaciones

de la vida real.

Próximos Eventos

3 y 4 de Diciembre

Configurando transactional

replication para reporteo de una

forma segura

26 de Noviembre

Kenneth Ureña

Está por comenzar:

Page 2: Dominando las funciones de ventana (window functions) en TSQL

Dominando las funciones de ventana en TSQL

19 de Noviembre de 2014

Jose L. Rivera

MVP | MCITP | MCTS | MCSA

BI Consultant, Nagnoi LLC

PASS Global Spanish VC | PRPASS

Page 3: Dominando las funciones de ventana (window functions) en TSQL
Page 4: Dominando las funciones de ventana (window functions) en TSQL

Agenda

- Resumen de la funciones

- OVER

- Categorías de funciones

- Ordenamiento

- Agregación

- Analíticos

- Q & A

Page 5: Dominando las funciones de ventana (window functions) en TSQL

• Introducido en SQL Server 2005, mejoras significativas en

SQL Server 2012

• La función es aplicada a un conjunto de filas (rows)

• La especificación de la ventana es implementada usando

la clausula de OVER

• Todavía es trabajo en progreso!

Funciones de Ventana (Windows Functions)

Page 6: Dominando las funciones de ventana (window functions) en TSQL

Divide el conjunto en

pedazos (particiones) y la

operación es aplicada a cada

partición individualmente

Delimita las filas dentro de la

partición al especificar las

fronteras dentro de la

partición

La Clausula OVER

• Define el conjunto (ventana) sobre la cual la función será

aplicada

OVER (

<PARTITION BY clause>

<ORDER BY clause>

<ROW or RANGE clause>

)

Define el orden lógico de la

data para cada partición de

un conjunto

Page 7: Dominando las funciones de ventana (window functions) en TSQL

Operaciones basadas en conjuntos (Windowing)

ID AcctID TransDate TransAmt

1 1234 27/11/2012 $150.00

2 1234 27/11/2012 $22.00

3 5678 28/11/2012 $50.00

4 5678 28/11/2012 $150.00

5 5678 28/11/2012 $10.00

6 5678 29/11/2012 $120.00

7 0987 30/11/2012 $20.00

8 0987 30/11/2012 $100.00

9 0987 30/11/2012 $50.00

Aggregation Window:SUM(TransAmt) OVER(PARTITION BY TransDate)

Ranking Window:ROW_NUMBER() OVER(PARTITION BY TransDate

ORDER BY AcctID, ID)

AcctID TransDate TransAmt BalAmt

5678 28/11/2012 $50.00 $50.00

5678 28/11/2012 $150.00 $200.00

5678 28/11/2012 $10.00 $210.00

AcctID TransDate TransAmt BalAmt Rank

5678 28/11/2012 $50.00 $50.00 1

5678 28/11/2012 $150.00 $200.00 2

5678 28/11/2012 $10.00 $210.00 3

AcctID TransDate TransAmt

5678 28/11/2012 $50.00

5678 28/11/2012 $150.00

5678 28/11/2012 $10.00

Page 8: Dominando las funciones de ventana (window functions) en TSQL

ROW or RANGE (moldura)

• Define como nos movemos dentro de la ventana para

modificar la selección de las filas

• BETWEEN <window frame bound > AND <window frame bound >

Page 9: Dominando las funciones de ventana (window functions) en TSQL

Categorías de funciones

Orden Agregación Analítico

ROW_NUMBER()

RANK()

DENSE_RANK()

NTILE()

SUM() | AVG() | COUNT()

MIN() | MAX()

CHECKSUM_AGG

STDEV() | STDEVP()

VAR() | VARP()

LEAD() | LAG()

FIRST_VALUE() | LAST_VALUE()

CUME_DIST()

PERCENT_RANK()

PERCENTILE_DIST()

PERCENTILE_CONT()

Page 10: Dominando las funciones de ventana (window functions) en TSQL

Ordenamiento

• ROW_NUMBER()• Genera un numero secuencial continuo (comienza en 1)

• RANK()• Ordena la data (Olympic rank – en caso de empate)

• DENSE_RANK()• Ordena la data sin brincos

• NTILE()• Distribuye la data en grupos

No hay moldura

Page 11: Dominando las funciones de ventana (window functions) en TSQL

DEMOFunciones de Ordenamiento

Page 12: Dominando las funciones de ventana (window functions) en TSQL

Agregación

• SUM() | AVG() | COUNT() | COUNT_BIG() | MIN() | MAX()• Son las mas comunes, no hay sorpresas

• CHECKSUM_AGG• Calcula un checksum de los valores en el grupo

• STDEV() | STDEVP()• Desviación estándar estadística (regular o poblacional)

• VAR() | VAR()• Varianza estadística (regular o poblacional)

Page 13: Dominando las funciones de ventana (window functions) en TSQL

DEMOFunciones de Agregación

Page 14: Dominando las funciones de ventana (window functions) en TSQL

Analíticos

• LEAD() | LAG()

• Obtiene la data de la fila anterior o posterior en el mismo

conjunto

LEAD | LAG

(scalar_expression [,offset] [,default])

OVER ( [ partition_by_clause ]

order_by_clause )

No hay moldura

Page 15: Dominando las funciones de ventana (window functions) en TSQL

Analíticos

• FIRST_VALUE() | LAST_VALUE()

• Permite obtener el primer/ultimo valor en un conjunto

ordenado de valores

FIRST_VALUE | LAST_VALUE

( [scalar_expression] )

OVER ( [ partition_by_clause ]

order_by_clause

rows_range_clause )

Page 16: Dominando las funciones de ventana (window functions) en TSQL

Analíticos

• CUME_DIST()

• Calcula la distribución acumulativa de un valor en un grupo

de valores

No hay moldura

CUME_DIST()

OVER ( [ partition_by_clause ]

order_by_clause )

Page 17: Dominando las funciones de ventana (window functions) en TSQL

Analíticos

• PERCENT_RANK()

• Calcula el orden relativo de una fila dentro de un grupo de

filas

No hay moldura

PERCENT_RANK()

OVER ( [ partition_by_clause ]

order_by_clause )

Page 18: Dominando las funciones de ventana (window functions) en TSQL

Analíticos

• PERCENTILE_DIST()

• Calcula la percentila para un conjunto de valores ordenados

No hay moldura

PERCENTILE_DIST ( numeric_literal )

WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )

OVER ( [ partition_by_clause ]

order_by_clause

rows_range_clause )

Page 19: Dominando las funciones de ventana (window functions) en TSQL

Analíticos

• PERCENTILE_CONT()

• Calcula la percentila basada en una distribución continua de

valores.

No hay moldura

PERCENTILE_CONT ( numeric_literal )

WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )

OVER ( [ partition_by_clause ]

order_by_clause

rows_range_clause )

Page 20: Dominando las funciones de ventana (window functions) en TSQL

DEMOFunciones Analíticas

Page 21: Dominando las funciones de ventana (window functions) en TSQL

Importante!

• SQL Server 2005/2008/2008 R2• Ordenamiento

• PARTITION BY + ORDER BY

• Agregación

• Solo PARTITION BY

• SQL Server 2012+• Analíticos

• Agregación

• Se añaden ORDER BY

• Window Framing (ROWS | RANGE)

Page 22: Dominando las funciones de ventana (window functions) en TSQL

Manténgase conectado a nosotros!

Visítenos en http://globalspanish.sqlpass.org

/SpanishPASSVC

lnkd.in/dtYBzev

/user/SpanishPASSVC

/SpanishPASSVC

Page 23: Dominando las funciones de ventana (window functions) en TSQL

Outstanding Volunteer AwardDo you know a volunteer that has gone

above and beyond recently?

Nominate them for the monthly OVA.

[email protected]

PASS Volunteer Awards

PASSion AwardThe highest of PASS accolades presented

yearly to a volunteer.

Page 24: Dominando las funciones de ventana (window functions) en TSQL

Manténgase involucrado!

• Registrate HOY en sqlpass.org para una membresia gratuita

• Linked In: http://www.sqlpass.org/linkedin

• Facebook: http://www.sqlpass.org/facebook

• Twitter: @SQLPASS

• PASS: http://www.sqlpass.org

Page 25: Dominando las funciones de ventana (window functions) en TSQL

Configurando transactional replication para reporteo de una forma segura

26 de Noviembre (12 pm GMT -5)

Kenneth Ureña

Resúmen:

En esta sesión vamos a ver la forma de configurar

transactional replication, la seguridad necesaria y los

diferentes componentes que se involucran en el

funcionamiento de la misma. Al igual como las mejores

prácticas para escalabilidad y distribuciones de carga,

convirtiendo nuestro entorno replicado en un amigo de

distribución de carga, en lugar de una carga de la

administración.

Próximo Evento