lunes, 28 de julio de 2008

Nuevo Blog

Hola a todos,

Hoy quiero presentaros un nuevo blog de un compañero mio que promete darnos bastante información, sobre todo útil, de CRM.

http://www.ms-dynamics-crm.blogspot.com/

Le deseo lo mejor

Salu2

martes, 1 de julio de 2008

10 best practices SSIS

En el post anterior he comentado algo sobre las 10 mejores prácticas de Integration Services. Via http://geeks.ms/blogs/elbruno/archive/2007/05/23/10-best-practices-para-sql-server-integration-services.aspx (el bruno) os indico cuales son:

  1. La Reutilización es una de las capacidades más aprovechadas dentro de SSIS. En otras palabras, podemos hablar de paquetes standards que pueden ser reutilizados en diferentes entornos de desarrollos ETL. Dentro de SSIS, esto puede lograrse utilizando templates. Los SSIS templates packages, son paquetes reutiilzables que pueden ser utilizados en cualquier proyecto una cantidad ilimitada de veces. Para más información consultar http://support.microsoft.com/kb/908018
  2. Es recomendavle evitar la utilización de puntos (.) en los nombres de los paquetes. La utilización de puntos se cruza con la nomenclatura de nombres que utiliza SQL Server y por lo tanto debe ser evitada. Un buen approach consiste en la utilización de guión bajo (_) en lugar de punto (.). Además es conveniente asegurarse que los nombres de los paquetes no excedan los 100 caracteres de largo. Durante el despliegue de los packages, los caracteres que excedan el largo de 100, serán quitados del nombre. Esto puede ocasionar que el SSIS package tenga errores durante el período de ejecucion, especialmente cuando se utiliza "Execute Package Tasks" dentro de otro paquete.
  3. El flujo de datos de en un paquete es una tarea intensiva para la memoria, en cada uno de los pasos y a nivel componente debemos revisar cuidadosamente que no estamos pasando columnas innecesarias en el flujo de datos. Esto ayuda en evitar tiempos adicionales del tiempo total de ejecución del paquete y adicionalmente mejora el funcionamiento total de la ejecución del paquete.
  4. Mientras se configura a cualquier conexion OLEDB como fuente, se debe evitar usar "Table or View" como el modo de acceso de los datos, éste es similar al "SELECT * FROM <TABLE_NAME>", y como la mayor parte de nosotros sabe, "SELECT *" es nuestro enemigo, esta sentencia toma en cuenta todas las columnas incluyendo las que incluso no se requieren. Intentar siempre utilizar el modo "SQL Command" como modo de acceso de los datos e incluir solamente los nombres de las columnas requeridas en la declaración "SELECT". De esta manera se evita pasar columnas innecesarias en flujo de datos.
  5. En los Data Flow Tasks, utilizar muy cuidadosamente el Flat File Connection Manager, crear un Flat File Connection Manager con la configuración por defecto utilizará el tipo de datos [DT_STR] por defecto para todos los valores de la columna. Ésta no es siempre la opción correcta porque porque puede existir algun tipo de dato numérico, número entero o columnas boleanas en la fuente, pasándolo como string en el flujo hacia abajo se utilizaría memoria innecesaria y puede causar cierto errores en las fases posteriores de la ejecución del paquete.
  6. El ordenar datos es una operación que consume mucho tiempo; en SSIS puedes ordenar los datos que vienen desde un componente superior utilizando un 'Sort transforming', no obstante esto es una tarea que consume mucha memoria y el resultado degrada el funcionamiento total de la ejecución del paquete. Como mejor práctica, en los lugares en donde sabemos que los datos están viniendo de las tablas de la base de datos SQL Server, es mejor realizar la operación de ordenar los mismos en motor de la base de datos utilizando una sentencia TSQL dentro del Query apropiado. Esto es mucho mejor porque el ordenamiento de datos en la base de datos es una tarea mucho mas refinada y depurada en SQL Server.
  7. Durante el desarrollo de los paquetes de SSIS, la mayor parte del tiempo uno tiene que compartir su paquete con otros miembros del equipo o uno tiene que desplegar el mismo paquete a cualquier otro desarrollador, UAT o entorno de producción. Una cosa que un desarrollador tiene que cerciorarse es utilizar el nivel correcto de la protección del paquete. Si alguien va con el nivel de la protección del paquete del defecto 'EncryptSenstiveWithUserKey' entonces el mismo paquete no pudo ejecutarse según lo esperado en otros ambientes porque el paquete fue cifrado con la llave personal del usuario. Para hacer la ejecución del paquete común a través de diferentes entornos, uno tiene que primero entender el comportamiento de la característica del nivel de la protección del paquete, es aconsejable leer http://msdn2.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.dtsprotectionlevel.aspx. Generalmente, para evitar los errores mas comunes durante el despliegue de paquetes a partir de un sistema a otro sistema, fijar la protección del paquete a 'DontSaveSenstive'.
  8. Una buena práctica es utilizar Secuence Containers en paquetes de SSIS para agrupar diversos componentes en el 'Control Flow Level'. Esto ofrece_
    1. Proporciona un scope para las variables de un grupo de tareas relacionadas y de los contenedores que puede ser utilizado.
    2. Proporciona la facilidad para manejar las propiedades de múltiples tareas fijando la propiedad en el 'Secuence Container Level'
    3. Proporciona facilidad para definir el nivel de aislamiento de la transacción del sistema en el Container Level.
      Para más información sobre los envases de la secuencia, ver por favor http://msdn2.microsoft.com/en-us/library/ms139855.aspx.
  • Si estás diseñando una solución de ETL para una pequeña, media o grande parte del negocio de una empresa, siempre es bueno tener una característica que permita reiniciar los paquetes fallados a partir del punto de la falla. SSIS tienen una característica de fábrica llamada 'Checkpoint' para soportar el reinicio de paquetes fallidos desde el punto de la excepción. Sin embargo, es necesario configurar la característica del Checkpoint en el nivel del paquete. Para más información, ver http://msdn2.microsoft.com/en-us/library/ms140226.aspx.
  • Excecute SQL Task es nuestro mejor amigo en SSIS; podemos utilizar esto para ejecutar una declaración simple o múltiple de sentencias SQL a la vez. La belleza de este componente es que puede retornar resultados en diferentes formatos, por ejemplo: single row, full row set y XML. Puedes crear diversos tipo de conexiones usando este componente como OLEDB, ODBC, ADO, ADO.NET y SQL Mobile. Personalmente prefiero utilizar este componente la mayor parte del tiempo con mis sentencias FOR EACH para definir las iteraciones y verificar si ejecuto la tarea SQL. Para más información, ver http://msdn2.microsoft.com/en-us/library/ms141003.aspx y http://www.sqlis.com/58.aspx.
    1. Espero os sean de utilidad

      Salu2

      SSIS y Query Oracle con parametros

      O lo que es lo mismo "SSIS Query Oracle with parameters" :-)

      Escribo este post porque despues de pegarme mucho (muchiisimo) con SSIS (Integration Services) y Oracle para poder hacer una consulta en un OLEDBSource Task (Origen OLDB) con parámetros he conseguido encontrar la solución.

      Lo primero es crear una variable que contenga la consulta y tantas variables como parámetros. En propiedades indicar lo siguiente:
      - Evaluate as Expression en propiedades a True
      - Expression Property: "select xxx from xxx where job = '" + @[User::NbVariable] + "'"

      Por su parte el Origen OLDB lo configuraremos para que el access mode sea a SQL Command de Variable e indicaremos la variable definida anteriormente.

      Si pinchamos en vista previa veremos que nos devuelve los datos.

      el post que me ha ayudado.... http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=1530650&SiteID=17

      Curiosamente ademas es una de las 10 best practices

      Proximamente comentaré algo sobre ejecutar un paquete de SSIS en una maquina de x64 atacando a un oracle x64 sin el driver de Oracle OLEDB de x32

      Salu2

      lunes, 16 de junio de 2008

      Nueva aplicacion web en Sharepoint y PPS (Error, horror)

      Hola,

      Pues el post de hoy está relacionado con Sharepoint y Performance Point Server (PPS)

      Erase una vez, un joven desarrollador adentrándose en el maravilloso mundo de BI con PPS cuando un buen día se le ocurrió hacer un cuadro de mandos y deployarlo en un maravilloso sitie de WSS/MOSS que se había creado a tal efecto.
      Pero cuando menos se lo esperaba apareció un terrible error que decía asi: "The control type 'Microsoft.PerformancePoint.Scorecards.WebParts.ScriptManagerLoader' is not allowed on this page. The type is not registered as safe."

      No le quedo más remedio que ir al web.config de dicha aplicación web y añadir bajo la sección <safecontrols> la siguiente línea:

      <SafeControl Assembly="Microsoft.PerformancePoint.Scorecards.WebParts, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="Microsoft.PerformancePoint.Scorecards.WebParts" TypeName="*" Safe="True" />

      Así que cuando creía que habia ganado la batalla y se dispuso a ver su precioso cuadro de mandos le sorprendieron los siguientes mensajes de error por cada webpart de pps:

      "Web part Error unexpected error has occured"

      Que horror... ¿y que podía hacer él?


      Tras muchos intentos fallidos y cuando todo parecía perdido, Internet-Google apareció en su rescate y el siguiente blog le solucionó la vida:

      http://blogs.msdn.com/performancepoint/archive/2007/11/12/how-do-i-deploy-the-monitoring-web-part-on-a-separate-sharepoint-web-application-on-the-same-sharepoint-web-server.aspx

      En resumidas cuentas la solución consistía en hacer lo siguiente:

      - Hacer deploy de PSCWebParts.cab en nuestro web application; bien por consola o desde el propio MOSS
      - Añadir a nuestra app la siguiente master page:C:\Program Files\Microsoft Office PerformancePoint Server\3.0\Monitoring\Assemblies\PerformancePointDefault.master
      - Abrir un web.config de un sitio que funcione correctamente (AdventureWorks) y copiar todas las líneas que no aparecen en el web.config de nuestro site.

      Con esto nuestro joven desarrollador pudo dormir tranquilo y comer perdices soñando con su fabuloso cuadro de mando.

      Salu2

      sábado, 14 de junio de 2008

      Mi PPS no me muestra bases de datos

      Hola,

      Hoy toca solucionar un problema que me he encontrado cuando he querido crear un Datasource a mi base de datos de Analysis Services y Performance Point Server no me la mostraba en el desplegable...

      Solución:

      Dentro de Roles, en el DataWarehouse, crear un nuevo perfil con full control y como Membership asginarle Everyone (Todos).

      Con esto deberia ser suficiente para que desde PPS podamos engancharnos sin problemas.

      Salu2

      martes, 10 de junio de 2008

      Dimensión de tiempo con granularidad de horas.....

      Hola a todos,

      Hoy esto va de un poquito de BI. Resulta que para una prueba necesitaba tener una tabla de dimensión de tiempo con granularidad de horas y por lo que he visto SSAS permite crear esta dimensión pero se queda en el día. Buscando en la web (no mucho la verdad) he encontrado este enlace que proporciona un script para crear y cargar la tabla:

      http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3353754&SiteID=1

      Y el script es el siguiente:

      /***************************************
      Script: Creates and Populates an Hour Dimension Table

      Note: This script does hours and minutes. If seconds are needed,
      then modify the datepart on the last line that increments the date.
      Obviously the table will be bigger when you include seconds.

      Author: Ibrahim Hafidh
      Date: 10/11/2005
      ****************************************/

      if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[dimHour]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
      drop table [dbo].[dimHour]
      GO

      CREATE TABLE dimHour
      (
      HourID INT IDENTITY (1, 1) NOT NULL PRIMARY KEY
      , TheDate DATETIME NOT NULL
      , TheTime Datetime NOT NULL
      , MilitaryHour INT NOT NULL
      , StandardHour INT NOT NULL
      , TheMinute INT NOT NULL
      , TheSecond INT NOT NULL
      , Standard varchar(2) NOT NULL
      )


      DECLARE @startdate DATETIME
      DECLARE @enddate DATETIME
      DECLARE @date DATETIME

      SET @startdate = '1/1/2005 12:00:00 AM'
      SET @enddate = '1/1/2005 23:59:59 PM'
      SET @date = @startdate

      WHILE @date <= @enddate
      BEGIN
      INSERT INTO dimHour (TheDate, TheTime, MilitaryHour, StandardHour, TheMinute, TheSecond, Standard)
      VALUES (
      @date --TheDate
      , convert(nvarchar(11), @date, 114) --Time format
      , DATEPART(hh, @date) --Military Hour
      , CONVERT(varchar(2),
      CASE
      WHEN DATEPART([hour], @Date) > 12 THEN CONVERT(varchar(2), (DATEPART([hour], @Date) - 12))
      WHEN DATEPART([hour], @Date) = 0 THEN '12'
      ELSE CONVERT(varchar(2), DATEPART([hour], @Date))
      END) -- Standard Hour
      , DATEPART(mi, @date) --Minute
      , DATEPART(ss, @date) --Second
      , CASE WHEN DATEPART(hh, @date) between 0 and 11 THEN 'AM' ELSE 'PM' END
      )


      SET @date = DATEADD(mi, 1, @date) -- ** Modify the datepart to ss if seconds are needed

      END



      Por otra parte dejo también este enlace muy útil de conversiones de fechas en SQL Server 2005

      http://www.dreamincode.net/forums/showtopic42872.htm

      Y esto es todo por hoy....


      A2

      viernes, 6 de junio de 2008

      Clonar máquinas con Virtual PC

      Hola a todos,

      En primer lugar quiero pedir disculpas por lo poco que me prodigo por estos lares pero las razones son fundamentadas, primero y principal es que mi reciente paternidad hace que el tiempo que pueda dedicar sea más bien escaso, en segundo lugar, mi Proyecto Fin de Carrera me esta quitando el resto de poco tiempo que tengo (por fin este domingo me lo quito de encima).

      Bueno, vayamos al grano, la razón que ha hecho que escriba este post es el siguiente, resulta que he generado dos máquinas virtuales para un entorno de desarrollo para un par de personas que obviamente se han copiado y ejecutan desde sus propios PC's. Cual ha sido mi sorpresa cuando nos daba errores de "time out" con la base de datos y hacia cosas bastante raras. Tras un poco de investigación me di cuenta que el servidor DHCP del cliente nos estaba dando la misma IP y tras marear un poco al de sistemas he descubierto que era un error muy habitual pero que me ha quitado casi todo un día descubrirlo.

      Cuando se copian máquinas virtuales de Virtual PC se conserva la misma MAC en todas las máquinas clonadas y por tanto cualquier servidor DHCP se piensa que es la misma máquina y asignara la misma IP con todos los problemas que eso conlleva.

      Solución:

      - Copiar únicamente el disco duro virtual y crear una asignación nueva
      - Editar el archivo .vmc con el bloc de notas y buscar la clave <ethernet_card_address>, borrar la MAC que tenga y dejarlo de la siguiente manera <ethernet_card_address type="bytes>ethernet_card_address>. De esta forma la próxima vez que arranquemos la máquina virtual nos asignará una nueva MAC diferente a la del resto de las máquinas clonadas.

      No se porqué pero pero cosas así hacen que cada día vea que entre Virtual PC y VMWare no hay color :-)

      Salu2

      lunes, 7 de abril de 2008

      Diferencias entre workflows de Sharepoint Designer y Visual Studio

      Gracias a un compañero de Raona, Carlos E., puedo publicar este gráfico que nos indica las diferencias entre diseñar un WF con SharePoint Designer y Visual Studio. Muy útil cuando quieres saber rápidamente con que herramienta empezar a trabajar y no tener que tirarlo todo y volver al principio ;-)

      Category

      SharePoint Designer

      Visual Studio

      Supported WF Hosts

      WSS/MOSS

      WSS/MOSS/Others

      Development Model

      Wizard based

      Graphical Designer

      Types of Workflows Supported

      Sequential

      Sequential and State

      Workflow Type

      Markup only; markup file, rules and supporting files are uncompiled

      Markup with code behind compiled into an assembly

      Code Behind

      No

      Yes

      Activities

      Built-in and use custom

      Built-in, use and develop custom

      Forms Technology

      Autogenerated, customizable ASP.NET Forms

      Design forms in any technology including ASP.NET or InfoPath

      Association

      Associated automatically with a single list at design time. No other associations possible.

      Can be associated with multiple content types, lists, and document libraries

      Initiation

      Initiation forms are supported

      Initiation forms are supported

      Modification

      Cannot modify workflow using modification forms

      Can modify workflows

      Tasks

      Supports custom task forms

      Supports custom task forms

      Deployment

      Automatically deployed to associated list, live changes

      Must build package and deploy workflow using SharePoint feature technology

      Debugging

      No Debugging

      Visual Studio Debugging

      A2

      viernes, 14 de marzo de 2008

      Fantastic 40

      Hola,

      Hoy revisando la web he encontrado un enlace muy util con la descripción en castellano de las Plantillas Fantásticas (Fantastic 40) que se pueden descargar gratis de la web de MS para tener una funcionalidad extra.

      http://www.microsoft.com/latam/technet/windowsserver/sharepoint/wssapps/templates/descriptions.mspx

      Muy util para hacer propuestas

      A2

      lunes, 10 de marzo de 2008

      Problemas al sincronizar Windows Mobile y Vista

      Hola a todos,

      Hoy sorprendentemente conecto mi movil (HTC Windows Mobile) y no se porqué el centro de sincronización no me conectaba el movil con el PC y Vista (como si no existiera). Tras mucho darle vueltas he conseguido solucionarlo de la siguiente forma, desinstalando el centro de sincronización y volviéndolo a instalar. Pero como nunca se solucionan las cosas a la primera, ahora si concectaba pero no sincronizaba con el Outlook. Al final he tenido que ir al Firewall de Vista y abrir los siguientes puertos:

      Inbound TCP:

      • 990
      • 999
      • 5678
      • 5721
      • 26675

      Outbound UDP:

      • 5679


      Oye, mano de santo :-)

      domingo, 24 de febrero de 2008

      Visual Studio 2005 sin plantillas

      Hola,

      Este fin de semana y sin conexión a internet voy a crear un nuevo proyecto web en Visual Studio 2005 y cual no será mi sorpresa cuando la pantalla para elegir el tipo de proyecto estaba más blanca que las camisas de un anuncio cualquiera de detergente. El caso es que me rompi la cabeza un buen rato y me di por vencido recurriendo a una maquina virtual para tales menesteres. Acabo de llegar a casa y en menos de 3 minutos he encontrado la solución a mis problemas:

      - Copiar el contenido de C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates en la ruta My Documents\Visual Studio 2005\Templates\ProjectTemplates.

      - Copiar el contenido de C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ItemTemplates en la ruta My Documents\Visual Studio 2005\Templates\ItemTemplates.

      Con esto y sin tener que reinstalar Visual Studio se debería solucionar.

      Vía http://thinkingtogether.net/blogs/sample_weblog/archive/2007/04/09/perdida-de-templates-en-vs-2005.aspx

      Como podíamos vivir hace unos pocos años sin internet y sin Google?

      TODO: Probar http://www.live.com/ a ver si es tan bueno como prometen

      viernes, 22 de febrero de 2008

      WSS 3.0 y WebPública

      Hola,

      Durante un tiempo he tenido la duda de si era posible tener una Web Publica con WSS 3.0 y cuanto me costaría (en MOSS2007 el precio ronda los 50.000€)

      Esta semana, en el curso de BPIO se estuvo discutiendo esta posibilidad y por parte de MS no hay ningún inconveniente. El único requisito es tener una licencia Internet Conector (unos 3.000€) y con eso sería suficiente. Al ser un producto incluido en W2K3 Server, la propia licencia del servidor hace que sea legal y posible montar la Web Pública.

      A2


      BPIO

      Hola,

      Hace algunos días que no posteo nada y la razón fundamental es que esta semana he estado en un evento de cuatro días en MS y el poco tiempo que me ha quedado ha sido para preparar las cosas muy urgentes que tenía pendientes con los clientes.

      El evento al que he ido se llama "BPIO Univerity Readiness Workshop" (dicho así suena a "y ezo que e lo que eh" y eso mismo pensé yo cuando mi jefe me dijo que era el curso fundamental para nosotros).

      BPIO (Bepio ó Bipiaiou) significa Business Productivity Infrastructure Optimization, tampoco es muy aclaratorio pero voy a tratar de explicar su significado.
      Tradicionalmente, la estrategia de MS se ha centrado en el producto (Windows, Office, SqlServer....) pero de un tiempo a esta parte ha descubierto que si quiere ser más competitiva aun debe de cambiar esa visión a una estrategia de plataforma.
      Esto es lógico; para llegar a un mercado con competidores que tienen herramientas mejores muy completas debe ofrecer un valor añadido más grande, y eso solo lo puede conseguir vendiendo un conjunto de productos que forman una solución.

      Performance Point Server (PPS para los amigos) no es el mejor producto del mercado (le falta bastante de DataMining para poder ser competitivo por si solo) pero si su "sencillez" se junta con Excel y SharePoint, por ejemplo, nos ofrece un conjunto de utilidades difícilmente alcanzables por la competencia; no sé si me explico.

      Con esto tenemos pues que BPIO es la estrategia que MS quiere transmitir a los Partners para ofrecer una plataforma tecnológica de negocio unificada y extensible en cuanto a Comunicaciones Unificadas, Business Intelligence (BI), Búsqueda, Gestión de Contenido Empresarial y Colaboración.
      Como veis, no habla de productos, sino de tecnologías (aunque claro, según nos dicen esto, todos pensamos en SharePoint, SQLServer, PPS, Enterprise Search, incluso CRM.....)

      No me quiero enrollar más por hoy, en próximos días os iré dando más información a recursos y enlaces más que interesantes que me han pasado estos días (más de 30Gb de información de presentaciones, maquinas virtuales, scripts, enlaces, videos.....)

      Y dejo una pregunta en el aire sin contestar ¿Porque MS tiene tanta información (demasiada incluso) que es imposible de encontrar cuando la necesitas?

      A2

      miércoles, 13 de febrero de 2008

      Búsquedas en WSS 3.0

      Para la propuesta de un proyecto nos ha surgido una duda.... ¿Que diferencias hay entre el Search de MOSS2007 y de WSS 3.0?. MS nos lo deja muy claro (o eso parece)

      "Windows SharePoint Services 3.0 uses the same SharePoint search technology used by Enterprise Search in Microsoft Office SharePoint Server 2007 rather than relying on Microsoft SQL Server full-text searching, as previous versions of Microsoft Windows SharePoint Services did.

      Search in Windows SharePoint Services addresses a single site collection, and is automatically scoped to current context and limited to site and subsites, list or library, or folder. If you are looking at a subsite, you cannot search over the entire site collection, but you can search over all subsites of the current site.

      Only SharePoint content in the site collection can be crawled. You cannot configure Search to crawl databases, mail servers, application servers, or Web sites and file shares outside of the site collection. In a deployment with more than one site collection, each site collection provides Search only for content on that site collection, and there is no aggregation of search results across site collections.

      The Windows SharePoint Services 3.0 Search service is also used to enable searching of the Help system that is built into Microsoft Office SharePoint Server 2007."

      http://msdn2.microsoft.com/en-us/library/aa979515.aspx