Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Columna calculada (probabilidad de superación) utilizando valores anteriores

Hola a todos

Estoy teniendo algunas dificultades con un cálculo que se utiliza para calular una probabilidad de superación en un conjunto de datos determinado.

La historia corta es para la industria industrial Hygiene y estamos usando una lista de Sharepoint para recopilar información que luego se transforma y se presenta en Power BI.

Actualmente Excel se utiliza para calcular este valor que es fácil de modo ya que sólo se puede hacer referencia a una celda debajo, pero mi cerebro está luchando para encontrar una manera de hacer esto en PBI.

Tabla de ejemplo de Excel Con PDEP siendo la columna que estoy tratando de calcular.

"Fórmula desde la celda I4" =i5+(1-i5)*@Na/(@Na+@Nbj)

NA es el rango de valores de la columna 'c'

Nbj es el rango de valores de la columna 'h'

La fórmula se continúa por la columna con los valores 'i' siendo la celda de abajo.

M4dsteve_0-1620877966665.png

He creado la tabla en cierta medida, pero al crear la columna calculada I (por supuesto) no puedo hacer referencia a sí misma.

M4dsteve_1-1620879179883.png

PDEP = 
    VAR Previous = if('ND Summary'[Pack ID]=MAX('ND - Upside Down'[Pack ID]),0,EARLIER([PDEP],1))
    return Previous+(1-Previous)*'ND Summary'[Values]/('ND Summary'[Values]+'ND Summary'[N bj id])

Debe haber una manera inteligente de hacer esto por ahí, así que aprecio toda su ayuda.

1 ACCEPTED SOLUTION

Hay @v-janeyg-msft ,

Logré resolver esto con un script de Python que genera los datos después de procesar el cálculo recursivo.

Resulta que pandas es súper poderoso y fue una buena experiencia de aprendizaje 😄

Fragmento de código de esa columna:

 # Build pdep Column
    for i in range(0, (len(support))):
        if support.loc[i, 'IsNDValue']:
            na = 0
        else:
            na = support.loc[i, 'Exposure Result mg_x']
        nbj = support.loc[i, 'n_bj']
        if i != 0:
            prev = support.loc[i - 1, 'pdep']
            support.loc[i, 'pdep'] = prev + (1 - prev) * na / (na + nbj)
        else:
            prev = 0
            support.loc[i, 'pdep'] = prev + (1 - prev) * na / (na + nbj)

Gracias por su ayuda.

View solution in original post

5 REPLIES 5
Syndicate_Admin
Administrator
Administrator

Ahí, @M4dsteve

No entiendo muy bien tu lógica, pero esto parece ser un problema recursivo. Si implica cálculos recursivos, la función Dax es difícil de hacer debido a las limitaciones del lenguaje dax, pero excel es simple. Puede calcularlo en Excel primero, y luego traer datos a powerbi, puede ser la manera más fácil.

v-janeyg-msft_0-1621221482819.png

Saludos

Janey Guo

Si este post ayuda , entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Gracias @v-janeyg-msft,

Sí, tiene razón en que la referencia 'i' es el problema aquí, ya que está calculando la hoja de cálculo con los valores de la fila siguiente.

Empecé con esta tabla al revés en Power BI y tenía una instrucción IF para si el índice de fila es 1, entonces el valor anterior es 0, pero entonces no puedo hacer referencia a valores anteriores en esa columna después de eso de todos modos.

He echado un vistazo a través de la documentación de Power Query M, pero no vi nada que se adapte a este caso. Desafortunadamente, nuestro origen de datos no es muy flexible, por lo que no puedo calcularlo antes de la importación a BI.

Ahí, @M4dsteve

En cuanto al problema de la recursividad, algunos expertos en powerbi lo han estudiado, y no hay una buena manera. DAX y M no son fáciles de manejar. ¿Qué quiere decir con fuentes de datos inflexibles? Si hay muchos datos, puede importarlos en lotes. ¿Ha intentado usar el formulario de referencia dinámica $A$ para calcular el resultado en Excel?

Saludos

Janey Guo

Si este post ayuda , entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hay @v-janeyg-msft ,

Logré resolver esto con un script de Python que genera los datos después de procesar el cálculo recursivo.

Resulta que pandas es súper poderoso y fue una buena experiencia de aprendizaje 😄

Fragmento de código de esa columna:

 # Build pdep Column
    for i in range(0, (len(support))):
        if support.loc[i, 'IsNDValue']:
            na = 0
        else:
            na = support.loc[i, 'Exposure Result mg_x']
        nbj = support.loc[i, 'n_bj']
        if i != 0:
            prev = support.loc[i - 1, 'pdep']
            support.loc[i, 'pdep'] = prev + (1 - prev) * na / (na + nbj)
        else:
            prev = 0
            support.loc[i, 'pdep'] = prev + (1 - prev) * na / (na + nbj)

Gracias por su ayuda.

Allí, @M4dsteve

Estoy muy contento de que pueda usar python para resolver el problema, porque dax es un lenguaje de análisis de datos y no es adecuado para la iteración de cálculo. Es su capacidad para utilizar varios idiomas con fluidez. 😆

Puede marcar su respuesta como solución.

Saludos

Janey Guo

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.