Utilización de subconsultas para realizar cálculos sobre “N” cantidad de columnas sin utilizar sentencias CASE
Hay ocasiones en que debemos realizar cálculos que parecen simples en papel, sin embargo al intentar hacer la consulta en SQL nos damos cuenta que son más complejas de lo que pensamos, o que requieren de mucha codificación para llevarla a cabo.
El presente documento resuelve de forma elegante y escalable un problema común de SQL para realizar cálculos de agrupación sobre columnas.
En la parte final del documento, hay un anexo que describe la solución completa del problema con indicaciones especiales acerca de las sentencias UNION, UNION ALL y cálculo de las funciones de agregación cuando existen valores nulos en los campos.
LISP + GETVPN as alternative to DMVPN+OSPF+GETVPNJobSnijders
These slide are from a presentation I gave at the Cisco NAG2010 conference about using LISP to build large VPN's over the internet instead of regular GRE or DMVPN based setups.
LISP + GETVPN as alternative to DMVPN+OSPF+GETVPNJobSnijders
These slide are from a presentation I gave at the Cisco NAG2010 conference about using LISP to build large VPN's over the internet instead of regular GRE or DMVPN based setups.
Presentación en Power Point de la exposición sobre redes WAN que he realizado en el Curso de Programación y aplicaciones informáticas, realizado en el Centro de Formación Audio Gil de Castellón, el primero de diciembre de 2010.
For some very basic VRF configuration follow the steps:
1. Enters VRF configuration mode and assigns a VRF name.
Router(config)#ip vrf vrf-name
2. Creates a VPN route distinguisher (RD) following one of the 16bit-ASN:32bit-number or 32bitIP:16bit-number explained above
Router(config-vrf)#rd route-distinguisher
3. Creates a list of import and/or export route target communities for the specified VRF.
Router(config-vrf)# route-target {import | export | both} route-distinguisher
4. (Optional step) Associates the specified route map with the VRF.
Router(config-vrf)# import map route-map
Presentación en Power Point de la exposición sobre redes WAN que he realizado en el Curso de Programación y aplicaciones informáticas, realizado en el Centro de Formación Audio Gil de Castellón, el primero de diciembre de 2010.
For some very basic VRF configuration follow the steps:
1. Enters VRF configuration mode and assigns a VRF name.
Router(config)#ip vrf vrf-name
2. Creates a VPN route distinguisher (RD) following one of the 16bit-ASN:32bit-number or 32bitIP:16bit-number explained above
Router(config-vrf)#rd route-distinguisher
3. Creates a list of import and/or export route target communities for the specified VRF.
Router(config-vrf)# route-target {import | export | both} route-distinguisher
4. (Optional step) Associates the specified route map with the VRF.
Router(config-vrf)# import map route-map
Si su organización está en la etapa de planificación, o recién comenzando a utilizar y explorar estas herramientas, es un buen momento para considerar algunos aspectos que no necesariamente están relacionados a la tecnología
El presente documento tiene como objetivo realizar un análisis acerca de los métodos y estrategias colaborativas de enseñanza/aprendizaje, sus principales definiciones, las técnicas más apropiadas para su implementación y las principales herramientas TIC de apoyo disponible tanto para docentes como estudiantes. La metodología de investigación escogida ha sido la revisión bibliográfica de documentos recientes. El artículo concluye con una síntesis de las principales definiciones del concepto colaborativo en educación, y las consideraciones necesarias para llevar a la práctica una estrategia cooperativa en la educación superior, el cual puede entregar mayores beneficios en la búsqueda de la generación de conocimiento significativo para los estudiantes, sin embargo requiere de un mayor grado de compromiso y responsabilidad tanto de alumnos como de docentes
Esta monografía tiene como principal objetivo realizar un estudio y análisis del sistema de aseguramiento de la calidad en la educación superior Chilena. La metodología de investigación escogida ha sido la revisión bibliográfica de documentos y seminarios recientes. Como parte del estudio se consideró la historia y evolución de la calidad, sus definiciones y los sistemas vigentes tanto en el Espacio Europeo de Educación Superior como en Chile (SINAC-ES). El artículo concluye con un análisis del Sistema de Calidad Chileno, los beneficios que Chile y el sistema de educación superior han conseguido con su implementación, y finalmente los desafíos que tiene el país por delante para perfeccionar el actual sistema de calidad. Entre las principales conclusiones se encuentran la implementación de mediciones periódicas para evaluar el sistema, considerar elementos y profundidad de los modelos de gestión de excelencia, perfeccionar el sistema de acreditación de agencias externas y finalmente incluir criterios que abarquen más ampliamente el concepto de calidad en educación, entre ellos los epistemológicos y pedagógicos.
Esta presentación muestra los resultados de la prueba de conceptos realizada sobre SQL Server 2014 Enterprise en una empresa del rubro Bancario.
En resumen, este documento evidencia un mejoramiento en el rendimiento de hasta 6 veces en las consultas adhoc en SQL, y un 30% de mayor eficiencia en las tasas de compresión de datos.
Esta PPT la expuse en un evento organizado por Microsoft en junio del año 2014, en el marco de las nuevas herramientas que Microsoft ha desarrollado para satisfacer las necesidades en el ámbito de BI
Estas slides fueron presentadas en el evento OpenBI Day, organizado por Inacap en octubre del año 2013.
El objetivo de esta presentación fue mostrar las distintas técnicas que existen para diseñar cubos eficientes en función del tiempo de respuesta de las consultas, facilidad de administración de los ambientes y nivel de dificultad en resolver problemas de negocios.
En ambientes de DataWarehouse, debemos interactuar con una gran cantidad de ficheros en forma periódica, estos ficheros son descargados desde diversas fuentes para luego cargarlos a nuestro ambiente de base de datos SQL Server. Sin embargo, muchas veces estos ficheros quedan alojados eternamente en las rutas de carga y no son administrados en forma eficiente, consumiendo grandes cantidades de espacio en nuestros discos duros.
El objetivo de este documento es entregar una forma simple y eficiente de mejorar la administración de estos ficheros a través compresión de archivos en formato RAR, todo esto ejecutado directamente con procedimientos almacenados de SQL Server,
Este documento describe una estrategia genérica, aplicable a cualquier plataforma para la implementación y administración de DataWarehouse, cuyo principal objetivo es lograr el éxito, sustentabilidad y adaptabilidad del proyecto tanto a corto como largo plazo. La estrategia está enfocada principalmente en proyectos complejos, sin embargo puede emplearse en proyectos de cualquier envergadura.
Para asegurar el éxito de la solución, esta estrategia considera experiencias y elementos que en diversos proyectos han sido factores de fracaso o estanco, principalmente los relacionados a satisfacer nuevos requerimientos de los usuarios finales, en términos de calidad y confiabilidad de la información, agilidad en la adaptación a los cambios, facilidad en la creación de informes y cuadros de mando, rapidez en los tiempos de respuesta de las consultas y costo de la administración de la infraestructura, entre otros.
Finalmente, esta estrategia desarrolla conceptos claves, tales como la adaptación a los cambios, administración de procesos (Jobs), control de errores y mallas de procesos, elementos que son centrales en la estrategia EIAD y que han sido olvidados en la mayoría de la literatura relacionada a DataWarehouse, centradas principalmente en metodologías de administración de proyectos, creación de cubos y/o algunos procesos de carga.
3Redu: Responsabilidad, Resiliencia y Respetocdraco
¡Hola! Somos 3Redu, conformados por Juan Camilo y Cristian. Entendemos las dificultades que enfrentan muchos estudiantes al tratar de comprender conceptos matemáticos. Nuestro objetivo es brindar una solución inclusiva y accesible para todos.
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informáticavazquezgarciajesusma
En este proyecto de investigación nos adentraremos en el fascinante mundo de la intersección entre el arte y los medios de comunicación en el campo de la informática.
La rápida evolución de la tecnología ha llevado a una fusión cada vez más estrecha entre el arte y los medios digitales, generando nuevas formas de expresión y comunicación.
Continuando con el desarrollo de nuestro proyecto haremos uso del método inductivo porque organizamos nuestra investigación a la particular a lo general. El diseño metodológico del trabajo es no experimental y transversal ya que no existe manipulación deliberada de las variables ni de la situación, si no que se observa los fundamental y como se dan en su contestó natural para después analizarlos.
El diseño es transversal porque los datos se recolectan en un solo momento y su propósito es describir variables y analizar su interrelación, solo se desea saber la incidencia y el valor de uno o más variables, el diseño será descriptivo porque se requiere establecer relación entre dos o más de estás.
Mediante una encuesta recopilamos la información de este proyecto los alumnos tengan conocimiento de la evolución del arte y los medios de comunicación en la información y su importancia para la institución.
Es un diagrama para La asistencia técnica o apoyo técnico es brindada por las compañías para que sus clientes puedan hacer uso de sus productos o servicios de la manera en que fueron puestos a la venta.
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Telefónica
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0xWord escrito por Ibón Reinoso ( https://mypublicinbox.com/IBhone ) con Prólogo de Chema Alonso ( https://mypublicinbox.com/ChemaAlonso ). Puedes comprarlo aquí: https://0xword.com/es/libros/233-big-data-tecnologias-para-arquitecturas-data-centric.html
Método SQL para Calcular el valor máximo de un conjunto de columnas de una Tabla
1. Método SQL para Calcular el valor máximo de un
conjunto de columnas de una Tabla.
Utilización de subconsultas para realizar cálculos sobre “N” cantidad de
columnas sin utilizar sentencias CASE
Fecha: Mayo del 2013.
Versión: 1.0
Autor: Sebastián Rodríguez Robotham
e-mail: srodriguez@easybi.cl
Nombre Puntaje 1 Puntaje 2 Puntaje 3 Puntaje 4 Puntaje 5 Puntaje 6 Maxima Mínima
Nicolas 735 158 399 473 378 147 735 147
Cesar 578 252 557 410 441 504 578 252
Hector 578 NULL 168 NULL 189 714 714 168
Mario 578 105 168 105 189 714 714 105
Daniela 683 473 399 326 347 294 683 294
Jorge 105 672 672 735 693 305 735 105
2. Método SQL para Calcular el valor máximo de un conjunto de columnas en una Tabla
Sebastián Rodríguez Robotham. www.EasyBI.cl 2 | P a g e
Introducción.
Hay ocasiones en que debemos realizar cálculos que parecen simples en papel, sin embargo al
intentar hacer la consulta en SQL nos damos cuenta que son más complejas de lo que pensamos, o
que requieren de mucha codificación para llevarla a cabo.
El presente documento resuelve de forma elegante y escalable un problema común de SQL para
realizar cálculos de agrupación sobre columnas.
En la parte final del documento, hay un anexo que describe la solución completa del problema con
indicaciones especiales acerca de las sentencias UNION, UNION ALL y cálculo de las funciones de
agregación cuando existen valores nulos en los campos.
Problema.
Supongamos que contamos con un listado de clientes, y cada cliente tiene diversos puntajes
otorgados por un sistema de segmentación mensual, el requerimiento es calcular el puntaje
promedio y máximo de los últimos 6 meses, tal como lo muestra la siguiente figura:
Figura 1 – Listado de Puntajes de Clientes
Solución Clásica.
Primero generaremos una tabla con la estructura necesaria para almacenar la información base:
CREATE TABLE #TempRowToColumn ( Nombre VARCHAR(100)
,Puntaje_P1 INT
,Puntaje_P2 INT
,Puntaje_P3 INT
,Puntaje_P4 INT
,Puntaje_P5 INT
,Puntaje_P6 INT)
Luego, poblaremos la tabla con la información publicada en la Figura 1.
INSERT INTO #TempRowToColumn VALUES ('Nicolas',735,158,399,473,378,147),
('Cesar',578,252,557,410,441,504),
('Hector',578,NULL,168,NULL,189,714),
('Mario',578,105,168,105,189,714),
('Daniela',683,473,399,326,347,294),
Nombre Puntaje 1 Puntaje 2 Puntaje 3 Puntaje 4 Puntaje 5 Puntaje 6
Nicolas 735 158 399 473 378 147
Cesar 578 252 557 410 441 504
Hector 578 NULL 168 NULL 189 714
Mario 578 105 168 105 189 714
Daniela 683 473 399 326 347 294
Jorge 105 672 672 735 693 305
3. Método SQL para Calcular el valor máximo de un conjunto de columnas en una Tabla
Sebastián Rodríguez Robotham. www.EasyBI.cl 3 | P a g e
('Jorge',105,672,672,735,693,305)
Para calcular el promedio es bastante simple, ya que debemos sumar los 6 puntajes y dividirla en
6, sin embargo presenta un inconveniente, hay datos nulos que entregarán un resultado diferente
al que esperábamos inicialmente (los valores nulos hacen que el resultado final sea nulo en el
cliente “Héctor”), la figura 2 muestra el resultado de esta operación.
SELECT *
, (Puntaje_P1+ Puntaje_P2 + Puntaje_P3 +
Puntaje_P4 + Puntaje_P5 + Puntaje_P6) / 6 as Promedio
FROM #TempRowToColumn
Figura 2 – Calculo del Promedio
Y finalmente, si queremos calcular el valor máximo, tendremos que realizar una sentencia CASE
que evalúe cada alternativa, de la siguiente forma:
CASE WHEN Puntaje_P1 > Puntaje_P2 AND Puntaje_P1 > Puntaje_P3 AND
Puntaje_P1 > Puntaje_P4 AND Puntaje_P1 > Puntaje_P5 AND
Puntaje_P1 > Puntaje_P6 THEN Puntaje_P1
WHEN Puntaje_P2 > Puntaje_P3 AND Puntaje_P2 > Puntaje_P4 AND
Puntaje_P2 > Puntaje_P5 AND Puntaje_P2 > Puntaje_P6 THEN Puntaje_P2
WHEN Puntaje_P3 > Puntaje_P4 AND Puntaje_P3 > Puntaje_P5 AND
Puntaje_P3 > Puntaje_P6 THEN Puntaje_P3
WHEN Puntaje_P4 > Puntaje_P5 AND Puntaje_P4 > Puntaje_P6 THEN Puntaje_P4
WHEN Puntaje_P5 > Puntaje_P6 THEN Puntaje_P4
ELSE Puntaje_P6
END AS maximo
Figura 3 – Calculo del Promedio y Valor Máximo.
Nombre Puntaje 1 Puntaje 2 Puntaje 3 Puntaje 4 Puntaje 5 Puntaje 6 Promedio
Nicolas 735 158 399 473 378 147 381
Cesar 578 252 557 410 441 504 457
Hector 578 NULL 168 NULL 189 714 NULL
Mario 578 105 168 105 189 714 309
Daniela 683 473 399 326 347 294 420
Jorge 105 672 672 735 693 305 530
Nombre Puntaje 1 Puntaje 2 Puntaje 3 Puntaje 4 Puntaje 5 Puntaje 6 Promedio Maximo
Nicolas 735 158 399 473 378 147 381 735
Cesar 578 252 557 410 441 504 457 578
Hector 578 NULL 168 NULL 189 714 NULL 714
Mario 578 105 168 105 189 714 309 714
Daniela 683 473 399 326 347 294 420 683
Jorge 105 672 672 735 693 305 530 735
4. Método SQL para Calcular el valor máximo de un conjunto de columnas en una Tabla
Sebastián Rodríguez Robotham. www.EasyBI.cl 4 | P a g e
El problema de utilizar esta solución es que no es escalable, es decir cuando tenemos 10 o 20
columnas que comparar, la codificación se hace muy pesada y riesgosa, ya que es fácil cometer
errores en las comparaciones CASE.
Solución Óptima.
Para solucionar este tipo de requerimientos, lo que debemos hacer es convertir las columnas de
cada fila en una nueva subquery que podemos trabajar a nivel de la misma fila, y utilizar las
funciones de agrupamiento que provee SQL Server, a continuación se presenta la solución
propuesta.
SELECT T1.*
,(SELECT MAX(Puntaje)
FROM ( SELECT Puntaje_P1 AS Puntaje
UNION ALL SELECT Puntaje_P2
UNION ALL SELECT Puntaje_P3
UNION ALL SELECT Puntaje_P4
UNION ALL SELECT Puntaje_P5
UNION ALL SELECT Puntaje_P6) AliasTabla
) AS PuntajeMaximo
FROM #TempRowToColumn T1
Figura 4 – Resultado Máximo con SubQuery a Nivel de Fila.
Lo que hace esta consulta es bastante sencillo: crea una subconsulta con los valores de cada
columna, similar a la siguiente sentencia:
SELECT 1 AS Puntaje
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
Donde el resultado es una lista de números del uno al cinco, luego al utilizar esta sentencia como
subquery y aplicar una función de agregado, por ejemplo máximo, obtendremos el resultado
deseado (valor 5 como resultado de la función MAX):
Nombre Puntaje_P1 Puntaje_P2 Puntaje_P3 Puntaje_P4 Puntaje_P5 Puntaje_P6
Puntaje
Maximo
Nicolas 735 158 399 473 378 147 735
Cesar 578 252 557 410 441 504 578
Hector 578 NULL 168 NULL 189 714 714
Mario 578 105 168 105 189 714 714
Daniela 683 473 399 326 347 294 683
Jorge 105 672 672 735 693 305 735
Nueva
Columna
5. Método SQL para Calcular el valor máximo de un conjunto de columnas en una Tabla
Sebastián Rodríguez Robotham. www.EasyBI.cl 5 | P a g e
SELECT MAX(Puntaje)
FROM (
SELECT 1 AS Puntaje
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
) As Alias
El mismo concepto se aplica en la solución óptima, pero ahora en vez de utilizar valores
constantes, utilizamos los campos que provee la tabla #TempRowToColumn.
Rendimiento.
La siguiente figura muestra la comparación en rendimiento de ambas consultas, siendo la solución
tradicional ligeramente más eficiente que la solución propuesta en este documento, sin embargo
se observa que la diferencia es mínima.
Figura 5 – Comparación Plan de Ejecución: Consulta Tradicional vs Consulta Óptima.
Conclusiones Finales
Este método para resolver los requerimientos relacionados a funciones de agregación sobre
columnas es elegante en términos de codificación y fácilmente escalable, ya que permite incluir en
forma simple “N” columnas a la query, y el impacto en términos de posibles errores de digitación
es mínimo en comparación al método tradicional, por otro lado permite comprender fácilmente el
código implementado. Como desventaja podemos indicar que es ligeramente menos eficiente que
el método tradicional.
6. Método SQL para Calcular el valor máximo de un conjunto de columnas en una Tabla
Sebastián Rodríguez Robotham. www.EasyBI.cl 6 | P a g e
Anexo 1. Código de Ejemplo y Consideraciones en la cláusula UNION
A continuación se muestra el código a implementar para calcular los máximos, mínimos y
promedios de los clientes. Este ejemplo, además, pretende mostrar la diferencia que existe al
utilizar UNION, UNION ALL y AVG con valores NULL.
UNION vs UNION ALL
Como se muestra en la figura 6, el cliente “Mario” tiene valores repetidos (el valor 105 está 2
veces), por tanto al aplicar “UNION” considera solo un valor 105 y esto afecta el resultado del
promedio, en cambio cuando se aplica “UNION ALL” consideran todos los valores de las columnas,
aunque estos estén repetidos, a continuación se calcula manualmente esta fila:
Promedio con UNION : 578 + 105 + 168 + 189 + 714 = 1754 / 5 = 350 (Considera solo 5 valores)
Promedio con UNION ALL : 578 + 105 + 168 + 105 + 189 + 714 = 1859 / 6 = 309 (Valor correcto)
Función AVG vs Promedio Calculado Manualmente
Las columnas Promedio_01 calcula el promedio con AVG, mientras que Promedio_02 realiza la
suma de todas las columnas y divide en la cantidad de períodos. Como vemos en la figura 6, la
mayoría de los casos son idénticos, con excepción del cliente “Héctor”, dado que esta fila tiene
valores NULL. A diferencia del error por UNION, en este caso es necesario especificar el
comportamiento esperado con los puntajes, ¿se promedia con los puntajes reales o se promedia
por todos los períodos?, ¿Qué valor asignar en caso que no exista medición para ese cliente?, por
tanto en este caso no existe error de cálculo, sino que falta en la definición del criterio, por ese
motivo se presentan ambos resultados como válido en este ejemplo.
SELECT T1.*
,(SELECT MAX(Nota)
FROM (SELECT Puntaje_P1 AS Nota
UNION ALL SELECT Puntaje_P2
UNION ALL SELECT Puntaje_P3
UNION ALL SELECT Puntaje_P4
UNION ALL SELECT Puntaje_P5
UNION ALL SELECT Puntaje_P6 ) Alias) AS PuntajeMaximo
,(SELECT MIN(Nota)
FROM (SELECT Puntaje_P1 AS Nota
UNION ALL SELECT Puntaje_P2
UNION ALL SELECT Puntaje_P3
UNION ALL SELECT Puntaje_P4
UNION ALL SELECT Puntaje_P5
UNION ALL SELECT Puntaje_P6 ) Alias) AS PuntajeMinimo
,(SELECT AVG(Nota)
FROM (SELECT Puntaje_P1 AS Nota
UNION ALL SELECT Puntaje_P2
UNION ALL SELECT Puntaje_P3
UNION ALL SELECT Puntaje_P4
UNION ALL SELECT Puntaje_P5
UNION ALL SELECT Puntaje_P6 ) Alias) AS Promedio_01_UnionAll
7. Método SQL para Calcular el valor máximo de un conjunto de columnas en una Tabla
Sebastián Rodríguez Robotham. www.EasyBI.cl 7 | P a g e
,(SELECT SUM(Nota)
FROM (SELECT Puntaje_P1 AS Nota
UNION ALL SELECT Puntaje_P2
UNION ALL SELECT Puntaje_P3
UNION ALL SELECT Puntaje_P4
UNION ALL SELECT Puntaje_P5
UNION ALL SELECT Puntaje_P6 ) Alias) / 6 AS Promedio_02_UnionAll
,(SELECT AVG(Nota)
FROM (SELECT Puntaje_P1 AS Nota
UNION SELECT Puntaje_P2
UNION SELECT Puntaje_P3
UNION SELECT Puntaje_P4
UNION SELECT Puntaje_P5
UNION SELECT Puntaje_P6 ) Alias) AS Promedio_01_UnionSimple
,(SELECT SUM(Nota)
FROM (SELECT Puntaje_P1 AS Nota
UNION SELECT Puntaje_P2
UNION SELECT Puntaje_P3
UNION SELECT Puntaje_P4
UNION SELECT Puntaje_P5
UNION SELECT Puntaje_P6 ) Alias) / 6 AS Promedio_02_UnionSimple
FROM #TempRowToColumn T1
Figura 6 – Resultados de Query Final.
Nombre
Puntaje
_P1
Puntaje
_P2
Puntaje
_P3
Puntaje
_P4
Puntaje
_P5
Puntaje
_P6
Puntaje
Maximo
Puntaje
Minimo
Promedio_01
_UnionAll
Promedio_02
_UnionAll
Promedio_01_
UnionSimple
Promedio_02_
UnionSimple
Nicolas 735 158 399 473 378 147 735 147 381 381 381 381
Cesar 578 252 557 410 441 504 578 252 457 457 457 457
Hector 578 NULL 168 NULL 189 714 714 168 412 274 412 274
Mario 578 105 168 105 189 714 714 105 309 309 350 292
Daniela 683 473 399 326 347 294 683 294 420 420 420 420
Jorge 105 672 672 735 693 305 735 105 530 530 502 418
Cálculo Erróneo por Union Simple (considera solo una instancia del valor)
Diferencia de cálculo por valores NULL