dominando las funciones de ventana (window functions) en tsql
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
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:
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
Agenda
- Resumen de la funciones
- OVER
- Categorías de funciones
- Ordenamiento
- Agregación
- Analíticos
- Q & A
• 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)
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
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
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 >
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()
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
DEMOFunciones de Ordenamiento
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)
DEMOFunciones de Agregación
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
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 )
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 )
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 )
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 )
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 )
DEMOFunciones Analíticas
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)
Manténgase conectado a nosotros!
Visítenos en http://globalspanish.sqlpass.org
/SpanishPASSVC
lnkd.in/dtYBzev
/user/SpanishPASSVC
/SpanishPASSVC
Outstanding Volunteer AwardDo you know a volunteer that has gone
above and beyond recently?
Nominate them for the monthly OVA.
PASS Volunteer Awards
PASSion AwardThe highest of PASS accolades presented
yearly to a volunteer.
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
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