Power BI Spain Users Group

Please login or click SIGN UP FOR FREE to create your PowerBIUG account to join this user group.
 View Only
  • 1.  DAX Fecha de ultima compra de un producto

    Posted Mar 03, 2021 01:10 PM
    Hola a todos,
    estoy intentando desarrollar una medida DAX para que, dada una fecha, me devuelva la fecha de la ultima compra de un producto.
    Asi, en una tabla/tabla dinamica tendré todos los productos y la medida mostrará la fecha de la ultima compra de cada uno de ellos.
    La logica es la siguiente:
    Si un producto tiene compras en el mes seleccionado se mostrará la fecha de la ultima compra del mes.
    Si no hay compras de ese producto en el mes seleccionado se mostrará la ultima fecha, anterior al mes seleccionado, en que se compró el producto.

    Llevo varios dias intentandolo y no doy con la tecla.

    Mi modelo de datos (my resumido) sería como sigue:
    Calendar --> Invoices --> InvoiceLines <-- Product

    Y mi codigo DAX es el siguiente:
    VAR selectedProduct =
    IF (
    HASONEVALUE ( Product[productId] );
    VALUES ( Product[productId] );
    BLANK ()
    )
    VAR selectedDate =
    IF (
    HASONEVALUE ( 'Calendar'[date] );
    VALUES ( 'Calendar'[date] );
    BLANK ()
    )
    RETURN
    CALCULATE (
    MAX(Invoices[date]);
    FILTER (
    InvoiceLines;
    RELATED ( Product[productId] ) = selectedProduct
    );
    FILTER (
    ALL('Calendar') ;'Calendar'[date] <= EOMONTH(selectedDate,0)
    )
    )

    Os agradezco cualquier tipo de ayuda.

    ------------------------------
    Santiago Martin
    ------------------------------


  • 2.  RE: DAX Fecha de ultima compra de un producto

    Bronze Contributor
    Posted Mar 03, 2021 04:02 PM
    Me da que eso lo hace ya directamente max(fechacompra)

    Si no tienes un filtro sobre la tabla de fechas, ese max estará en el contexto de producto y te devolverá el resultado correcto. Si estaas usando filtros de fechas por algún motivo  sol ha de hacer  calculate(max(fechacompra),all(fechacompra)),

    Estoy escribiendo de memoria pero no debe ir muy allá la cosa

    ------------------------------
    Miguel Egea
    Mentor en SolidQ
    MPV Reconnect
    Administrador de PortalSQL.es
    ------------------------------



  • 3.  RE: DAX Fecha de ultima compra de un producto

    Posted Mar 04, 2021 12:29 PM
    Muchas gracias por tu respuesta @Miguel Egea
    He creado un modelo de datos ejemplo y lo he conseguido... pero hay una leve diferencia entre el modelo de datos test y el de produccion.
    Te explico.
    TEST:
    Calendario -n:1- TFacturas -1:n- TLineasFactura -1:n- TProducto

    PRODUCCION
    ​Calendario -1:n- TFacturas -1:n- TLineasFactura -1:n- TProducto

    Como ves cambia la cardinalidad entre Calendario y TFacturas.

    Mi metrica en Test es la siguiente
    CALCULATE (
       MAX ( Calendario[Date] );
       FILTER ( ALL ( Calendario ); Calendario[date] <= MAX ( Calendario[Date] ) );
       FILTER (
          TLineasFactura;
          TLineasFactura[idProducto] = MAX ( TLineasFactura[idProducto] )
       )
    )

    Con la cardinalidad de Test funciona a la perfeccion.
    Sin embargo con la de Produccion no funciona. Solo me devuelve la fecha de los productos que hayan tenido compras en el mes seleccionado.

    No puedo cambiar la cardinalidad de produccion porque ya tengo muchas metricas desarrolladas en base a ello. Además creo que es la correcta (en una fecha puede haber n facturas)
    Alguna solucion?

    Gracias por adelantado.

    ------------------------------
    Santiago Martin
    ------------------------------



  • 4.  RE: DAX Fecha de ultima compra de un producto

    Bronze Contributor
    Posted Mar 05, 2021 02:58 AM
    Es muy dificil sin conocer el modelo, lo que te digo es que un buen modelo es la base de que las cosas funcionen bien. Siento no ser de mucha mas ayuda.

    ------------------------------
    Miguel Egea
    Mentor en SolidQ
    MPV Reconnect
    Administrador de PortalSQL.es
    ------------------------------