Muy a menudo, encontrará un requisito para que los usuarios puedan agregar valores en rangos de fechas arbitrarios. Por ejemplo, es posible que deseen ver la suma de las ventas unitarias entre dos meses, digamos febrero y abril de 1997. Aunque esto es bastante fácil de lograr con un miembro calculado cuando tiene el control de MDX, cuando sus usuarios desean usar un cliente en el trabajo se vuelve más difícil: ¿cómo permite que las personas elijan una fecha de inicio y una fecha de finalización en su dimensión de tiempo única?

La forma en que suelo resolver este problema es crear dos dimensiones de tiempo, una para la fecha de inicio y otra para la fecha de finalización. Sin embargo, si ajusta ambas a la columna de clave de tiempo en su tabla de hechos, verá que inicialmente no se devuelven datos a menos que seleccione los mismos miembros en ambas dimensiones; una transacción no puede tener lugar simultáneamente durante dos meses. Podría solucionar esto en un miembro calculado y sumar los valores entre los dos meses, pero eso no es muy elegante. Lo que realmente desea es que su dimensión de fecha de inicio actúe como una dimensión normal y que la dimensión de fecha de finalización esté presente en el cubo pero no tenga efecto en él, por lo que en su miembro calculado, simplemente puede agregar todos los valores entre el miembro actual en la fecha de inicio y el miembro en la fecha de inicio que es igual al miembro actual en la fecha de finalización.

En realidad, esto es muy fácil de hacer en AS2005 porque puede agregar una dimensión a un grupo de medida sin que tenga una relación con la tabla de hechos. En AS2K, debe seguir estos pasos:

  • Cree su cubo con una dimensión de tiempo como de costumbre y llámelo Fecha de inicio
  • Copie esta dimensión y péguela en la misma base de datos, y cuando se le solicite cambiarle el nombre, llámela Fecha de finalización
  • Cree un cubo virtual que contenga todo desde su cubo original.
  • Lamentablemente, para agregar la dimensión Fecha de finalización a este cubo virtual, no puede usar Analysis Manager, debe usar el código DSO. Aquí hay algunos VBScript como ejemplo:

atenuar mi servidor
sol db
vcubo tenue
sol de sol
Establecer myserver=createobject(«dso.server»)
miservidor.connect(«Miservidor»)
Establecer db = myserver.mdstores(«MyDatabase»)
Establecer vcube = db.mdstores(«MyVirtualCube»)
Establecer fromdim = vcube.dimensions.addnew(«Fecha de finalización»)
vcube.update

  • Ahora tiene un cubo virtual con dos dimensiones de tiempo, pero la dimensión Fecha de finalización no hace nada. Para resumir automáticamente los valores de una métrica entre las fechas de inicio y finalización seleccionadas, debe crear una métrica calculada como:

SUMA({
PERIODO DE APERTURA([START DATE].[LOWEST LEVEL], [START DATE].MIEMBROACTUAL)
:
PERIODO DE CIERRE([START DATE].[LOWEST LEVEL]ENLACE MIEMBRO([END DATE].MIEMBRO ACTUAL, [START DATE]))
}, MEDIDA VALIDA(MEDIDAS.[MY MEASURE]))

Una última cosa a tener en cuenta: dado que ahora estamos resumiendo un rango de meses en lugar de devolver un solo mes, el rendimiento de las consultas puede verse afectado. En ese caso, podría valer la pena echar un vistazo a mis entradas recientes sobre el ajuste de consultas de estilo YTD…