A raíz de un caso real, el equipo de SolidQ ha estado buscando la mejor manera de implementar una jerarquía padre-hijo de cuentas contables con un operador unitario que tuviera un buen rendimiento, a pesar de la gran cantidad de datos a la que tenía que enfrentarse. Veremos cómo aplanar la jerarquía, cómo implementarlo con SSAS, con una alternativa MDX, cómo añadir ordenación a las cuentas basadas en otro atributo, Time Balance Average y algún otro truco de tuning.
tics en la vida cotidiana prepa en linea modulo 1.pptx
Hilando fino en SSAS multidimensional - SolidQ Summit 2018
1. Hilando fino en SSAS multidimensional
Jerarquías padre – hijo con operadores unarios y más
2. ¿Quiénes somos?
Marta Pereira – DPA mpereira@solidq.com
Daniel Gil – DPE dgil@solidq.com
Miguel Egea – Mentor megea@solidq.com
3. Introducción
Hemos sufrido…
… con el rendimiento de las jerarquía padre – hijo en SSAS MD
enfocado a cuentas contables…
Y hemos aprendido una barbaridad sobre el operador unario!
4. Guion
Jerarquías padre – hijo. Implementación en SSAS MD
• Nativa
• Con jerarquía aplanada
• Operador unario nativo
• Factor
Cálculos de tiempo personalizados (Time Balance Average)
5. Implementación nativa en SSAS
Multidimensional
Usando las herramientas que proporciona SSAS para
implementar las jerarquías.
• Único caso que recoge correctamente el operador unario
• Incluyendo nodos no hoja
• Virgulilla ~
• Signos
• Rendimiento!
7. Ayudando a SSAS: jerarquías aplanadas
Aplanamos la jerarquía previamente de forma que deja de ser
una padre – hijo convencional y la definimos como una jerarquía
“normal” en SSAS.
Pero que implemente él su operador unario!
• Signos
• Virgulilla
8. Jerarquías padre – hijo en ssas – Aplanado
Explicación de aplanado
Blog SolidQ
12. Vamos a disimular, que parezca el de verdad
Si queremos que la cuenta se muestre positiva aunque reste al
agregar, podemos añadir este format string al código MDX:
scope([Measures].[Qty Factor]);
format_string(this) = IIF(Measures.[Factor]<0 , “#,##0.00;#,##0.00;0;0", "#,##0.00;-#,##0.00;0;0");
end scope;
13. Artículo en el blog de SolidQ
Operador unario y jerarquías padre-hijo en SSAS MD
18. Rendimiento case vs iif
case
when cond1 then result1
when cond2 then result2
…
else result_else
end
iif(cond1 , result1, result_else)
- Traduciendo el case:
iif(cond1 , result1, iif(cond2, result2,result_else))
- Varias condiciones:
iif(cond1 and cond2, result1, result_else)
- Mejor iifs anidados:
iif(cond1, iif( cond2, result1, result_else2), result_else1)