Tuesday, January 24, 2012

Concatenar filas en SQL

A veces quisiéramos mostrar en nuestro reporte por cada maestro, un detalle de datos no en filas sino separados por coma. Por ejemplo, en un x contrato están asociados n servicios. Estos servicios están guardados en una tabla mientras que el contrato en sí, está guardado en otra. Por tanto si el contrato tiene asociados más de un servicio, vamos a tener n filas de servicios y con el join vamos a tener la misma n filas de datos del contrato siendo que n-1 están repetidas.

Me dejo entender, no?

La vaina es concatenar filas. Hay muchas formas de hacerlo. Pero la que he usado y me ha favorecido es "FOR XML PATH"

Por ejemplo, la forma más sencilla, un SELECT directo sin JOIN sería así:

SELECT descripcion + ', ' FROM Servicios_Detalle WHERE cod_servicio=1 FOR XML PATH('')

En la consulta se está agrupando en una sola fila todos los ítem que cumplan el Where dado.

Podrás notar que el resultado se vuelve un link.

Y con un JOIN sería así:

SELECT d.cod_servicio, d.descripcion AS maestro,
(SELECT descripcion + ', '  FROM Servicios_Detalle d2 WHERE d2.cod_servicio=d.cod_servicio FOR XML PATH('')) AS detalles
FROM Servicios d

Esta consulta concatena las filas de detalle que pertenezcan a un maestro dado. La cantidad de filas de resultado será la misma cantidad de filas que hay en la tabla maestro. Ya no se repetirán pues todo estará resumido en una sola fila.

HaPPy CoDiNg! =)

Wednesday, January 18, 2012

Alternar color De fila en reporting services

Tenemos nuestra tabla de datos, son muchas filas y el alternar color de fila más allá de lo bonito que se ve, creo que permite una mejor lectura de la info.

Hoy me tocó hacer eso y el código es sencillo. No voy a hacer una captura de pantalla de mi reporte porque allí tengo datos confidenciales. Los colores que estoy intercalando es el Gainsboro con el Transparent.

Aquí te van los pasos:

1. En el diseño de Reporting Services, selecciona la fila.


2. Clic derecho, clic en Properties/Propiedades. (También puedes digitar F4 directamente)

3. Se te desplega el cuadro de propiedades.

4. En la propiedad que lleva por nombre "BackgroundColor", desplegas el combo y das clic en "Expression"


5. Se te abrirá la siguiente ventana emergente, allí debes agregar el siguiente código:

= IIf(RowNumber(Nothing) Mod 2 = 0, "Gainsboro", "Transparent")


6. Podés alternar con los colores de tu preferencia.

HaPPy CoDiNg!

Monday, January 16, 2012

No mostrar control cuando No hay datos (reporting services)

Cuando no hay datos, nuestros controles no se cargan, si bien no se ven, sí dejan un espacio y eso es lo que queremos evitar.

Hace un tiempo, esta respuesta fue contestada para Crystal Reports (http://lizzymendivil.blogspot.com/2011/08/no-visualizar-un-subreporte-crystal.html)

Ahora, la forma de hacerlo para Reporting Services es algo distinta pero más sencilla:

Clic derecho sobre el control que vamos a ocultar en el caso de que no hayan datos, clic en Properties. Clic sobre la pestaña Visibility. Elije la opción "Expression", clic sobre el botón de función (fx) o ingresa lo siguiente sobre el textbox de Expression:

= IIf (CountRows() = 0, true, false)


Y nada más!

HaPPy CoDiNg =)

Tuesday, January 10, 2012

Cabecera líquida - CSS

A la hora de maquetar nuestra página web, tenemos dos opciones con respecto al header o cabecera. Una es la cabecera líquida y la otra es la cabecera fija.

La líquida, a diferencia de la fija, se adaptará a la resolución de la pantalla del usuario que está visualizando nuestro sitio.

(Blogger.com utiliza cabecera líquida)

Maquetación con Cabecera Fija

Tenemos un div mayor como contenedor de todo, allí dentro estará la cabecera, el menú, el contenido, el pie de página y las cajas que querramos meterle.

Código XHTML


Maquetación con Cabecera Líquida

A diferencia del anterior, aquí el contenedor mayor no contendrá a la cabecera (incluso puede no contener el menú). La cabecera estará fuera.

Código XHTML

Nombre del Sitio

Slogan del Sitio

Bienvenido

Párrafo ...
Pie de pagina

Código CSS

* 
{
 margin:0;padding:0;
}

body 
{
 font-family: Arial, Helvetica, sans-serif;
}
h1,h3
{
 margin-left:10px;
}

#cabecera 
{
 height:75px;color:#fff;background:#036;
}

#contenido 
{
 width:770px;
 margin:0 auto;
 text-align:justify;
}
#pie 
{
 text-align:center;
 border-top:1px solid #eee;
 margin-top:20px;
}