Buscar registros columna ID: Nuevos, Duplicados y solucionados

Buenos días,

Primero  felicitarle por su Foro.

Llevo varios días buscando y operando con medidas en Dax sin éxito para calcular lo siguiente:

Tengo una tabla en POWER QUERY llamada SOLPED (Solicitudes de Pedidos), contiene todas las solicitudes de pedidos de dos semanas 42 y 43 y necesito extraer los datos contenidos dentro del plazo de gestión <=0 según indico en la grafica. como ayuda, he puesto un campo "resultado buscado" con lo que necesito hacer en DAX (pongo una imagen).

Debido a que la tabla tiene muchas líneas, he borrado líneas  para no colapsar el mensaje.

Muchas gracias

TABLA SOLPED

RESULTADO BUSCADO

 

 

TABLA SOLPED

Hola Edmach,

No estoy seguro de haberlo entendido bien. Déjame que intente explicar mi interpretación y me corriges:

  • En tu tabla hay pedidos para dos semanas consecutivas
  • Querrías extraer solo aquellas para las que el plazo de gestión es menor o igual a cero
  • Para las extraídas en el paso anterior, querrías identificar cuáles son duplicadas, cuáles son nuevas y cuáles están solucionadas (es lo que aparece en tu columna de "resultado buscado"), y quieres que esta información se muestre con formato de texto en una columna de tu tabla.

Confirma o corrige, please.

Un saludo

Daniel Burrueco

Es correcta tu interpretación, pero quiero en un tabla que tengo previamente con los totales de cada semana y quiero poner las cantidades de la semana anterior con la semana actual de los tres estado de solicitud de pedidos.

Espero que sirva y perdona por mí falta de explicación del problema.

Mucha gracias

Hola Daniel,

 

   Solo como ejemplo sin tener en cuenta las cantidades que se muestran, adjunto tabla final que estoy intentando obtener.

Muchas gracias por tu ayuda.

Saludos

TABLA FINAL

 

Hola Edmach,

A ver, aquí va mi primera idea (la más sencilla que se me ocurre): crea en tu tabla varias columnas calculadas en las que calcules (valga la redundancia) si una línea se mantiene la semana siguiente (si no es así es que se ha cerrado), si existe la semana siguiente (en cuyo caso es "duplicada" -si es que es éste el criterio, no lo has dicho-), etc. Y parte de esas nuevas columnas para extraer la tabla que necesitas. Por ejemplo, me he preparado un ejemplo de juguete con tus datos. Parto de esta tabla:

Tabla de datos

Ahora puedo averiguar si un identificador se mantiene la siguiente semana con la siguiente columna calculada:

Duplicada en semana siguiente = 
    COUNTROWS(
        FILTER(
            data,
            (data[SEMANA] = EARLIEST(data[SEMANA])+1)
            && (data[IDSOLPED] = EARLIEST(data[IDSOLPED]))
            )
    )

Básicamente filtro la tabla (a la que he llamado "data") de forma que el identificador sea el mismo que el de la fila que estoy recorriendo pero la semana sea una más. Y cuento el número de filas del resultado (que el el conjunto de id's que se mantienen la siguiente semana: solo habrá 1 o 0). El resultado es el siguiente:

Duplicados

Ahora podrías leer esta columna en una matriz y saber, parar cada semana, cuántos duplicados hay con respecto a la semana siguiente.

Para el resto de métricas que quieres puedes utilizar un código semejante, adaptándolo en cada caso. Por ejemplo, los nuevos id's serían aquellos que están en una semana pero no en la anterior.

Un saludo

Daniel Burrueco

Muchas gracias Daniel, trabajaré en esta idea. Entiendo que el id que cree no vale? Tengo que crear un id por semana y no por el número de solped+posición como ya existe en mi tabla?.

A fecha de hoy no estoy muy familiarizado con el lenguaje Dax. Vengo de Excel y estaba pensando en el coincidir y contar.si y trasladarlo a Dax. Se puede?.

Me puedes aconsejar algún libro para practicar con las funciones?

Gracias de Nuevo

Daniel no existe en Dax la posibilidad como en SQL el NOT IN SELECT TABLA.CAMPO?, O en Excel "consolidate" = comparación de matrices,  pero operando con la ID=no de solped+posición..

 

Las funciones de Excel o SQL y DAX tienen enfoques muy distintos. Si tienes una columna -columna que puede ser el resultado de filtra otra- puedes comprobar si un valor pertenece a ella o no con la función CONTAINS.

Para consolidar tablas se me ocurren varias opciones en función del resultado que desees. Por ejemplo, puedes unirlas con UNION y agregarlas según los campos que necesites con SUMMARIZE, SUMMARIZECOLUMNS o con GROUPBY.

Un saludo

Daniel

Muchas gracias Daniel por tu ayuda, intenté lo que me dijiste pero me di cuenta que debí habértelo expuesto mal el problema. Lo he intentado con lo siguiente, por si hay algún forero que le valga la solución. Sintetizando el problema es que necesito ver qué registros existe en una tabla y cuáles no y viceversa mediante un número Id:

EVALUATE

VAR Sem44 =

    CALCULATETABLE (

        VALUES ( 'Solped'[IDsolped] ),

        'Solped'[Semana] IN { 44 }

    )

VAR Sem43 =

    CALCULATETABLE (

        VALUES ( 'Solped'[IDsolped] ),

        'Solped'[Semana] IN { 43 }

    )

 

RETURN

    Countrows(IDSolped); EXCEPT(Sem44;Sem43).

Gracias por tu tiempo y consejos.

Un abrazo

Enviado por Edmach el Vie, 30/10/2020 - 12:49