viernes, 25 de noviembre de 2011

Determinar al jerarquía de tiempo utilizada para cálculos basados en PARALLELPERIOD (SSAS)

Enunciado:
Tienes una base de datos donde usas una dimensión tiempo para la que has definido dos jerarquías, una basada en Trimestres y otra basada en cuatrimestres.
Tienes que utilizar PARALLELPERIOD para calcular por ejemplo el valor hace 12 meses.
Pero en los argumentos de PARALLELPERIOD se especifica la jerarquía y si utilizas la jerarquía basada en trimestres para calcular el valor 12 meses atrás de un cuatrimestre el resultado es erróneo.
Solución:
Leeme antes: Esta solución solo es valida para dos jerarquías. Lee la nota al final es importante.
En el script de cubo defines una miembro que te indicará la jerarquía, luego utilizas el resultado en un iif para el cálculo del miembro que deseas.

//CONTROL DE TIPO DE LA JERAQUÍA
 CREATE MEMBER CURRENTCUBE.[Measures].[Tipo Calendario] as

       IIF (
        [Calendario cuatrimestral].currentmember.level.ordinal=1
        ,'T'
        ,'C'
        )
    ,VISIBLE=0;

//Metros 12 meses antes
CREATE MEMBER CURRENTCUBE.[Measures].[M2 Antes]
 AS 
  (IIF ([Measures].[Tipo Calendario]='C'
        ,PARALLELPERIOD 
            ([Calendario cuatrimestral].[Año]
            ,1
            ,[Calendario cuatrimestral].currentmember
            )
        ,PARALLELPERIOD 
            ([Tiempo].[Calendario trimestral].[Año]
            ,1
            ,[Tiempo].[Calendario trimestral].currentmember
            )
    )    
    ,[Measures].[M2]
  ), 
FORMAT_STRING = "#,##0;-#,##0;0", 
VISIBLE = 1 ,  DISPLAY_FOLDER = 'Mes\Metros' ,  ASSOCIATED_MEASURE_GROUP = 'Medidas'  ;
Nota importante:
Curiosamente la solución la encontré en el artículo: Time calculations in UDM: Parallel Period de Mosha Pasumansky comentando un articulo de A Different Approach to Implementing Time Calculations in SSAS - by David Shroyer. El segundo artículo no está disponible no hagas clic.

Mosha dice que esta solución puede conducir a resultados erróneos cuando usas atributos que figuran en ambas jerarquías. Sin embargo yo no he observado error alguno en mis resultados.


Agradecería que me advirtieraís si hay un error.