No hay suficiente memoria para completar esta operación al cargar la medida en la matriz

Un usuario Pregunto ✅

Gorgo

Hola a todos,

estoy trabajando en un informe de power bi donde necesito multiplicar los valores de medida de «Tasa de pérdida de 3 años» basados ​​en el año del índice en la matriz

a continuación se muestra la fórmula de la «Tasa de Pérdidas a 3 Años»:

Losses 3 Years Rate =


IFERROR(DIVIDE(
CALCULATE (     
   [Incurred Claims],      
   FILTER (      
      ALL( LineReport[Index Year],LineReport[UW Year]),      
      LineReport[Index Year] <= MAX ( LineReport[Index Year]) &&
      LineReport[UW Year] >= MAX(LineReport[UW Year])-2 && LineReport[UW Year] <= MAX(LineReport[UW Year])
        
   )   
)
,
if( SELECTEDVALUE(LineReport[Index Year])=1,
CALCULATE(
   [Incurred Claims],      
   FILTER (      
      ALL( LineReport[Index Year],LineReport[UW Year]),      
      LineReport[Index Year] <= MAX ( LineReport[Index Year]) &&
      LineReport[UW Year] >= MAX(LineReport[UW Year])-2 && LineReport[UW Year] <= MAX(LineReport[UW Year])
   )
),
CALCULATE (     
   [Incurred Claims],      
   FILTER (      
      ALL( LineReport[Index Year],LineReport[UW Year]),      
      LineReport[Index Year] <= MAX ( LineReport[Index Year])-1 &&
      LineReport[UW Year] >= MAX(LineReport[UW Year])-2 && LineReport[UW Year] <= MAX(LineReport[UW Year])
    )
)


),0)

se genera correctamente según la siguiente captura de pantalla:

Pérdidas.jpg

ahora necesito calcular el factor de desarrollo, que es la «tasa de pérdidas de 3 años» para el año índice multiplicado por los demás, por ejemplo:

Fac. de desarrollo para el índice 1 = Tasa1 * tasa2*tasa3*tasa4*tasa5*tasa6*tasa7*tasa8
Dev Fac para el índice 2 = tasa2*tasa3*tasa4*tasa5*tasa6*tasa7*tasa8
Dev Fac para el índice 3 = tasa3*tasa4*tasa5*tasa6*tasa7*tasa8
Fac. de desarrollo para el índice 4 = tasa4*tasa5*tasa6*tasa7*tasa8
Fac. de desarrollo para el índice 5 = tasa5*tasa6*tasa7*tasa8
Fac. de desarrollo para el índice 6 = tasa6*tasa7*tasa8
Fac. de desarrollo para el índice 7 = tasa7*tasa8
Fac. de desarrollo para el índice 8 = tasa8

Estoy usando la siguiente fórmula:

Cape Cod IL 3 Years Rate = 
var indexyear = SELECTEDVALUE(LineReport[Index Year])
return
EXP(
     SUMX(
          FILTER(ALL(LineReport), LineReport[Index Year]<=MAX(LineReport[Index Year]) && 
               LineReport[Index Year]>= indexyear)         
             ,           
          LN([Losses 3 Years Rate])
         )    
    )	

sin embargo, la matriz sigue cargando y arroja un error de memoria:

Fac. Dev.jpg

a continuación se muestra la fórmula que utilicé en Matrix Value:

Rate Calculation = 
    VAR Val =
        SWITCH(SELECTEDVALUE('Chain Ladder'[Group]),
            "Premium 3 Years",[Premium 3 Years Rate],
            "Premium 5 Years",[Premium 5 Years Rate],
            "Premium 7 Years",[Premium 7 Years Rate],
            "Premium All Years",[Premium All Years Rate],
            "Premium Average",[Premium Average Years Rate],

            "Losses 3 Years", [Losses 3 Years Rate],
            "Losses 5 Years",[Losses 5 Years Rate],
            "Losses 7 Years",[Losses 7 Years Rate],
            "Losses All Years",[Losses All Years Rate],
            "Losses Average",[Losses Average Years Rate],

            "Development Factor",'Cape Cod'[Cape Cod IL 3 Years Rate] 
    )
    RETURN 

         FORMAT(Val, "0.00000")

Agradezco su ayuda ya que no puedo ir más lejos con esto.

Atentamente,

jorge

Alba

Hola @gorgo

¿Qué pasa con el código de [Incurred Claims]? ¿Te sería posible compartir el pbix?

Por favor marque la pregunta resuelta cuando termine y considere dar felicitaciones si las publicaciones son útiles.

Póngase en contacto conmigo en privado para obtener asistencia con cualquier necesidad de BI a gran escala

Salud

SU18_powerbi_badge

Gorgo

En respuesta a Alba

Hola, las reclamaciones incurridas son una fórmula de suma simple:

Incurred Claims = SUM(LineReport[Paid Claims])+[Outstanding Claims]

Outstanding Claims = if (SELECTEDVALUE('Year Type'[Type])="FY",
                    CALCULATE(SUM(LineReport[OS Claims]),LineReport[Last OS Position FY]=1), 
                    CALCULATE(SUM(LineReport[OS Claims]),LineReport[Last OS Position UW Year]=1))

Last OS Position FY = IF(AND([Max Period From FY]=  LineReport[Premium Period From],[Max Transaction From FY]=LineReport[Transaction Date]),1,0)

Last OS Position UW Year = IF(LineReport[Statement Type]="Claim Statement" ,
                            IF(LineReport[Transaction Date]=[Max Transaction Date],1,0),
                            IF(AND([Max Period From]=LineReport[Premium Period From],[Max Transaction Date]=
                            LineReport  [Transaction Date]),1,0))

estas son fórmulas involucradas.

tenga en cuenta que utilicé Reclamos incurridos en otras fórmulas y otras tablas, y se generó normalmente

Gracias

greg_deckler

@gorgo: primero, aprecie toda la información, pero será difícil solucionar este problema sin volver a crearlo y para eso necesitaría datos de muestra. Consulte esta publicación sobre cómo obtener una respuesta rápida a su pregunta: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490

Las partes más importantes son:
1. Muestre datos como texto, use la herramienta de tabla en la barra de edición
2. Salida esperada de datos de muestra
3. Explicación en palabras de cómo pasar del 1 al 2.

Dicho esto, es posible que pueda mejorar el rendimiento de sus medidas DAX. Por ejemplo, IFERROR es una función DAX costosa y no la necesita porque ya está usando DIVIDE, que tiene una verificación de errores incorporada como tercer parámetro opcional. Así que me desharía de eso.

Otros pensamientos, no incluye su fórmula para reclamos incurridos, por lo que puede haber optimizaciones allí. Además, ¿realmente necesita TODO o puede usar algo como ALLEXCEPT o algún otro filtro base, o quizás REMOVFILTERS? Es costoso comenzar con TODO, ya que consumirá mucha memoria al realizar el cálculo DAX.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *