Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and a 50 percent discount on exams.
Get startedEarn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.
Hola comunidad de Microsoft,
Da la sensación de que cuanto más aprendo sobre Power BI y DAX, menos sé realmente.
He estado trabajando con medidas recientemente, ya que uno de nuestros modelos de Power BI hace referencia a los datos en modo de consulta directa en lugar de en modo de importación, por lo que he estado transformando algunas de mis columnas calculadas en medidas para dar cabida a esto. Un problema que se me ha ocurrido es hacer referencia a otra columna en otra medida.
Así que este es el escenario. Tengo una tabla de datos con el ID de actividad, la fecha del cronograma y el ID del proyecto. Donde ID de proyecto, se conecta a una tabla de dimensiones que se utiliza como filtro para ver qué actividad pertenece a qué proyecto. Tengo una tabla de fechas que nos da las fechas de finalización del período de 2021 a 2030. Para mi empresa es cada dos viernes. Anteriormente tenía una columna calculada que tomaba todas las fechas de programación de cada actividad y mostraba a qué fecha de finalización del período pertenecía. Lo convertí a una medida que se muestra a continuación:
End Period Date Measure =
VAR enddate = SELECTEDVALUE('Fact_Table'[Schedule Date])
RETURN
CALCULATE(
MIN(Date_Table[End Period]),
Filter(Date_Table, Date_Table[End Period] > enddate)
)
Cuando incluyo esto en un objeto visual de tabla de Power BI, esta medida funciona según lo previsto, de forma similar a una columna calculada. El problema con el que me encuentro es cuando filtro por proyecto, digo que solo quiero programar actividades del proyecto A, el objeto visual de Power BI muestra TODAS las actividades y, si la actividad NO está en el proyecto A, simplemente da la fecha de finalización más pequeña en mi tabla de fechas. Entonces, para dar una imagen rápida, ya que no puedo cargar mis datos (directquery to datalake)
Cómo se ve mi tabla de hechos:
Programar actividad | Fecha de programación | Proyecto |
Caminar | 2024-01-03 | A |
Comer | 2024-01-15 | A |
Dormir | 2024-02-12 | B |
Cómo se veía mi columna calculada anterior al filtrar al Proyecto A:
Programar actividad | Fecha de programación | Período de finalización |
Caminar | 2024-01-03 | 2024-01-05 |
Comer | 2024-01-15 | 2024-01-19 |
Aspecto que genera la medida al filtrar para el proyecto A:
Programar actividad | Fecha de programación | Fecha de finalización del período |
Caminar | 2024-01-03 | 2024-01-05 |
Comer | 2024-01-15 | 2024-01-19 |
Dormir | 2024-02-12 | 2021-01-08 |
Creo que este problema ocurre con el uso de "SELECTEDVALUE". El filtro, por alguna razón, mantiene toda la actividad programada en lugar de filtrarla, y dado que ese contexto de filtro no tiene una fecha de programación para esa actividad, usa BLANK() como variable de fecha de finalización. Esa es mi hipótesis.
Entonces, el TLDR, ¿hay una alternativa de SELECTEDVALUE en una medida, en general, y en mi escenario específico? Sé que max, min, sum, podría usarse, pero en mi escenario no tendrá sentido.
Hola
¡Eso funcionó perfectamente en mis pequeños datos de muestra! Ahora lo intentaré en mi conjunto de datos más grande, pero en todo caso, los problemas serán de otras entradas y no de este problema nulo y de filtro
Gracias
Hola
¡Eso funcionó perfectamente en mis pequeños datos de muestra! Ahora lo intentaré en mi conjunto de datos más grande, pero en todo caso, los problemas serán de otras entradas y no de este problema nulo y de filtro
Gracias
@AlvinLy , Intente medir como
Medida de fecha de finalización del período =
Fecha de finalización del VAR = Max('Fact_Table'[Fecha de programación])
DEVOLUCIÓN
CALCULAR(
MIN(Date_Table[Fin del período]),
Filter(all(Date_Table), Date_Table[Punto de finalización] > fecha de finalización)
)
Hola Amitchandak
Gracias por su sugerencia. Obtengo el mismo resultado. Empiezo a preguntarme si es porque tengo un DirectQuery en lugar de un modelo importado que se me ocurre este problema, pero es extraño ya que creo que la fórmula que tengo es bastante simple.
Además de SELECTEDVALUE, MAX y MIN, ¿cuáles son otras formas típicas en las que seleccionaríamos la columna de la misma fila mediante una medida?
Supongo que la lógica de MAX o MIN es que durante el contexto de fila del cálculo solo hay un valor, por lo que elige ese valor independientemente de si es MAX o MIN. Eso tiene sentido en mi mente, pero no estoy seguro de por qué no está funcionando.
Hola @amitchandak , gracias por la respuesta rápida, agregaré más.
Hola @AlvinLy ,
Con respecto a su pregunta, modifique su expresión dax.
End Period Date =
VAR _a = SELECTEDVALUE(FactTable[Schedule Date])
RETURN IF(ISBLANK(_a),BLANK(),MINX(FILTER('DateTable','DateTable'[Date] >= _a),[Date]))