Recientemente, un cliente me mostró un cálculo MDX utilizando una declaración CASE, donde obtuvo un gran aumento de rendimiento al cambiar de un CASE buscado a un CASE simple. Para el registro, aquí hay un ejemplo de una declaración CASE simple:

CASO [Measures].[Internet Sales Amount]
CUANDO 0 ENTONCES 0
CUANDO 1 ENTONCES 1
CUANDO 2 ENTONCES 2
CUANDO 3 ENTONCES 3
DE LO CONTRARIO 4
TERMINAR

Y cómo se ve el CASO equivalente buscado:

CASO
CUANDO [Measures].[Internet Sales Amount]=0 ENTONCES 0
CUANDO [Measures].[Internet Sales Amount]=1 ENTONCES 1
CUANDO [Measures].[Internet Sales Amount]=2 ENTONCES 2
CUANDO [Measures].[Internet Sales Amount]=3 ENTONCES 3
DE LO CONTRARIO 4
TERMINAR

En el código de mi cliente, estaban haciendo muchas condiciones complejas que involucraban medidas calculadas, pero aún así no podía entender por qué su búsqueda CASE funcionaba mucho peor porque la lógica en la búsqueda CASE simple y CASE era la misma. Por lo tanto, a su vez, pregunté a mis amigos en Redmond y Marius Dumitru me dio algunas ideas muy útiles que pensé que podría transmitir. Básicamente, un CASE buscado requiere que se hayan evaluado todas las condiciones de bifurcación anteriores antes de elegir una bifurcación determinada, lo que dificulta que el optimizador de consultas evalúe un CASE buscado en modo bloque. Por lo tanto, siempre es mejor usar un CASO simple cuando sea posible; En el peor de los casos (y supongo que eso es lo que le sucedió a mi cliente), el rendimiento de un CASO buscado puede ser muchas veces peor que el de un CASO simple, incluso cuando parecen estar haciendo lo mismo.