DAX LookupValue basado en SelectedValue y LookupValue en una medida

Un usuario Pregunto ✅

abacc22

Hola,

Quiero poder mostrar un valor de la tabla `Points_MaxValue` basado en un valor de fecha seleccionado (esta parte está funcionando, mirando las columnas` ValidFrom` y `ValidTo` date) y otro valor en una columna diferente` Points` en esa cierta tabla.

En la siguiente medida, funcionaría si solo buscara un valor basado en la Fecha seleccionada. Desafortunadamente, también quiero que busque otro valor. Actualmente, el VAR _Pts se ignora totalmente en la columna Calcular.

Points_MaxValue = 

VAR _date =
    SELECTEDVALUE ( Calendar_NoRelation[Date] )
VAR _Pts = DISTINCT(Objects_Points[ObjectPoints_Total])
VAR _vA =
    CALCULATE (
        MAX ( 'Points_MaxValue'[MaxValue] ) ,
        FILTER (
            ( 'Points_MaxValue' ),
            _date >= 'Points_MaxValue'[VALIDFROM]
                && _date <= 'Points_MaxValue'[VALIDTO]
                && _Pts = Points_MaxValue[Points]
        )
    )
RETURN
    IF ( _vA <> BLANK (), _vA, "NULL" )

Enlace al archivo .pbix:

https://1drv.ms/u/s!AliMmiR5bX0C3RYlZF13eUmvUyAc?e=afjLbN

Tablas en este archivo:

Objetos 1: 1 Objects_Points

Points_MaxValue (Puntos) 1: n Objects_Points (ObjectPoints_Total)

Points_MaxValue tiene por cantidad de puntos un cierto ‘MaxValue’ que quiero mostrar por registro (ObjectID) en una tabla. Dado que cada Objeto tiene una cierta cantidad de puntos, debería buscar el valor correcto que pertenece a una cierta cantidad de Puntos. Sin embargo, el filtro de fecha seleccionado selecciona el rango de fechas en el que se debe basar la búsqueda. Actualmente, el conjunto de datos solo tiene registros ValidFrom 1-7-2020 to 30-6-2021. Debería mostrar NULL antes y después de esas fechas. Más adelante, llenaré los datos de otros años en esta tabla que debería buscar.

Atentamente,

Erik

Anónimo

En respuesta a dedelman_clng

¡Yo no lo sabía! Lo resolví simplemente poniendo SELECTEDVALUE alrededor de él en la variable. ¡Gracias!

Points_MaxValue = 

VAR _date =
    SELECTEDVALUE ( Calendar_NoRelation[Date] )
VAR _Pts = 
    SELECTEDVALUE( Objects_Points[ObjectPoints_Total] )
VAR _vA =
    CALCULATE (
        MAX ( 'Points_MaxValue'[MaxValue] ) ,
        FILTER (
            ( 'Points_MaxValue' ),
            _date >= 'Points_MaxValue'[VALIDFROM]
                && _date <= 'Points_MaxValue'[VALIDTO]
                && _Pts = Points_MaxValue[Points]
        )
    )
RETURN
    IF ( _vA <> BLANK (), _vA, "NULL" )

Hola @ abacc22 @Anónimo,

Me alegra saber que el problema está resuelto. Puede aceptar la respuesta adecuada como solución, de esa manera, otros miembros de la comunidad podrían encontrar fácilmente la respuesta cuando tengan los mismos problemas.

Atentamente,

Yingjie Li

dedelman_clng

Hola @ abacc22

Descargué su PBIX pero parece que funciona como se esperaba. Cuando elegí la fecha de 2020-6-9, obtuve NULL para Points_MaxValue.

2020-09-03 12_27_08-TMS_Testfile_LookupSelectedValue [Read-Only] - Power BI Desktop.png

¿Puede proporcionar capturas de pantalla de lo que está viendo y ser muy específico sobre lo que espera ver?

David

Anónimo

En respuesta a dedelman_clng

Respondiendo a través de otra cuenta, ¡ya que actualmente estoy trabajando desde casa donde no tengo los detalles de inicio de sesión!

En primer lugar, creo que la selección de la fecha es un poco confusa, ya que es texto y el formato es AAAA-MM-DD. Como tengo la tabla ‘Points_MaxValue’ con solo datos entre 2020-7-1 hasta 2021-6-30, el filtro 2020-6-9 no mostró ningún valor. Actualmente actualicé la tabla con datos desde 2017-6-30 hasta 2020-6-30, por lo que ahora podrá ver una diferencia. Marque la diferencia cuando seleccione después de 2020-7-1: los números en cada registro aumentan en ~ 100 por registro.

Lo que quiero que haga es dejar que la medida muestre el valor correcto por registros, pero actualmente se agrega de alguna manera en lugar de mostrar el valor correcto por registro, ya que no tengo ni idea de cómo colocar la columna ‘Objectpoints_Total’ como entrada para la medida , mientras se usa el valor seleccionado de ‘Peildatum’ simultáneamente.

Entonces, en el siguiente ejemplo, selecciono 2021-6-9, y claramente reacciona mostrando valores relacionados con ese período, ya que si seleccionara un valor antes de 2020-7-1, bajaría la salida. Sin embargo, no muestra el valor correcto, ya que no usa mi ‘ObjectPoints_Total’ como la segunda variable, ya que no sé dónde ponerlo en la medida.

TMS_Testfile_Endresult.png

Por ejemplo, espero 393,14 en lugar de 493 para los objetos 11160, 11161, 11185 y 11189, ya que tienen 97 puntos. 97 puntos como se muestra en la tabla de la derecha corresponde al valor de 393,14.

¿Quizás esto tenga más sentido?

Atentamente,

Erik

dedelman_clng

En respuesta a Anónimo

«No tengo ni idea de cómo colocar la columna ‘Objectpoints_Total’ como entrada para la medida, mientras uso el valor seleccionado de ‘Peildatum’ simultáneamente.«

Cuando coloca una medida en una tabla de la forma en que está, todos los demás valores que no sean de medida en esa fila se convierten en su propio divisor / filtro implícito. Entonces SELECTEDVALUE (ObjectPoints_Total) debería funcionar igual que si ese valor estuviera en una segmentación. Puede hacer tantos SELECTEDVALUE o LOOKUPVALUE en variables dentro de su código como necesite. Pruébelo y vea si tiene más éxito (no estoy en condiciones de poder descargar una nueva copia de su pbix).

David

Anónimo

En respuesta a dedelman_clng

¡Yo no lo sabía! Lo resolví simplemente poniendo SELECTEDVALUE alrededor de él en la variable. ¡Gracias!

Points_MaxValue = 

VAR _date =
    SELECTEDVALUE ( Calendar_NoRelation[Date] )
VAR _Pts = 
    SELECTEDVALUE( Objects_Points[ObjectPoints_Total] )
VAR _vA =
    CALCULATE (
        MAX ( 'Points_MaxValue'[MaxValue] ) ,
        FILTER (
            ( 'Points_MaxValue' ),
            _date >= 'Points_MaxValue'[VALIDFROM]
                && _date <= 'Points_MaxValue'[VALIDTO]
                && _Pts = Points_MaxValue[Points]
        )
    )
RETURN
    IF ( _vA <> BLANK (), _vA, "NULL" )

Deja un comentario

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