Este es un problema con el que me encontré hace un tiempo durante las pruebas beta, pero ahora sé que está presente en la compilación RTM y, como sé que será una causa importante de confusión, pensé en escribir un blog al respecto. En pocas palabras, el MDX para algunos cálculos generados por Time Intelligence Wizard en BIDS no funciona. Por ejemplo, intente usar el asistente para agregar un cálculo del año hasta la fecha al [Date].[Calendar] jerarquía de usuarios en el cubo Adventure Works. Terminará con un poco de secuencia de comandos MDX como esta:

/*
Inicio del script de Time Intelligence para el [Date].[Calendar] jerarquía.
*/

Crear Miembro CuboActual.[Date].[Calendar Date Calculations].
[Year to Date]
ME GUSTA «N / A» ;

( [Date].[Calendar Date Calculations].[Year to Date],
{
[Measures].[Internet Sales Amount]
},
[Date].[Calendar Year].[Calendar Year].

Miembros ) =
Agregar(
{ [Date].[Calendar Date Calculations].
miembro predeterminado } *
Período hasta la fecha(
[Date].[Calendar].[Calendar Year],
[Date].[Calendar].
miembro actual
)
);
/*
Guión de End Time Intelligence para el [Date].[Calendar] jerarquía.

*/

Cuando intenta ejecutar una consulta contra esta jerarquía de usuarios (o incluso las jerarquías de atributos constituyentes), encontrará que solo ve los valores YTD para el nivel Año, lo que no es realmente útil. Aquí hay una consulta que ilustra esto:

PARA SELECCIONAR

[Measures].[Internet Sales Amount]
*
[Date].[Calendar Date Calculations].[Calendar Date Calculations].TODOS LOS MIEMBROS
A 0,
[Date].[Calendar].
MIEMBROS
A
1
A PARTIR DE [Adventure Works]

Entonces, ¿cómo podemos resolver este problema? Depende de la complejidad de su propia dimensión de fecha; afortunadamente o desafortunadamente, la dimensión de fecha en Adventure Works es más complicada que el promedio. Para mí, cualquier solución debe cumplir con los siguientes criterios:
  • Debería funcionar en el [Date].[Calendar] jerarquía de usuarios.
  • Debería funcionar en cualquier combinación significativa de jerarquías de atributos. Entonces, en Adventure Works esto debería significar que no deberías ver los valores al mirar el [Date].[Semester of Year] jerarquía solo, pero si te uniste [Date].[Year] con [Date].[Semester of Year] entonces tiene sentido ver los valores YTD.
  • De alguna manera, esto debería sortear los misteriosos mensajes de «error interno» que comenzaron a aparecer en OWC, pero no en mi propio MDX en SSMS, cuando comencé a probar mi código.

Después de mucho pensar, encontré el siguiente scriptlet, que es la única forma que pude ver para cumplir adecuadamente con los dos primeros criterios (traté de encontrar un enfoque más simple, créanme) y minimicé la aparición del error en el tercer punto. :

/*
Inicio del script de Time Intelligence para el [Date].[Calendar] jerarquía.
*/

Crear Miembro CuboActual.[Date].[Calendar Date Calculations].[Year to Date] ME GUSTA «N / A» ;
( [Date].[Calendar Date Calculations].[Year to Date],
{
[Measures].[Internet Sales Amount]
}
,
[Date].[Date].[Date].
Miembros
) =
Agregar(
{ [Date].[Calendar Date Calculations].
miembro predeterminado } *
Período hasta la fecha(
[Date].[Calendar].[Calendar Year],
[Date].[Calendar].
miembro actual
)
);

ALCANCE([Date].[Calendar Date Calculations].[Year to Date], [Measures].[Internet Sales Amount]);
ALCANCE([Date].[Calendar Year].[Calendar Year].Miembros);
ESTE=( [Date].[Calendar Date Calculations].[Year to Date],COLA(EXISTENTE([Date].[Date].[Date].Miembros),1).OBJETO(0).OBJETO(0));
ALCANCE([Date].[Calendar Semester].[Calendar Semester].Miembros);
ESTE=( [Date].[Calendar Date Calculations].[Year to Date],COLA(EXISTENTE([Date].[Date].[Date].Miembros),1).OBJETO(0).OBJETO(0));
ALCANCE([Date].[Calendar Quarter].[Calendar Quarter].Miembros);
ESTE=( [Date].[Calendar Date Calculations].[Year to Date],COLA(EXISTENTE([Date].[Date].[Date].Miembros),1).OBJETO(0).OBJETO(0));
ALCANCE([Date].[Month Name].[Month Name].Miembros);
ESTE=( [Date].[Calendar Date Calculations].[Year to Date],COLA(EXISTENTE([Date].[Date].[Date].Miembros),1).OBJETO(0).OBJETO(0));
TERMINAR ALCANCE;
TERMINAR ALCANCE;
TERMINAR ALCANCE;
TERMINAR ALCANCE;
TERMINAR ALCANCE;
/*
Guión de End Time Intelligence para el [Date].[Calendar] jerarquía.
*/

Básicamente, lo que hace la primera asignación es realizar el cálculo YTD en el [Date].[Date].[Date] solo nivel; luego, la serie de SCOPE anidados devuelve el valor YTD del último miembro existente en el [Date].[Date].[Date] nivel para otras granularidades significativas, excluyendo cuidadosamente las combinaciones de dimensiones que no tienen sentido. Mosha, si estás leyendo, ¿hay alguna forma mejor de hacerlo?