Error 0x858c001b al instalar SQL Server

En la última instalación de Atlas SBI me he encontrado con el error 0x858c001b al instalar SQL Server.

En concreto:



SQL Server Setup has encountered the following error:

The SQL Server license agreement cannot be located for the selected edition, <EDITION>
. This could be a result of corrupted media or the edition being unsupported by the media.

Error code 0x858C001B.
El error se produce para cualquier versión (2012, 2014) y edición (Standard, Express,...) y es debido a que el idioma de Windows Server ha de coincidir con el idioma del SQL Server, en mi caso estaba instalando SQL Server ESN (Español) sobre un Windows Server en ENU (Inglés).

Parece ser que el error se produce incluso si las versiones de idioma y formatos de fecha no son exactamente iguales como podría pasar si se instala la versión española sobre un server con configuración de latinoamerica.

Más información en los links:
Más información »

Selección de actividades entre dos fechas

Uno de los criterios de selección que los usuarios suelen pedir con más frecuencia es poder analizar lo ocurrido entre dos fechas.

En aquellos Hechos que se producen en una fecha concreta, como por ejemplo, las facturas, las visitas a una página web, etc. La fórmula de selección es fácil y únicamente se ha de mirar si la fecha del Hecho está entre las fechas de inicio y de fin del periodo.

En otras palabras, suponiendo que la fechas de inicio y fin del periodo a evaluar se guarden en las variables FIniPeriodo y FFinPeriodo respectivamente, y la fecha del hecho se guarde en el campo FechaHecho, la fórmula de selección quedaría:

FIniPeriodo >= FechaHecho and FechaHecho <= FFinPeriodo

Actividades entre dos fechas
El tema se complica cuando queremos seleccionar las actividades abiertas entre dos fechas. Es decir, lo que queremos analizar son hechos que no se producen en un instante, sino que tienen lugar durante un periodo de tiempo. Por ejemplo, queremos analizar proyectos, expedientes, actividades de servicio, etc.

En este caso, hemos de tener en cuenta que la actividad tendrá dos fechas, la Fecha de Inicio de la Actividad (FIniActiv) y la Fecha de Fin de la Actividad (FFinActiv)

Lo primero que debemos tener claro es las variantes posibles entre fechas de inicio y fin de actividad y fechas de inicio y fin de periodo. La siguiente imagen nos muestra todas las posibilidades.

Esquema de actividades dentro de un periodo de tiempo

En concreto son:
  1. Que la actividad empiece antes de inicio del periodo y acabe dentro del periodo
  2. Que la actividad empiecen entre el periodo y acabe después
  3. Que la actividad empiece y acabe dentro del periodo
  4. Que la actividad empiece antes del periodo y acabe después
  5. Que la actividad empiece y acabe antes del periodo
  6. Que la actividad empiece y acabe después del periodo.
De todas estas, las que nuestro informe debe tratar son las 4 primeras (las que en la imagen están en verde).

El primer impulso para definir la condición que incluya los cinco casos que nos interesan, sería empezar a definir las condiciones que han de cumplir cada una de las posibilidades y unirlas mediante un or.

Sin embargo, existe una forma más fácil y limpia de hacerlo, y es concentrarnos en las que NO están dentro del periodo (las que no queremos analizar).

De esta manera, la fórmula que selecciona todas las actividades que están fuera del periodo es:

FFinActi < FIniPeriodo or FIniAct > FFinPeriodo

Una vez tenemos la condición, para obtener las actividades que SÍ están dentro del periodo, solamente tenemos que negar la condición.

Para ello, echaremos mano del algebra de Boole y en concreto de las leyes de Morgan que nos dicen que "la negación de las conjunción es la disyunción de las negaciones" y "la negación de la disyunción es la conjunción de las negaciones" o lo que se conoce como: No (A y B) es lo mismo que (No A) o (No B) -para la negación de la conjunción- No (A o B) es lo mismo que (No A) y (No B).

De esta manera, negando la condición que selecciona lo que queda fuera del periodo tendremos la condición que selecciona todas las actividades que quedan de alguna manera dentro del periodo. 

Por lo tanto, tendremos que:

Not (FFinActi < FIniPeriodo or FIniAct > FFinPeriodo) 

Aplicando la ley de Morgan


Not (FFinActi < FIniPeriodo) and Not (FIniAct > FFinPeriodo)

Finalmente, resolviendo cada una de las condiciones tendremos que la condición que selecciona las actividades que están dentro del periodo es:

(FFinActi >= FIniPeriodo) and  (FIniAct <= FFinPeriodo)






Más información »

Activar modo de compatibilidad con IE7

Cuando se abre Atlas SBI con un navegador Internet Explorer 9 o superior, es posible que los selectores y los menús no se desplieguen correctamente. Esto es debido a que se debe ejecutar con el Modo Compatibilidad activado.

El tema se soluciona solicitando al usuario que active el modo de compatibilidad cuando trabaje con nuestro servidor de Atlas SBI, pero esto no siempre es fácil. Lo mejor es disponer de un sistema que active el modo compatibilidad independientemente de la configuración del usuario.

Como explica José Manuel Alarcón en su artículo Forzar el modo compatibilidad, la forma de activar el modo compatibilidad de forma transparente para el usuario es añadir una cabecera en cada una de las páginas.
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>

Activación automática

La activación del modo de compatibilidad también se puede realizar de forma automática para todos los documentos de nuestro proyecto.

Para ello modificaremos los parámetros de la cabecera en el servidor (o en la aplicación virtual según sea conveniente) siguiendo los siguientes pasos:

Windows 2008 o superior
  • Abrir el Internet Information Services Manager
  • Seleccionar el servidor web (en su defecto se puede realizar a nivel de aplicación virtual)
  • Abrir la definición de HTTP Response Headers

Administración de IIS


  •  Crear una nueva cabecera con el siguiente contenido

Añadir Cabecera HTTP

Windows 2003
  • Abrir el Internet Information Services Manager
  • Seleccionar el servidor web (en su defecto se puede realizar a nivel de aplicación virtual)
  • Abrir las propiedades del servidor
  • Seleccionar la pestaña Encabezados HTTP
  • Agregar un nuevo encabezado

Añadir Cabecera HTTP W2003


Con estos sencillos pasos cuando un usuario abra los Documentos Analíticos con Internet Explorer se ejecutarán perfectamente independientemente de la configuración que tenga el usuario en su equipo.


Más información »

Sistema de ayuda para Documentos Analíticos

Aunque en general los gráficos, tablas o tacómetros son autoexplicativos, hay casos en los que conviene aclarar el tipo de información que se muestra, por ejemplo la selección que se ha realizado, si los datos se filtran con todos los selectores o que fórmula se ha utilizado para calcular el valor representado, de manera que el usuario pueda interpretar la información de manera correcta.

Atlas SBI - Sistema de Ayuda - Ventana de ayuda
Atlas SBI - Sistema de Ayuda - Ventana de ayuda


En este artículo veremos como construir un sistema de ayuda para nuestros documentos analíticos a fin de dotar al usuario de mayor información a la hora de analizar los datos mostrados.

Nuestro sistema de ayuda constará básicamente de dos elementos, una base de datos con una tabla para guardar la información a mostrar y un documento analítico con parámetros que mediante un control de tipo Grid mostrará los datos.

En el diseño del documento de ayuda veremos una técnica que nos permitirá cambiar el formato de las filas de los grids, rompiendo el tradicional esquema de filas y columnas. Esta técnica se utiliza también para mostrar la información de la ficha del cliente en el documento Cliente - Dashboard de la Demo autoinstalable de Atlas SBI.

Construcción de la base de datos

Como hemos comentado, la base de datos tendrá una única tabla llamada BIAyuda donde se indicará el Proyecto, Documento y Control al cual pertenece la ayuda, el orden en que queremos que se muestren los registros y como campos da ayuda un título, la ayuda propiamente dicha y una ayuda técnica (aclaración para los informàticos que utilicen el sistema de ayuda).

La tabla se puede crear utilizando el siguiente código SQL

USE [AyudaSBI]
GO
/****** Objeto:  Table [dbo].[BIAyuda]    ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[BIAyuda](
[Proyecto] [varchar](120) NULL,
[Documento] [varchar](100) NULL,
[Control] [varchar](50) NULL,
[Titulo] [varchar](200) NULL,
[Orden] [int] NULL,
[AyudaTecnica] [varchar](max) NULL,
[Ayuda] [varchar](max) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF

Una vez creada la tabla insertaremos unos registros de prueba. En este caso cuatro registros para cuatro controles del 'Doc1' de un proyecto llamado 'Ayuda'.

INSERT INTO [AyudaSBI].[dbo].[BIAyuda]([Proyecto], [Documento], [Control],[Titulo],[Orden],[AyudaTecnica],[Ayuda])
     VALUES ('Ayuda','Doc1', 'Control1', 'Grafico Evolución mensual', 10, null, 'El Gráfico de evolución mensual permite saber <br/>bla, bla, bla, <b>bla</b>, bla, bla')

INSERT INTO [AyudaSBI].[dbo].[BIAyuda]([Proyecto], [Documento], [Control],[Titulo],[Orden],[AyudaTecnica],[Ayuda])
     VALUES ('Ayuda','Doc1', 'Control2', 'Funcionamiento control2', 20, null, 'El control 2 permite el siguiente funcionamiento <br/>bla, bla, bla, <b>bla</b>, bla, bla')

INSERT INTO [AyudaSBI].[dbo].[BIAyuda]([Proyecto], [Documento], [Control],[Titulo],[Orden],[AyudaTecnica],[Ayuda])
     VALUES ('Ayuda','Doc1', 'Control3', 'Funcionamiento control3', 30, null, 'El control 3 permite el siguiente funcionamiento <br/>bla, bla, bla, <b>bla</b>, bla, bla')

INSERT INTO [AyudaSBI].[dbo].[BIAyuda]([Proyecto], [Documento], [Control],[Titulo],[Orden],[AyudaTecnica],[Ayuda])
     VALUES ('Ayuda','Doc1', 'Control4', 'Funcionamiento control4', 40, null, 'El control 4 permite el siguiente funcionamiento <br/>bla, bla, bla, <b>bla</b>, bla, bla')

Como se puede observar, dentro del campo Ayuda insertamos código HTML para mejorar la presentación y facilitar la lectura del contenido.

Creación del documento de ayuda

Una vez creada la conexión a la base de datos, crearemos un documento llamado 'Ayuda Documentos Analíticos' y le asignaremos cuatro parámetros: Proyecto, Documento, Control y AyudaTecnica.

Atlas SBI - Creación Documento Ayuda - Parámetros
Atlas SBI - Creación Documento Ayuda - Parámetros

Seguidamente añadiremos un control de tipo Grid para seleccionar los datos que mostrará nuestro documento de ayuda. La selección se hará utilizando los parámetros del documento Proyecto, Documento, Control y AyudaTecnica.

Atlas SBI - Creación Documento Ayuda - Control Grid
Atlas SBI - Creación Documento Ayuda - Control Grid

El parámetro AyudaTecnica determinará si queremos que nuestro documento muestre el contenido del campo AyudaTecnica. El resto de parámetros determinará que registros se seleccionan de manera que la sentencia retornará todos aquellos registros del Proyecto, Documento y Control seleccionados o, en caso de que el parámetro Control contenga el valor '-Todos-', retornará todos los registros del Proyecto y Documento seleccionado.

Atlas SBI - Creación Documento Ayuda - Select del Grid
Atlas SBI - Creación Documento Ayuda - Select del Grid
Una vez tenemos la selección, generamos las columnas utilizando el botón de Generar Columnas y asignamos el campo Titulo como Clave Unica.

Atlas SBI - Creación Documento Ayuda - Columnas del Grid
Atlas SBI - Creación Documento Ayuda - Columnas del Grid

Cambio del formato de la tabla de datos

Para facilitar la lectura de la ayuda cambiaremos la estructura tradicional de filas y columnas de nuestro Grid cambiando la disposición de los campos mediante una plantilla HTML en la sección Data Row Template.

Atlas SBI - Creación Documento Ayuda - Formato de las columnas del grid
Atlas SBI - Creación Documento Ayuda - Formato de las columnas del grid

Distribuyendo los campos en filas con codigo HTML para destacar los puntos que creamos conveniente como por ejemplo el título o definir el tamaño.

Atlas SBI - Creación Documento Ayuda - Formato de las columnas del grid
Atlas SBI - Creación Documento Ayuda - Formato de las columnas del grid
Una vez hayamos colocado el control Grid en el diseño HTML del documento estará listo para ser llamado desde cualquier control.

Llamada desde un control

Para llamar a la ayuda, abriremos el control desde el que queremos llamarla y crearemos un enlace al documento que acabamos de crear.

Atlas SBI - Creación enlace al documento de Ayuda
Atlas SBI - Creación enlace al documento de Ayuda

En el campo Texto del menú escribiremos el texto que queremos que le aparezca al usuario cuando haga clic sobre el control. Este texto ha de ser fácilmente entendible por lo que en este ejemplo pondremos 'Como interpretar este gráfico'.

Atlas SBI - Creación enlace al documento de Ayuda
Atlas SBI - Creación enlace al documento de Ayuda

En los parámetros del enlace activaremos la opción Valor y asignaremos los valores de Proyecto, Documento y Control que correspondan, así como si queremos que se muestre la ayuda técnica o no.

Una vez guardado el proyecto, podremos ver que nuestro control muestra una nueva opción al hacer clic sobre él con el texto de la ayuda.

Atlas SBI - Sistema de Ayuda
Atlas SBI - Sistema de Ayuda

Y al seleccionar la opción mostrará el contenido de la ayuda definida en la base de datos.

Atlas SBI - Sistema de Ayuda - Ventana de ayuda
Atlas SBI - Sistema de Ayuda - Ventana de ayuda


Llamada desde el documento

Creación de un botón 

Podemos utilizar el mismo sistema para proporcionar ayuda a todo el documento. Para ello crearemos un control de tipo Button al que le asignaremos el texto Ayuda.
Atlas SBI - Sistema de Ayuda - Creación botón Ayuda
Atlas SBI - Sistema de Ayuda - Creación botón Ayuda

Llamada al documento de ayuda

Tal como hicimos en el ejemplo anterior, crearemos un enlace a nuestro documento de ayuda. En este caso adaptaremos el texto del menú cambiando 'gráfico' por 'documento', ampliaremos el alto de la ventana, y lo más importante, en el parámetro Control escribiremos el texto '-Todos-' para que seleccione todos los registros de ayuda del documento y proyecto concretos.

Atlas SBI - Sistema de Ayuda - Creación botón Ayuda
Atlas SBI - Sistema de Ayuda - Creación botón Ayuda

Insercción del botón en el panel

Seguidamente añadiremos el botón creado al panel de selectores añadiendo un margen para que se desplace a la derecha. y guardaremos nuestro proyecto.

Atlas SBI - Sistema de Ayuda - Creación botón Ayuda
Atlas SBI - Sistema de Ayuda - Creación botón Ayuda

Con esto conseguimos que al pasar sobre el botón Ayuda se desplegue la opción como interpretar el documento.
Atlas SBI - Sistema de ayuda de documento
Atlas SBI - Sistema de ayuda de documento

Que al ser seleccionada abre una ventana con la ayuda de todos los controles del documento que se haya definido en nuestra base de datos de ayuda.

Atlas SBI - Sistema de ayuda de documento
Atlas SBI - Sistema de ayuda de documento

Este ejemplo se puede mejorar añadiendo campos a la tabla de base de datos para ofrecer una ayuda más personalizada como por ejemplo el idioma o el rol en caso de que diferentes usuarios deban tener información diferente.

Más información »

C04. Creación de un Report PDF

Uno de los controles que incorpora Atlas SBI para crear Documentos Analíticos es el Report PDF. Con este control se pueden crear informes estáticos en formato PDF que garantizan la perfecta impresión del documento.

Report en PDF con Atlas SBI
Report PDF con Atlas SBI

El control Report incorpora, él sólo, toda la potencia de los sistemas de reporting tradicionales como Cristal Report o jReport.

Además de toda la potencia de diseño que permite incorporar imágenes personalizadas para cada registro, generación de códigos de barra, menús de marcadores, etc. Cuando el usuario abre el Documento Analítico que contiene el Report PDF, podemos elegir entre mostrarle directamente el informe en PDF o una página web con el informe renderizado y la posibilidad que él mismo guarde el documento en uno de los siguientes formatos:

  • PDF
  • RTF (Word)
  • Excel
  • CSV
  • Texto
  • MHT (HTML)
  • Imagen
En el siguiente video vemos como crear un informe PDF con la información de los vendedores de una empresa con un gráfico de la evolución sus ventas, convenientemente maquetado.


El video mostrado aquí requiere una versión más reciente de Adobe Flash Player. Si está utilizando un navegador con JavaScript desactivado, por favor actívelo ahora. En caso contrario, por favor, actualice la versión gratuita de Flash Player descargándolo aquí.

Más información »

Union in Memory

En el artículo Joins in Memory vimos como unir dos tablas en memoria mediante un Join de manera que el resultante era una tabla con las mismas filas que la tabla principal pero el total de columnas de las dos tablas.

En determinados casos, nos puede interesar unir los resultados de dos consultas una detrás de otra en la misma tabla resultante, o lo que es lo mismo, realizar un UNION en memoria.

Si las dos tablas están en la misma base de datos se puede realizar mediante una única consulta

Select 'Ventas' as Serie, Mes, Sum(ImporteBruto) as Valor
FROM VistaVentas
Where Ejercicio = 2014
Group By Mes

UNION

Select 'Objetivo' as Serie, Mes, Sum(Objetivo) as Valor
FROM Objetivos
Where Ejercicio = 2014
Group By Mes

Sin embargo, esta operación no se puede realizar en caso de que las bases de datos de Ventas y de Objetivos estén en sistemas diferentes, en este caso podemos utilizar los pasos de Atlas SBI para obtener nuestra tabla unida.

En primer lugar crearemos un paso con la consulta de los valores


Seguidamente crearemos un nuevo paso de tipo DataBaseQuery.



y modificaremos el nombre de la tabla destino (Target table) poniendo el mismo nombre de la tabla destino del primer paso tal como indica la siguiente figura.


acto seguido podremos seleccionar la nueva conexión y especificar la consulta, teniendo en cuenta, eso sí que los nombres de campos han de coincidir con los nombres de campos de la primera consulta.




Más información »

Mejorar la cabecera de las tablas de datos

Existe un reconocimiento prácticamente unánime en que la calidad de las cosas se ve en los pequeños detalles y en el caso de los informes y Documentos analíticos, que estos pequeños detalles hacen los informes mucho más legibles y por lo tanto útiles.

En este artículo vamos a ver como mejorar las cabeceras de los grids para evitar títulos genéricos tipo "Año Actual" o "Año anterior", sustituyéndolos por el valor del año o mes que muestra la columna, o como utilizar dos líneas para dar mayor claridad y utilizar menos espacio.

Atlas SBI - Personalización de cabeceras
Cambio de línea
El cambio de línea se consigue insertando la pareja de caracteres ^| que provocan un salto de línea y una barra de separación entre líneas respectivamente como se puede apreciar en la imagen siguiente que corresponde al último grid de la imagen anterior.

Atlas SBI - Mejora de los títulos de las cabeceras

El acento circunflejo (^) se puede conseguir pulsando la tecla correspondiente del teclado -habitualmente al lado de la [P] y seguidamente la barra espaciadora. La barra o pipe (|) se obtiene con la combinación [AltGr]+[1].

Expresión dinámica
Si queremos que el valor de la cabecera de la columna sea dinámico podemos definirla como una expresión pulsando el botón del campo "Cabecera Expresión" y escribiendo la fórmula en la pantalla del editor de expresiones.

Atlas SBI - Definición de una expresión para la cabecera de la columna

En las expresiones podemos utilizar los valores de los parámetros que recibe el control o el documento, así como otros valores dinámicos de entorno. 

El ejemplo define la cabecera del valor correspondiente al acumulado del año anterior, por lo que al literal "Pr. Medio^|Ac." le concatena el valor del parámetro Ejercicio -1. De esta manera, la información aparecerá en dos líneas, y cuando el usuario seleccione el año 2013 aparecerá Ac. 2012.

Más información »

Abrir una URL desde un Grid

Si nuestras aplicaciones están en entorno web, es muy probable que desde los Documentos Analíticos queramos acceder a ellas mediante una URL.

El caso más habitual es la apertura de una página web mediante una URL desde una tabla de datos, pero este mismo tutorial se puede adaptar para cualquier otro tipo de contro.

Atlas SBI - Lista de páginas web
Atlas SBI - Lista de páginas web


Creación de un documento Abrir URL
La forma de abrir una página web desde una URL es crear un Documento Analítico que reciba una URL como parámetro y la abra en un Frame que ocupe el 100% de la página.

El primer paso será crear el documento analítico y el paràmetro que recibirá la URL.


Atlas SBI - Creación documento con parámetro
Atlas SBI - Creación documento con parámetro

Insercción del control Simple Data
Una vez tenemos el documento y el parámetro necesitamos poder capturar el parámetro y tratarlo para generar el frame. Para ello utilizaremos el control más simple que tenemos que es el Simple Data.



Obligatoriamente hemos de definir un contenido en la fuente de datos, pero como no lo utilizaremos, podemos poner cualquier cosa que no afecte al rendimiento como por ejemplo:
Select '' as campo.


Atlas SBI - Pantalla de definición de SimpleData
Atlas SBI - Pantalla de definición de SimpleData

Configuración del frame
La configuración del Frame la realizaremos en la pestaña Diseño HTML del control, justo encima del codigo del control $[Control:This]$.

En este punto, es importante destacar que el ancho y alto del control debe estar en porcentaje y no en píxeles como es habitual. También que el la etiqueta HTML iframe ha de especificar, por un lado el parámetro recibido en el atributo src, y por otro que la anchura y la altura también se ha de especificar en 100%,

Atlas SBI - Configuración del Frame en el Control SimpleData
Atlas SBI - Configuración del Frame en el Control SimpleData

Utilización del 100% de la página
Seguidamente, configuraremos la página para que ocupe todo el espacio posible. Esto lo haremos insertando estilos en el código HTML tal como muestra la siguiente pantalla.

Atlas SBI - Configuración del la página HTML con el iframe
Atlas SBI - Configuración del la página HTML con el iframe


<html>
  <head>
    <style
type="text/css">
        html, body, form {
        height:100%;
width: 100%;
margin: 0;
padding: 0;
border: 0;
offset: 0;
color:white;
}
#wrapper {
position: absolute;
top: 18px;
left: 5px;
bottom: 2px;
right: 5px;
}

    </style>
  </head>
  <body>
    <form>
<div
id='wrapper'>
    $[Control:Simple2]$
</div>
    </form>
  </body>
</html>

Llamada desde otro documento
Ya sólo nos queda llamar el documento creado desde cualquier control como por ejemplo una tabla con dos columnas, el nombre de la página web y una URL.

Atlas SBI - Definición columnas de una tabla
Atlas SBI - Definición columnas de una tabla

En la sección Pestaña Enlaces añadiremos un enlace al documento que acabamos de crear (en el ejemplo Abrir URL), y definiremos, el texto del menú, el contenedor (por lo general una nueva ventana) y las propiedades de la ventana. Finalmente, definiremos como parámetro la URL del la fila seleccionada en el control.

Atlas SBI - Añadir un enlace a un documento
Atlas SBI - Añadir un enlace a un documento

Más información:












Más información »

Anotaciones dinámicas en gráficos


Con Atlas SBI se pueden incluir anotaciones en un gráfico de forma automática. Esta característica puede ser útil para asociar eventos o hechos a gráficos de evolución, como por ejemplo ver en como han variado las ventas desde que finalizó un proyecto o se tomó una decisión.


Evolución de ventas con anotación 

Para ello, la consulta de nuestro gráfico ha de incorporar el comentario que se desea poner asociado al argumento sobre el que queramos incluir el comentario.

Consulta con anotación asociada a Octubre

Una vez tenemos definida la consulta, asignamos el campo de la anotación/comentario al combo Anotaciones de las propiedades del gráfico.

Selección del campo que contiene el comentario


Para el ejemplo hemos creado con una anotación con una expresión fija, pero se puede hacer mediante dos Querys (una para las series numéricas y otra para la búsqueda de eventos en una base de datos) y un Join in Memory que las una.

Creación de un paso de Join entre dos consultas




Más información »

Lo más visto