Muy a menudo, se encontrará escribiendo cálculos que necesitan resumir grandes conjuntos; de hecho, podrían sumar a todos los miembros hasta un nivel distinto de uno o dos. En esta situación, vale la pena usar la estructura de tu dimensión a tu favor. Tome la siguiente consulta, que resume las ventas por Internet de todos los clientes menos uno, luego realice un TopCount basado en esto:

CON
MEDIDAS DE LOS MIEMBROS. PRUEBA COMO
SUMA(
EXCEPTO(
[Customer].[Customer].[Customer].MIEMBROS
{[Customer].[Customer].&[20075]})
, [Measures].[Internet Sales Amount])

SELECCIONE MEDIDAS. PRUEBA EN 0,
TOPCOUNT(
[Date].[Date].[Date].MIEMBROS
10, MEDIDAS.PRUEBA) DE 1
A PARTIR DE [Adventure Works]

En mi computadora portátil que usa AS2005, la consulta se ejecuta en 2 minutos y 2 segundos en un caché frío (por cierto, a Katmai no le va mejor con esta consulta). asco Pero si cambiamos el cálculo para que en lugar de sumar los clientes que queremos, tomemos las ventas de todos los clientes y restemos las ventas del cliente que queremos. no lo hagas queremos (lo cual está bien si la medida que estamos viendo tiene una función agregada de Suma), entonces podemos hacer lo siguiente:

CON
MEDIDAS DE LOS MIEMBROS. PRUEBA COMO
[Measures].[Internet Sales Amount] –
([Customer].[Customer].&[20075], [Measures].[Internet Sales Amount])

SELECCIONE MEDIDAS. PRUEBA EN 0,
TOPCOUNT(
[Date].[Date].[Date].MIEMBROS
10, MEDIDAS.PRUEBA) DE 1
A PARTIR DE [Adventure Works]

… que se ejecuta en 1 segundo en un caché frío. Yendo más allá, si tiene un conjunto como este que suele resumir en cálculos, podría ser una buena idea crear un nuevo atributo en su dimensión para evitar tener que trabajar en MDX. En el ejemplo anterior de Adventure Works, el cliente 20075 puede ser el sultán de Brunei y ha pedido 5000 bicicletas nuevas para todos sus amigos, lo que significa que incluirlo en sus cálculos sesgaría los resultados. Lo que podría hacer es crear un nuevo atributo booleano en Cliente llamado algo así como «Excluir de los cálculos», lo que significaría que podría reescribir la consulta de esta manera:

PARA SELECCIONAR [Measures].[Internet Sales Amount] EN 0,
TOPCOUNT(
[Date].[Date].[Date].MIEMBROS
diez, [Measures].[Internet Sales Amount]) 1
A PARTIR DE [Adventure Works]
O ([Customer].[ExcludeFromCalculations].&[False])

y probablemente obtenga un rendimiento aún mejor.