La sintaxis T-SQL está evolucionando con cada versión del motor relacional y cada vez es más habitual encontrar entre sus novedades, funciones analíticas para resolver problemas que típicamente requerían de infraestructura Multi-dimensional. En esta sesión vamos a dar un repaso a las funciones analíticas de las que disponemos en el motor relacional, para ver hasta qué punto nos pueden resultar útiles a la hora de mejorar procesos de negocio.
1. REL30012
Lenguaje TSQL como aproximación a
escenarios BI
300
@enriquecatala
Enrique Catala Bañuls
ecatala@solidq.com
@
@SQSummit13
MCT – Microsoft Active Professional – Technical Ranger
2. COMUNICADO
EN CUMPLIMIENTO CON LA LEY 15/1999 DE PROTECCION DE DATOS DE
CARÁCTER PERSONAL, PONEMOS EN TU CONOCIMIENTO QUE
ESTA SESIÓN VA A SER GRABADA
POR SOLIDQ Y QUE ESTA GRABACIÓN PODRÍA SER UTILIZADA COMO MATERIAL
DE MARKETING Y HACERSE PUBLICA A TRAVÉS DE DIVERSOS MEDIOS, COMO
POR EJEMPLO NUESTRA PAGINA WEB.
TENIENDO EN CUENTA QUE TU IMAGEN PUEDE APARECER EN ESA GRABACIÓN,
SI NO DESEAS APARECER, ROGAMOS NOS LO COMUNIQUES POR LOS MEDIOS
QUE YA CONOCES.
2
3. Objetivos de la sesión
1.
2.
3.
4.
Agrupación de conjuntos
Funciones CUBE y ROLLUP
Pivotado de datos
Funciones analíticas en SQL Server 2012
3
7. Objetivos de la sesión
1.
2.
3.
4.
Agrupación de conjuntos
Funciones CUBE y ROLLUP
Pivotado de datos
Funciones analíticas en SQL Server 2012
12
8. Pivotado de datos
PIVOT
Rotar datos desde filas a columnas
Permite agregar múltiples valores a un único
valor
k1
k2
c1
1
A
v1
1
B
v2
1
C
v3
2
A
v4
2
B
v5
2
C
k1
v6
PIVOT
A
B
C
1
v1
v2
v3
2
v4
v5
v6
13
9. Pivotado de datos
Caso práctico para Open Schema
Cada atributo almacenado en una fila aparte
PIVOT perfecto para representar datos y
manipular este escenario
-- OpenSchema
objectid
attribute
----------- --------1
attr1
1
attr2
1
attr3
2
attr2
2
attr3
2
attr4
2
attr5
3
attr1
3
attr2
3
attr3
val
----------ABC
10
2008-01-01
12.300
X
Y
14.700
XYZ
20
2009-01-01
PIVOT
-- Desired Result:
objectid
attr1 attr2
----------- ----- -----1
ABC
10
2
NULL 12.300
3
XYZ
20
attr3
---------2008-01-01
X
2009-01-01
attr4
----NULL
Y
NULL
14
attr5
-----NULL
13.700
NULL
10. Pivotar con GROUP BY
-- OpenSchema
objectid
attribute
----------- --------1
attr1
1
attr2
1
attr3
2
attr2
2
attr3
2
attr4
2
attr5
3
attr1
3
attr2
3
attr3
val
----------ABC
10
2008-01-01
12.300
X
Y
14.700
XYZ
20
2009-01-01
PIVOT
-- Desired Result:
objectid
attr1 attr2
----------- ----- -----1
ABC
10
2
NULL 12.300
3
XYZ
20
attr3
---------2008-01-01
X
2009-01-01
attr4
----NULL
Y
NULL
attr5
-----NULL
13.700
NULL
Agregación
SELECT objectid,
MAX(CASE WHEN attribute
MAX(CASE WHEN attribute
MAX(CASE WHEN attribute
MAX(CASE WHEN attribute
MAX(CASE WHEN attribute
FROM dbo.OpenSchema
GROUP BY objectid;
=
=
=
=
=
'attr1'
'attr2'
'attr3'
'attr4'
'attr5'
THEN
THEN
THEN
THEN
THEN
val
val
val
val
val
END)
END)
END)
END)
END)
AS
AS
AS
AS
AS
attr1,
attr2,
attr3,
attr4,
attr5
Distribución
Agrupación
(implícita)
15
12. Despivotado de datos
UNPIVOT
Rotar datos de columnas a filas
k1
A
B
1
v1
v2
v3
2
v4
v5
v6
k1
C
UNPIVOT
k2
c1
1
A
v1
1
B
v2
1
C
v3
2
A
v4
2
B
v5
2
C
v6
17
14. Objetivos de la sesión
1.
2.
3.
4.
Agrupación de conjuntos
Funciones CUBE y ROLLUP
Pivotado de datos
Funciones analíticas en SQL Server 2012
20
15. Window functions
¿Por qué las necesitamos?
¿Qué pasa si queremos obtener la suma y
el valor de la columna? (group y detalle)
id_table
id_table
Select id_table, value,[sum(value)]
select sum(value) as
from table1 as [sum(value)]
sum(value)
from table1
value
value
1 1
1
2 2
1
2 2
2
3 3
1
3 3
2
3 3
3
sum(value)
1
1
2
1
2
3
1
SUM(value)
3
1
3
3
6
6
6
6
Msg 8120, Level 16, State 1, Line 1
Column 'table1.id_table' is invalid in the select list because it is not
contained in either an aggregate function or the GROUP BY clause.
En un motor relacional es correcta esta
aproximación?
21
16. Window functions
¿Por qué necesitamos window functions?
La solución pasa por usar la cláusula OVER
select id_table,
value,
sum(value) over(partition by id_table)
from table1
id_table
value
1
2
2
3
3
3
sum(value)
1
1
2
1
2
3
1
3
3
6
6
6
22
20. Window functions
Conceptos clave: Particion
Grupo de filas con
“características”
similares dentro de
un conjunto
actid
tranid
1
2
2
3
3
3
1
1
2
1
2
3
26
22. Window functions
Conceptos clave: Slicing/Framing
B1 and B2 can be
–
–
–
–
UNBOUNDED PRECEDING
UNBOUNDED FOLLOWING
CURRENT ROW
FOR ROWS ONLY
• <scalar expression> PRECEDING
• <sclara expression> FOLLOWING
Note
– B1 <= B2 or NULL will be returned
• Except in COUNT() that 0 will be returned
28
25. Conclusiones
Objetivos de la sesión
•
•
•
•
Agrupación de conjuntos múltiple
Conceptos CUBE y ROLLUP
Pivotado de datos
Funciones analíticas decentes en SQL
Server 2012
31
28. Si quieres disfrutar de las mejores sesiones de
nuestros mentores de España y Latino América,
ésta es tu oportunidad.
http://summit.solidq.com/madrid/
Síguenos:
34