Configurando Analisys services para acceso HTTP o HTTPS

Posted by Miguel Egea | Posted in Analisys Services | Posted on 01-09-2011

1

Aunque es un artículo para SQL 2005 lo cierto es que vale para 2008 también. La historia es que dado que la autenticación de Analisis Services es siempre basada en windows, se presentan problemas como por ejemplo que alguien que no esté en el dominio tenga que acceder a los datos. O que alguien, aunque tenga un usuario del dominio, necesite ver los datos desde casa.

La problematica es doble, de un lado, garantizar la seguridad, de otro, que los datos, usuario y password viajen encriptado. La solución es habilitar el acceso a través de IIS y delegar esa parte en IIS. Se securiza el sitio con https a través de un certificado y simplemente se sigue el paso a paso que indica este artículo. Si tu versión es más moderna, aquí lo tienes con IIS 7.0

 

Instalando la CTP3 de SQL Server 2011, CodeName Denali

Posted by Miguel Egea | Posted in Analisys Services, Noticias, Relacional | Posted on 23-08-2011

0

Aunque ya lo publicamos hace algun tiempo, la versión CTP3, del nuevo SQL Server está aquí. Desde el pasado Noviembre en que tuvimos acceso algunos pocoas a la CTP1, en PASS hasta ahora, muchas cosas han aparecido y están implementadas, ayer mismo linkabamos un avance de las novedades TSQL, muchas novedades en funciones de Ranking, algunas no incluidas en el artículo de Enrique.

Recordad que esto es una guía, y aunque omita pasos es muy muy sencilla.

Nota, yo lo he instalado en inglés, porque me siento más cómodo con las versiones en inglés.. creo que hay versión en castellano,

Lo bueno de las versiones CTP publicas es que todos podemos jugar con ellas, todos podemos cacharrear. Para que os hagais una idea de los pasos que hay que seguir voy a ir poniendo el paso a paso que yo he seguido. No será un tutorial al uso, omitiré seguramente cosas que me parezcan obvias. Espero no obstante, no omitir ninguna que el lector considere importante.

Comenzando con esto, lo primero que hemos de hacer es descargar la versión. Nos pedirá que nos registremos y podremos descargarlo. Podéis seguir este link para comenzar esa operación.

Una vez completado el proceso.. acabará teniendo una pantalla muy parecida a esta.

Hecha la descarga vamos a seguir con la instalación del producto, recordad elegir la versión adecuada, 32 o 64 bits a vuestro sistema operativo, y revisar los requisitos del sistema para asegurar que no perderéis el tiempo, es decir que finalmente conseguireis instalar.

Tras descargar, hemos de ejecutar el programita de setup, que realmente nos descomprimirá los fcheros en una carpeta, como podeis ver en las dos siguientes imágenes

y en la siguiente que podeis ver la carpeta donde está el fichero Setup.exe.. que habremos de ejecutar.

Al ejecutarlo, nos aparecerá la pantalla tipica desde SQL Server 2005, en donde está la parte de Planning, es decir donde decidimos y comprobamos los requisitos.

y tras eso, pulsaremos en Installation y haremos el setup que necesitemos ( en nuestro caso nueva instancia StandAlone)
>

Una vez elegida la instalación que vamos a realizar, el propio instalador comprueba que la instalación será exitosa, que no hay pre-requisitos pendientes para que funcione el instalador y nos ofrece este resumen de las cosas que ha comprobado. Este resumen, por defecto está escondido, pero se puede ver fácilmente.

Al pulsar siguiente aparecerá la pantalla de licencia, obviamente hemos de leer y aceptar los terminos de licencia, que es de evaluación de 180 dias, y continuar con la instalación.

El producto en ese momento se conecta a Internet para ver si hay actualizaciones de la CTP que aplicar, en mi caso detectó 2, y en sistemas no en producción, como es el caso, lo mejor es instalarlo todo. En producción es otra historia, hay que probar, al menos mínimamente que el impacto no es negativo.

Además de las comprobaciones del instalador y prerequisitos, el asistente también comprobará que no van a existir problemas conocidos con la instalación de los ficheros de soporte, así pues se comprueban estos 8 puntos. y tienen que pasar todos (aunque sea con warning) para que la instalación pueda completarse.

Tras las comprobaciones hay que ver que cosas queremos hacer. Instalar los servicios o quizá instalar PowerPivot para Sharepoint o quizá añadir funciones. En nuestro caso vamos a hacer una nueva instalación.

Ahora el Asistente nos permite seleccionar las herramientas que instalaremos, yo he instalado todo lo que tengo intención de probar, pero nada relacionado con Sharepoint puesto que no voy a probar, de momento esa parte.

Tras esto tenemos que elegir el nombre de instancia, en mi caso, además vereis que aparecen otras instancias ya instaladas, la edicion enterprise de SQLServer 2008 R2 y la edición developer de SQL SErver 2005. con las versiones y parches que tengo instalados. En mi caso puedo elegir default instance, porque no tengo ninguna instancia por defecto, aún así, he preferido poner como nombre de instancia SQLDenali, me gustan las instancias nombradas :) .

Permisos y cuentas: Esta parte, es muy importante en instalaciones no de test, como la mia. Yo suelo poner cuentas de dominio sin ningún privilegio, de esa forma el propio asistente da los permisos mínimos que necesita. Esto hace que luego esa cuenta no tenga acceso a muchos directorios, pero eso, que puede ser percibido como un problema, es sin embargo una norma de seguridad básica.
Otra pestaña, de la que no ponemos mensaje, pero que es necesario saber que hace es la de Collation, esto indicará el modo por defecto del servidor, es decir el modo por defecto de las bases de datos, y el modo por defecto de cada columna de texto. Es importante porque cada Collation lleva implicito una ordenación, si distingue o no entre mayúsculas y minúsculas… en fin que no es algo de poca importancia.

Tras dejar cerrado el apartado seguridad y colation, llegamos al apartado de Analysis Services Configuration (esto supongo que solo sale si has instalado Analysis Servcies). Esta nueva versión lleva incorporado un nuevo modo, además del tradicional, Ambos no pueden funcionar a la vez en la misma instancia. Digamos que TAbular Mode es una especie de PowerPivot de Servidor, pero no tiene, aún al menos, toda la potencia que esperamos de analisis services, tiempo tendremos de ir hablando sobre él.
De momento en esta instalación instalaremos el modo tradicional.

DEspues de pulsar siguiente.. el instalador ya tiene los datos que necesita…. ahora paciencia. A esperar a que termine la instalación y a disfrutar del siguiente cartel, cuando salga.

Espero que os resulte de utilidad.

Charla Introducción a MDX

Posted by Miguel Egea | Posted in Analisys Services, MDX | Posted on 05-06-2011

0

En este link Podreis seguir la charla que tuve el placer de impartir para el capítulo español de PASS, es una mera introducción a MDX con unos poquitos conceptos básicos y algunos ejemplos.
Aquí teneis las diapositivas de la Introduccion a MDX y en este otro link el script mdx sobre Adventure Works.

Espero que lo disfruteis

Delegación, Kerberos, Reporting Services, single sign-on y otras hiervas

Posted by Miguel Egea | Posted in Analisys Services, Reporting Services | Posted on 29-10-2010

1

Pues sí, tras este título se esconde un dolor de muelas de muchos usuarios de Reporting services contra Analisys Services. Como sabeis Analisys Services solo admite seguridad integrada con Windows, lo que quiere decir que solamente con un usuario autenticado de windows puedes entrar a ver los datos del cubo.
Esto en sí es genial, un solo sitio donde consultar la información y una sola vez para hacer login, al entrar en tu PC, sin embargo, cuando creas un informe de Reporting Services que a su vez se conecta a Analisys Services se pueden presentar varios escenarios.
Si tu Servidor contiene SSAS y SSRS en la misma máquina, no es necesaria la delegación, sin embargo si están en server distintos, es necesario que las credenciales vayan desde el cliente (Internet Explorer u otro navegador) al server de reporting y que este, a su vez las delegue en el servidor de SSAS, para eso hay que hacer un montón de configuraciones. En este link y en este otro teneis mas información sobre la configuración.

Bueno, pues despues de hacer esto, vereis que si poneis seguridad integrada de windows, sigue sin funcionar. El truco está en elegir que se conecte con un usuario y un password y luego decir que inmediatamente se impersone al usuario que ha conectado. SSRS usará el mismo mecanismo que management studio y Visual studio para comprobar los roles, que básicamente es añadir a la cadena de conexión un EffectiveUserName, del que realmente SSAS evaluará los privilegios. Simple.. pero complicado de encontrar por la red.

Este es el dibujito para que lo veais más claro

Saludos

Acumulado, año anterior y periodos paralelos en MDX

Posted by Miguel Egea | Posted in Analisys Services, MDX | Posted on 04-08-2010

2

En el  SolidQuality Summit 2010, preparé una sesión de MDX que fué realmente una sesión a medida de los alumnos, o al menos lo fué en la medida de lo posible. En esa sesion, una de las preguntas iba en el hilo de calcular no solo el acumulado anual, sino también el acumulado anual de años anteriores. 

En las siguientes lineas iremos viendo como hacer esto en MDX. La primera parte será crear el acumulado anual, para eso, nos valdremos de una dimensión tiempo bien definida, en este mismo portal tenéis ejemplos de como hacerlo y podéis ver que se entiende por bien definida, así que no me entretendré mucho en esa explicación.  Es necesario que esté definida bien como tiempo nuestra dimensión, básicamente porque  vamos a usar las funciones YTD() y paralellperiod, ambas necesitan esa definición de forma adecuada. YTD() devuelve un conjunto , que representan en el nivel actual todos los periodos desde el pricipio de año. Paralleperiod, recibe 2 o 3 parámetros, el nivel, el número de elementos y el miembro, en mis ejemplos vereis suministrados 2, el tercero, el miembro será el currentmember de la dimensión tiempo bien definida.

Comenzamos con el acumulado anual, aquí teneis el código para Adventure Works

with member acumuladoanual as
 sum(ytd(),Measures.[Internet Sales Amount])
select acumuladoanual on 0, 
[Date].[Calendar].[Month] on 1
from [Adventure Works]

ytd() es un conjunto, de los meses en este caso, y el sum(ytd(), ventas), lo que hará será sumar todos los valores de la tupla mes,Venta, es decir, mostrará el acumulado del año que estemos visualizando, que es en resumen lo que queríamos conseguir.
De no usar YTD(), podríamos usar funciones equivalentes recorriendo jerarquías, ya sean tiempo o no, y usando rangos… dejamos eso para el lector o para futuras ocasiones.

Lo siguiente que necesitamos es el periodo anterior, es decir, el valor de las ventas para el mismo mes del año anterior. La función que vamos a usar es ParallelPeriod, de la que ya hemos comentado los parámetros. La fórmula quedaría como sigue:

with member anioanterior as
    (parallelperiod([Date].[Calendar].[Calendar Year],1),
     Measures.[Internet Sales Amount])
select {Measures.[Internet Sales Amount],anioanterior} on 0,
[Date].[Calendar].[Month] on 1
from [Adventure Works]

El resultado, el esperado, obtendremos el valor de las ventas del mismo mes del año anterior. Esta función es curiosa cuando se trata de otros paralelismos, por ejemplo a nivel de día ¿que pasa con los 29s de febrero de los años bisiestos? La función esta implementada realmente como un Cousin, es decir como el primo al mismo nivel que yo por lo que puede ser que no exista y ponga nulo o que sea otro miembro (como pasa si comienzas tu dimensión tiempo en Julio al estilo de Adventure Works) obteniendo datos que pueden no tener sentido de negocio. Sed cuidadosos con esto y sobre todo comprobadlo .

Y ahora ¿lo usamos todo junto?

with member acumuladoanual as
 sum(ytd(),Measures.[Internet Sales Amount])
 member anioanterior as
    (parallelperiod([Date].[Calendar].[Calendar Year],1),
     Measures.[Internet Sales Amount])
member anioanterioracum as
    (parallelperiod([Date].[Calendar].[Calendar Year],1),
     Measures.[acumuladoanual])     
select {Measures.[internet Sales Amount],anioanterior,acumuladoanual,anioanterioracum} on 0, 
[Date].[Calendar].[Month] on 1
from [Adventure Works]

En este caso estaremos obteniendo por un lado, el importe de ventas, las ventas del mismo periodo del año anterior, el acumulado de este año, y usando ambas combinadas el valor de la misma venta el año anterior

Espero que se entienda y os guste.

Viendo productos sin venta en los último X meses con MDX

Posted by Miguel Egea | Posted in Analisys Services, MDX | Posted on 18-07-2010

2

Haca unos dias, un amigo, y alumno de un curso de MDX que impartí lanzaba esa pregunta en los post, ¿como saber los artículos que no han tenido venta en los últimos tres meses. Para eso hace falta saber que dia es hoy, aunque en realidad, me parece que es mejor olvidarse de que dia es hoy y hacerlo genérico. Vamos a ver como podriamos hacer eso.

Bueno, vamos a ir por partes.. lo primero que vamos a hacer es ver como calcular el día de hoy.

with member hoy
as
 now()
select hoy on 0
from [Adventure Works]

despues vamos a ver como sacar el conjunto de articulos con ventas en un mes.

select  exists([Product].[Product].product*[Date].[Calendar].[Month].members,,
		  "Internet Sales")
  on 1,
        {Measures.[Internet Sales Amount]} on 0
from  [Adventure Works];

el conjunto que forman los meses y  los productos que han tenido ventas es lo que nos devuelve la clasula de arriba.

Ahora vamos a calcular los que no han tenido ventas en absoluto, para ello simplemente hacemos una resta de conjuntos, es decir, todos los productos menos los que han tenido ventas

select  [Product].[Product].product*[Date].[Calendar].[Month].members-
exists([Product].[Product].product*[Date].[Calendar].[Month].members,,
		  "Internet Sales")
  on 1,
        {Measures.[Internet Sales Amount]} on 0
from  [Adventure Works];
 

De esta forma tenemos los articulos sin ventas en un mes concreto, porque son aquellos que no tienen datos en el grupo de medidas Internet Sales, para el mes en cuestion. El problema viene porque ahora necesitamos saber los que no tienen ventas en los últimos tres meses. Para poder usar Exist, necesitariamos tener un grupo especial que tuviese en el mes actual las ventas de los últimos tres meses para cada producto y comprobar su existencia. El resultado sería rápido, pero parece que quedaría bastante engorroso de hacer, además implica cambios en el ETL y eso siempre quiere decir, mucho tiempo, muchas pruebas. Así pues dejamos esta via solamente para el caso de que el rendimiento no se corresponda con el necesario. En otro caso pasamos al plan B y usamos el método filter.

	select
	filter ( [Product].[Product].product*
				[Date].[Calendar].[Month].members  ,
				 sum(([Date].[Calendar].currentmember.lag(3):[Date].[Calendar].currentmember),Measures.[Internet Sales Amount])>0) on 1,
				Measures.[Internet Sales Amount] on 0
	from  [Adventure Works];

si nos fijamos he usado la cláusula Sum para el filter, esto penalizará rendimiento, sin duda,.. considerad hacer esta medida física aun si es en el mismo grupo de medidas para mejorar el rendimiento. Aún este ejemplo nos está mostrando los que si tienen ventas en los últimos 3 meses.. veamos los que no… creo que se vé facil, si has llegado hasta aquí :)

	select [Product].[Product].product*[Date].[Calendar].[Month].members -
	filter ( [Product].[Product].product*
				[Date].[Calendar].[Month].members  ,
				 sum(([Date].[Calendar].currentmember.lag(3):[Date].[Calendar].currentmember),Measures.[Internet Sales Amount])>0) on 1,
				Measures.[Internet Sales Amount] on 0
	from  [Adventure Works]

Esta consulta tardó casi 15 segundos (una barvaridad) en mi portatil contra adventure works, si la personalizamos a un único mes.. tardará mucho menos, claro.

	select [Product].[Product].product-
	filter ( [Product].[Product].product
				,
				 sum(([Date].[Calendar].currentmember.lag(3):[Date].[Calendar].currentmember),Measures.[Internet Sales Amount])>0) on 1,
				Measures.[Internet Sales Amount] on 0
	from  [Adventure Works]
	 where
	[Date].[Calendar].[Month].&[2004]&[7]

y si ahora lo enlazamos con el now que veiamos al principio.. (ojo , no funcionará a menos que le pongas el reloj al server a un valor que de un miembro válido) Además ojo con usar STRTOMEMBER, que puede dar también problemas de rendimiento, no en este ejemplo.. pero si en general

with member ahora as
    "[Date].[Calendar].[Month].&[" +cstr(year(now()))+ "]&["+cstr(month(now()))+"]"
	select [Product].[Product].product-
	filter ( [Product].[Product].product
				,
				 sum(([Date].[Calendar].currentmember.lag(3):[Date].[Calendar].currentmember),Measures.[Internet Sales Amount])>0) on 1,
				Measures.[Internet Sales Amount] on 0
	from  [Adventure Works]
	 where
	strtomember(ahora)

Training Kit R2 listo en la web

Posted by Miguel Egea | Posted in Analisys Services, Noticias, Relacional | Posted on 14-06-2010

0

Algunos de mis compañeros en Solid han trabajado duro en esto, pero ya está listo para descarga en: http://go.microsoft.com/?linkid=9710868

esto lo dejo en inglés porque el video estará en inglés :)

Or if you just want to see what’s in it, you can preview training kit content online in the SQL Server 2008 R2 Learning Center on Channel 9 at http://channel9.msdn.com/learn/courses/SQL2008R2TrainingKit

Mi charla ayer en SecondNug, está lista.

Posted by Miguel Egea | Posted in Analisys Services, Noticias | Posted on 02-06-2010

0

Te la puedes descargar de la web del grupo  y si lo que quieres es únicamente verla,  puedes ir a esta otra dirección.

Ayer al final la demo la truqué un poquito, seguramente muchos no lo notarían si no lo dijera.. pero no se trata de dejar medias verdades. Durante el día de hoy o mañana intentaré grabar un video sobre como configurar el proactive Caching y lo mostraré en una demo en video :)

Charla en Second Nug el 1 de Junio

Posted by Miguel Egea | Posted in Analisys Services | Posted on 19-05-2010

0

El proximo 1 de Junio estaré dando una charla en directo sobre Analisys Services. La charla es On-Line en Second-Nug, uno de los grupos de usuarios on-line más activos y con mayor presencia. Mis compañeros de Solid Quality, Eladio y Salva ya han estado hablando de TSQL y SSIS y ahora me toca a  mi hablar de Analisys Services y de las diferencias entre el modelo tradicional y otro tipo de aproximaciones a proyectos multidimensionales.

Espero que os resulte de interes

http://www.secondnug.com/EventosDesarrollo/tabid/57/Default.aspx

Pruebas unitarias en proyectos multidimensionales

Posted by Miguel Egea | Posted in Analisys Services, Noticias, Relacional | Posted on 13-04-2010

1

Mi compañero en SolidQ Italia, Davide Mauri ha desarrollado un proyecto que me parece muy positivo.  Este es el mensaje que ha puesto Davide.

Y aquí puedes llegar al proyecto

A project that allow the execution of Unit Testing against a database (Relational or Multidimensional).
It uses NUnit (http://www.nunit.org/) )as unit-testing framework and does not require DBA or BI Developer to know anything about .NET: just write your SQL or MDX queries and test them. QueryUnit will take care of automatically create the assembly that will test your query for you, using NVelocity (http://nvelocity.codeplex.com/) to generate .NET classes and the CodeDom engine to compile them at runtime.