14 abril 2009

Bugs relacionados a Business Intelligence reparados con el SP1 de SQL 2008

A continuación una compilación de los “bugs” reparados con el Service Pack 1 de SQL 2008 que se documentan en http://support.microsoft.com/default.aspx/kb/968369. El listado va en inglés. Si a alguno de ustedes le ha ocurrido alguno de estos errores, ya pueden sonreir Open-mouthed:

  1. You cannot add a cluster node when you install SQL Server 2008 Analysis Services and you do not install the SQL Server 2008 Database Engine
  2. FIX: In a SQL Server 2008 Reporting Services report that contains several levels, some items disappear when you collapse another item
  3. FIX: The aggregate value is incorrect when you design a query that contains some entity groups by using the Report Model Query Designer in SQL Server 2008 or in SQL Server 2005
  4. A new trace event is added in SQL Server 2008 SP1 to better diagnose unexpected cancellation issues in SQL Server 2008 Analysis Services.
  5. Some trace events that are related to personalization extension are added to the SQL Server Profiler trace definitions in Analysis Services.
  6. When a client that is based on MSOLAP, Analysis Management Objects (AMO), or ADOMD.NET connects to Analysis Services over an HTTP connection, the client does not send back certain HTTP headers.
  7. In SQL Server 2008 SP1, more information is added to the minidump files that are generated for troubleshooting in Analysis Services.
  8. You cannot browse time series models that have nested tables by using the SQL Server Data Mining Add-ins for Office 2007.
  9. You receive an error message when you process an association rules mining model in SQL Server 2008 Standard Analysis Services: "Errors in the metadata manager. An error occurred when loading the <Mining Model Name> mining model."
  10. The decision tree algorithm returns a regression formula that contains valid floating-point regression coefficients in Analysis Services.
  11. You receive an incorrect result when you use the NON EMPTY statement and the CROSSJOIN function in a Multidimensional Expressions (MDX) statement that queries from a Sum-based measure and a LastNonEmpty-based measure in Analysis Services.
  12. A subselect clause that uses calculated members does not consider the granularity to determine whether a calculated member should be included in Analysis Services.
  13. In SQL Server 2008 SP1, improvements are made to help you troubleshoot unexpected cancellation issues in Analysis Services.
  14. When a polling query is querying a DateTime value, the proactive caching process crashes in Analysis Services.
  15. An access violation occurs when you process a dimension that has a calculated member that references another member that is defined later in the cube script in Analysis Services.
  16. The filter lookup list is not populated in Model Designer when you use a Teradata data source in SQL Server 2008 Reporting Services.
  17. Charts, gauges, and images may appear blurry when you view them in Business Intelligence Development Studio or in Report Builder 2.0 Preview mode.
  18. When you export a report in the comma separated values (CSV) format, Reporting Services may omit a row for a Tablix data region that has dynamic groups.
  19. Table group headings do not repeat when you render a report as a PDF, as a Print Preview, or as an image if a row does not completely fit on one page.
  20. A text box that splits across pages does not correctly display all the content in Reporting Services.
  21. The memory throttling behavior for different editions of Reporting Services is not enforced correctly.
  22. A SQL Server 2005 Reporting Services report that contains the SyncLock statement in the report code cannot be rendered in a fresh installation of SQL Server 2008.
  23. When you view a SQL Server 2008 Reporting Services report in a SQL Server 2005 viewer control, the viewer control shows an incorrect page count.
  24. In the SharePoint integrated mode, a report runs slower than the same report runs in the native mode in Reporting Services.
  25. Change data capture incorrectly reports an UPDATE statement as a DELETE statement that is followed by an INSERT statement in SQL Server 2008.

Como ven, la lista es para BI es bastante interesante.

Alan

Analysis Services Command Line Utility: ASCMD

Con SQL 2005 se introdujo un nuevo utilitario para ejecutar T-SQL desde la ventana de comandos llamado SQLCMD. Bajo esta misma analogía se ha publicado la versión para Analysis Services llamada ASCMD que en este caso no viene en el instalador de SQL Server sino que se debe descargar desde el lugar de ejemplos de Analysis Services en CodePlex. Existen distintas versiones del instalador como msi (x86, x64 y ia64) y como archivo comprimido (zip).

Tal como en SQLCMD, el uso de ASCMD está orientado a automatizar tareas en donde no podamos usar el SQL Management Studio o para ejecutar diversos comandos contra nuestr Analysis Services desde una aplicación externa o de terceros. ASCMD puede ejecutar 3 tipos de comandos: XMLA (comandos administrativos), MDX (consultas contra cubos) y DMX (consultas contra modelos de data mining). ASCMD acepta como servidor destino las versiones 2005 y 2008 de Analysis Services.

Luego de descargar e instalar el programa por defecto deben buscar el folder ascmd en C:\Program Files\Microsoft SQL Server\100\Samples\Analysis Services\Administrator. Les recomiendo leer el documento Readme_ascmd.docx que tiene todo el detalle de cómo usar el comando y excelentes de ejemplo de escenarios para automatizar tareas. Es importante resaltar que el gran potencial del comando radica en poder usar variables en dentro de los scripts que pueden recibir valores en el momento de su ejecución o desde variables del sistema (environment variables) de Windows.

Un ejemplo de uso del comando se muestra a continuación:

C:\>ascmd -S myserver -d "Adventure Works DW" -i query.mdx -o result.xml -v cube="[Adventure Works]"

Principales parámetros:

-S: indica el nombre del servidor
-d: indica la base de datos
-i: indica el archivo donde se tiene el query o comando que quiere ejecutar
-Q: Consulta que se quiere ejecutar (no desde un archivo sino desde el mismo comando)
-o: el nombre del archivo donde se escribirán los resultados o  mensajes de salida
-v: el nombre del cubo
-U: el nombre del usuario cuando no se está usando Windows Integrated Security
-P: el password del usuario cuando no se está usando Windows Integrated Security
-TI: imprime la duración de las consultas

Para no repetir el documento Readme_ascmd.docx los dejo con los nombres del los escenarios que de uso ejemplificados que se encuentran en el documento que nos da muchas más ideas acerca del uso de ASCMD:

  1. Consultando un cubo de Analysis Services
  2. Creando el backup de una base de datos en un servidor remoto via HTTP
  3. Procesamiento de múltiples particiones
  4. Creación de una nueva base de datos
  5. Creación de un “Cache Warmer” (para poner las consultas más usadas en cache, a manera de tener mejores tiempos de respuesta en el primer uso de nuestros reportes basados en MDX)
  6. Creando un procedimiento de validación (en base al tiempo de duración de las consultas)
  7. Automatizando la construcción y entrenamiento de un modelo de Data Mining
  8. Limpiando el Data Cache de Analysis Services (cuando estamos corriendo pruebas contra SSAS y queremos saber la duración real de las consultas sin estar en cache)
  9. Determinando quién está conectado a su servidor
  10. Averiguar cuándo fue la última vez en que se procesó un partición
  11. Grabar la metadata del servidor o “local cube” en un archivo XML
  12. Grabar la configuración del servidor
  13. Realizando una operación de Writeback
  14. Ejecutando muchas consultas en secuencia o en paralelo

Alan

SQL Server 2008 Service Pack 1: Report Builder 2.0 ClickOnce

Hace unos días fue publicado el primer Service Pack (SP) para SQL Server 2008. La principal novedad de esta actualización la versión de Report Builder 2.0 (RB) como ClickOnce Application, esto es muy bueno en términos de facilidad de deployment o distribución de los bits de Report Builder 2.0 a la PC del usuario para que pueda crear sus propios informes. Es bueno recordar que hasta antes del SP1 sólo existía la versión stand-alone con su instalador individual (si no lo han probado aún se los recomiendo). Otra cosa muy importante de resaltar es también el hecho de que Report Builder 2.0 no sólo permite crear informes a partir de modelos pre-definidos por el equipo técnico (como en la versión 1 de RB que venía con SQL 2005), sino que también crear reportes desde cero, conectándonos directamente a nuestras fuentes de datos tal como lo haríamos con Crystal Reports por ejemplo.

image

Aquí la definición de ClickOnce Applications que tiene Wikipedia (en inglés):

ClickOnce enables the user to install and run a Windows application by clicking a link in a web page. The core principle of ClickOnce is to bring the ease of deployment of web applications to the Windows user. In addition, ClickOnce aims to solve three other problems with conventional deployment models: the difficulty in updating a deployed application, the impact of an application to the user's computer, and the need for administrator permissions to install applications.

ClickOnce-deployed applications are considered 'low impact', in that they are installed per-user, not per-machine. No administrator privileges are required to install one of these applications. Each ClickOnce application is isolated from the other. This means one ClickOnce application is not able to 'break' another.

ClickOnce employs CAS (Code Access Security) to ensure that system functions cannot be called by a ClickOnce application from the web, ensuring the security of data and the client system in general.

Para más información de ClickOnce pueden visitar el website de MSDN http://msdn.microsoft.com/en-us/vbasic/ms789088.aspx

Según la documentación, la versión ClickOnce de RB 2.0 se puede usar tanto en el modo estandar de Reporting Services 2008 como en el modo integrado con Sharepoint. Para este último caso deben instalar el Microsoft® SQL Server® 2008 Report Builder 2.0 ClickOnce for SharePoint.

Regresando al tema general del Service Pack 1, una lista de los bugs corregidos con esta actualización de SQL 2008 la pueden encuentrar en http://support.microsoft.com/default.aspx/kb/968369. Otro punto importante de resaltar del instalador es que de ser necesario es posible desinstalarlo sin tener que remover toda la instancia de SQL.

Finalmente, les copio información del blog de Vladimir Medina, MVP en Sharepoint proveniente del anuncio formal de parte de Microsoft:

“La noticia del día es que ya tenemos disponible la descarga de SQL Server 2008 Service Pack 1 para todas las versiones, lanzado el día de ayer 7 de abril, disponible en 10 idiomas incluidos el ingles y español que son los que más usamos por acá...

Datos:
Versión: 10.00.2531.00
Fecha de publicación: 07/04/2009
Idiomas: Español, Ingles y demás
Tamaño de la descarga: 16 KB - 598.8 MB

Información:

SQL Server 2008 Service Pack 1 (SP1) ya está disponible. Puede usar estos paquetes para actualizar cualquiera de las ediciones de SQL Server 2008.
Nota: Continuamos comprometidos con nuestros planes de contención de service packs, centrándonos solo en actualizaciones esenciales, básicamente un resumen de las actualizaciones acumulativas 1 a 3, actualizaciones de Ingeniería de corrección rápida (Quick Fix Engineering, QFE), así como correcciones para problemas comunicados a través de la Comunidad de SQL Server. Al mismo tiempo que mantenemos la contención de cambios en el producto, estamos realizando inversiones significativas en facilitar la implementación y administración de los Service Packs:

  • Actualización integrada (slipstreaming): ahora puede integrar la instalación de base con los service packs (o con las revisiones) e instalarlos en un único paso.
  • Desinstalación de Service Pack: ahora puede desinstalar sólo el Service Pack (sin quitar toda la instancia)
  • Tecnología ClickOnce para el Generador de informes 2.0 (a.k.a. Report Builder 2.0)

Para obtener más información acerca del Service Pack 1 de SQL Server 2008, vea las Notas de la versión.

Instrucciones de Instalación: descargar y revisar la documentación de la instalación.”

Alan

Reglas MDX en PEL: Children vs Descendants

En honor al memorable y que en vida fue PerformancePoint Planning les hago llegar un pequeño tip con respecto a la creación de Definition Rules de tipo MDX usando la sintaxis de PEL (PerformancePoint Expression Language) para crear sus reglas de negocio (business rules) dentro del Planning Business Modeler: Además aunque la experiencia fue a través del uso de PEL, eso aplica 100% a su trabajo directamente con consultas basadas en MDX directamente a su cubo de Analysis Services sin usar PPS Plannig ya que los lenguages son bastate similares.

Es importante recordar que los Definition Rule de tipo MDX son reglas que se traducirán físicamente en miembros calculados (calculated members) en su respectivo cubo de Planning. En este punto es tambien importante mencionar que las medidas calculadas son de un alto costo para Analysis Services ya que éstas se ejecutan en tiempo de ejecución o run-time en el momento que el usuario consulte los valores de la celda(s) que se esté(n) calculando. Pueden revisar mayor información entre los tipos de de reglas de negocio en PPS Planning en http://msdn.microsoft.com/en-us/library/bb795345.aspx.

En nuestro caso nuestros formularios y reportes basados en data de los cubos de Planning tenían un rendimiento terrible, se supone que el tiempo de respuesta sería algo más lento que si hubiesemos podido crear esta misma regla pero de tipo Assigment (en la que los valores se guardan directamente en el fact table o measure group table en la base de datos relacional de Planning), pero tampoco era para tanto.

Al final de pasar un buen tiempo tratando de decifrar el problema nos dimos cuenta que la razón de la exagerada lentitud era por un cálculo que teníamos aplicable a la jerarquía de las categorías de artículos existentes para obtener la proyección de ventas en los non-leaf levels o niveles no-granulares. En este caso los niveles granulares ya tenían asignados su valor por medio de otra regla de negocio ejecutada en un paso anterior en una operación simple, pero en los niveles NO granulares debíamos “simplemente” sumar los valores de sus hijos. Ejemplo:

Categoría Cant. Comentario
Zapatos 80 --> Non-Leaf: aquí se requiere el cálculo para sumar los hijos
Zapatos de niño 30 --> Non-Leaf: aquí se requiere el cálculo para sumar los hijos
   Zapato niño tipo 1 10 --> Leaf: aquí existe el valor
   Zapato niño tipo 2 20 --> Leaf: aquí existe el valor
Zapatos de niña 50 --> Non-Leaf: aquí se requiere el cálculo para sumar los hijos
   Zapato niña tipo 1 35 --> Leaf: aquí existe el valor
   Zapato niña tipo 2 15 --> Leaf: aquí existe el valor

 

La regla que habíamos configurado inicialmente era la siguiente, fíjense en la parte resaltada subrayada:

scope (
[Account].[Sales Accounts].[SalesProjection],
[Scenario].[All Members].[Budget],
[BusinessProcess].[Standard].[INPUT],
{[Time].[Monthly View].[FY 2010],Descendants([Time].[Monthly View].[FY 2010], 0, after)}) ;

this = iif([Articles].[Category Hierarchy].CurrentMember.IsLeaf,
(),SUM(([Articles].[Category Hierarchy].CurrentMember.Children)));


La lógica general consiste en definir el scope o ámbito que queremos afectar y luego asignarle a ese scope (representado por this), el cálculo. El cálculo en este caso está definido como la suma de todos los hijos (children) de la categoría en proceso sólo cuando no estemos procesando en el leaf level o nivel granular de nuestros datos. Este cálculo nos estaba tomando más de 15 minutos para obtener los resultados esperados para una de las tiendas.

Entre las muchas pruebas que hicimos y casi cuando estábamos listos para “tirar la toalla”, decidimos hacer un cambio aparentemente menor: reemplazar la llamada a los “hijos” del artículo actual usando la función Children al uso de la función DESCENDANTS según se muestra a continuación:

scope (
[Account].[Sales Accounts].[SalesProjection],
[Scenario].[All Members].[Budget],
[BusinessProcess].[Standard].[INPUT],
{[Time].[Monthly View].[FY 2010],Descendants([Time].[Monthly View].[FY 2010], 0, after)}) ;

this = iif([Articles].[Category Hierarchy].CurrentMember.IsLeaf,
(), SUM(DESCENDANTS([Articles].[Category Hierarchy].CurrentMember,999, LEAVES)));

Para nuestra grata sorpresa este pequeño cambio nos redujo el tiempo de respuesta a menos de 30 segundos lo cuál era bastante aceptable para el volumen de datos que se manejan en esta solución. Para obtener mas detalles acerca de la función DESCENDANTS pueden ver aquí http://msdn.microsoft.com/es-es/library/ms146075.aspx.

La moraleja de todo esto es que en el caso del procesamiento de MDX en Analysis Services no se aplican las mismas reglas que en el mundo relacional o de procesamiento de T-SQL sobre SQL y me explico a continuación. En el caso del motor relacional nosotros podemos enviar determinada consulta y a pesar de que la misma no sea lo más optima (redundancia en el número de tablas, JOINS, Order by, etc.)  podemos confiar en que el QUERY ENGINE de SQL Server nos dará una gran ayudita optimizando nuestra consulta antes de ejecutarla. En el caso de MDX y las fuentes OLAP esto no sucede de tal forma, por tanto a pesar de que aparentemente Children y Descendants nos darían los mismos resultados de manera visual, el uso de Descendants en este caso es mucho más eficiente a la hora de procesar nuestro proceso. Esta misma regla pueden aplicarla en los casos en que sus consultas de MDX se tornen demasiado lentas, traten de explorar las posibilidades que el lenguaje les da para obtener los mismos resultados de distintas maneras pero en menor tiempo.

 

Alan

10 abril 2009

InfoSalud – Intranet Version

Anteriormente habíamos comentado cómo los gobiernos e instituciones están usando Business Intelligence para incrementar su visibilidad sobre lo que está sucediendo en “el negocio” con el fin de poder tomar decisiones más efectivas. Asi mismo les comenté acerca del Departamento de Salud de Puerto Rico y su proyecto InfoSalud que ha publicado al internet la primera versión del componente de Business Intelligence de un ambicioso proyecto. Ya que esta información es de uso público, de forma agregada y no viola ninguna regulación de confiabilidad comparto con ustedes algunos screenshots y funcionalidad de la versión interna de InfoSalud que está revolucionando el acceso a la información internamente en el Departamento y ha sido construida sobre la plataforma de Microsoft BI (Sharepoint, PerformancePoint (Proclarity), SQL Server, SQL Analysis Services, SQL Integration Services y SQL Reporting Services).

03 abril 2009

Sharepoint Designer ahora gratis!

Mi compañero Edwin Torres de Nagnoi, Inc. me hizo llegar esta interesante noticia:

“Microsoft SharePoint Designer Team Blog

Download SPD for FREE today!!

Today we are excited to share with you some news about SharePoint Designer 2007. Starting now (April 2, 2009), SharePoint Designer 2007 will be available as a free download! We want more of you customizing SharePoint and feel that this a good way to put the tool in the hands of more people. You can find a lot more information in our site including:

a) Letter to our Customers

b) Frequently Asked Questions

c) Free Download

Also, make sure to watch this video where Tom Rizzo and J.R. Arredondo discuss these changes and provide some insights into what is coming in the future (pick the appropriate version for your bandwidth).

· Small size video (6MB)

· Medium size video (17 MB)

· Large size video (83 MB)

Regards,

The SharePoint Designer Team”

Como pudieron notar desde ayer 2 de abril, Sharepoint Designer se suma a las herramientas gratuitas brindadas por Microsoft. Analizando esta noticia realmente creo que Microsoft se las trae, con esta nueva estrategia tratan de crear un nuevo incentivo a  “¿porqué no compramos Sharepoint, si además lo pode

clip_image001

mos personalizar por completo sin pagar más licencias”. Definitivamente no les hacía mucho sentido financiero ganar por el licenciamiento de SPD, el premio “gordo” está en las licencias de Sharepoint Server.

Otro punto importante es que los usarios de la versión gratuita de Sharepoint (Windows Sharepoint Services - WSS) sí van a estar más que contentos porque nunca hubiesen comprado SPD si el producto principal que están usando (WSS) es gratuito. Ahora se pueden beneficiar por doble partida. Desde mi humilde perspectiva, les va a funcionar la estrategia (a mediano plazo venderán más Sharepoint Portals), lo cual es muy bien recibido por los que trabajamos con BI usando Sharepoint como nuestra principal plataforma de Front-End.

Alan