Mida DAX para buscar el valor por fecha más cercana en el pasado y categorías

Un usuario Pregunto ✅

pabloj1

Ayuda…. puede hacer una búsqueda multifacética, y no puede encontrar un artículo que me dé la respuesta….

Por lo tanto, tengo compras de productos, por fecha y por una región de origen, y el precio pagado, lo suficientemente simple.

pabloj1_0-1594821472058.png

Lo que tengo entonces es una tabla de referencia con un precio de mercado para cada producto y región de origen en una fecha.

pabloj1_1-1594821559520.png

Lo que quiero hacer es devolver el precio de mercado para cada compra, así que mirando a la primera compra; Producto A del Reino Unido el 10 de junio; esto necesita devolver el precio de mercado del 31 de mayo para el producto A del Reino Unido… No puedo conseguir mi DAX derecho a devolverlo… A partir de esto para cada compra puedo calcular la diferencia para saber si la compra fue por debajo o por encima, o en valor de mercado.

Me gustaría evitar la columna calculada si puede, y hacerlo en una instrucción DAX….

Tenga en cuenta siempre devolver el precio de mercado para la fecha más cercana en el pasado, la fecha del precio de mercado no siempre es al final del mes, ya que puede tener precios a la mitad de mes en algunos meses.

jdbuchanan71

@pabloj1

Hemos detectado un problema desconocido.

Medida para sumar el precio de compra.

Related Market Price Sum = SUMX ( Purchases, [Related Market Price] )

Ahora la recuperacion del precio de mercado relacionado.

Related Market Price = 
VAR _PurchaseDate = SELECTEDVALUE ( Purchases[Purchase Date] )
VAR _PriceDate = 
    CALCULATE(
        MAX(Reference[Date]),
        TREATAS(
            SELECTCOLUMNS(
                Purchases,
                "Product",Purchases[Product],
                "Source",Purchases[Source]),
                Reference[Product],
                Reference[Region]
        ),
        Reference[Date] < _PurchaseDate    
    )

RETURN
    CALCULATE(
        SUM ( Reference[Market Price] ),
        TREATAS(
            SELECTCOLUMNS(
                Purchases,
                "Product",Purchases[Product],
                "Source",Purchases[Source]),
                Reference[Product],
                Reference[Region]
        ),
        Reference[Date] = _PriceDate
    )

Entonces, con el fin de conseguir totales de trabajo utilizo lo anterior en un SUMX sobre la tabla de compras.

Related Market Price Sum = SUMX ( Purchases, [Related Market Price] )

Y finalmente el delta calc

Delta = [Purchase Price] - [Related Market Price Sum]

jdbuchanan71_0-1594826303260.png

He adjuntado mi archivo de muestra para que lo mires.

pabloj1

En respuesta a jdbuchanan71

Sí, la solución ofrece… Sin embargo.. cuando fui a usar con ira, mi modelo es más complicado que inicialmente mostré… no puedo hacer que ahora funcione… ¡Ayuda!…

precio de mercado

pabloj1_0-1595414958932.png

Fecha de compra

pabloj1_1-1595414981561.png

Cantidad y precio de compra

pabloj1_2-1595415026016.png

tablas de proveedores

pabloj1_3-1595415053693.png

modelos

pabloj1_4-1595415077652.png

La salida que necesito sigue siendo la misma.. por cada precio de entrega (packno) pagado frente al precio de mercado (fecha más reciente en el pasado para ese producto de esa región)

Gracias de antemano…

jdbuchanan71

En respuesta a pabloj1

@pabloj1
Por favor, comparta una copia de su archivo .pbix. Puedes cargarlo en OneDrive o DropBox y publicar el enlace aquí.

pabloj1

En respuesta a jdbuchanan71

https://1drv.ms/u/s!ApcyZzyFx2-9hZBD2RmW3TFZbpBBFQ?e=GgR9D5

Gracias… me las arregló para responder a mi pregunta ref más tablas mediante la adición de dos variables más en el DAX a lookupvalue en el código original, así que gracias, que funciona, tal vez un DAX más eficiente que LOOKUPVALUE aunque.

VAR _SupplierRegion ?
CALCULAR(
LOOKUPVALUE( ‘mercados electrónicos'[Region] , ‘mercados electrónicos'[Proveedor] , _Proveedor )
)

VAR _Producto ?
CALCULAR(
LOOKUPVALUE( ‘vEntregas – Anular pivote'[Prodcat] , ‘vEntregas – Desenmarañar'[packno] , _Paquete No )
)


Ahora tengo un problema de inteligencia de tiempo, ¿cómo insertar un RELACIÓN DE USUARIO (‘Calendario'[Date] , vEntregas[orderdate] ) en el DAX, porque necesito usar la tabla Calendar para filtrar, pero el envío de relación de fecha principal no es Orderdate.

Mira a continuación estoy filtro en febrero, pero tienen una entrega de enero se muestra, solo quieren mostrar las entregas de febrero…

pabloj1_1-1595595251178.png

Este es el modelo de datos

pabloj1_0-1595595034211.png

Archivo de ejemplo aquí..

https://1drv.ms/u/s!ApcyZzyFx2-9hZBD2RmW3TFZbpBBFQ?e=GgR9D5

Gracias por cualquier ayuda… Apreciado…

jdbuchanan71

En respuesta a pabloj1

@pabloj1

Empezaría con algo de limpieza en el modelo. Parece que puede tener una sola tabla de entrega que tenga todos los campos.

jdbuchanan71_0-1595605700639.png

En este momento, la tabla «vDeliveries – Unpivot» tiene 19.320 filas en blanco.

Su vDelivers to vIntoWork es un 1:1, lo que significa que el [Date Into Work] solo se puede mover a la tabla Deliveries. Esto le permitirá tener un modelo más directo con el que trabajar.

jdbuchanan71_1-1595605857958.png

Lo que simplifica la escritura de las medidas.

pabloj1

En respuesta a jdbuchanan71

Ah… no tan simple. Inventé un archivo de ejemplo para anular los datos e hice la tabla intoWork demasiado simple.

En realidad, todas las entregas no se utilizan totalmente, por ejemplo, una entrega de 100, sólo 80 podrían ponerse en marcha, 20 permanecerán en stock; también usando tal vez divididos en un número de días, por ejemplo, una entrega de 100, 50 podría ser utilizado 1 día, 20 el siguiente, 30 tres días después de que…

He hecho el modelo más representativo… Apols….

https://1drv.ms/u/s!ApcyZzyFx2-9hZBEmQ1DKwRf-eseeA?e=b2tfrD

jdbuchanan71

En respuesta a pabloj1

Puede invocar esa relación contra su medida como usted dijo.

Delta Order Date = CALCULATE([Delta],USERELATIONSHIP('Calendar'[Date],vDeliveries[orderdate]))

jdbuchanan71_0-1595613857266.png

pabloj1

En respuesta a jdbuchanan71

Muchas gracias… Voy a ir a echar un vistazo….

Deja un comentario

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