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.
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.
He creado la tabla en cierta medida, pero al crear la columna calculada I (por supuesto) no puedo hacer referencia a sí misma.
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.
Solved! Go to 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.
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.
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
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
2 | |
1 | |
1 |