dateinperiod con dos campos de fecha diferentes (SUMIFS Exclel) no funciona

Un usuario Pregunto ✅

Ruud_K

Hola,

Estoy tratando de convertir una fórmula SUMIFS de Excel que funcione a DAX.

No tengo mucha experiencia en el usuario de DAX.

Lo que estoy tratando de hacer es calcular una suma para un tiempo de rendimiento en segundos para una combinación de filtros en dos campos de fecha diferentes.

En mi tabla de Reservas tengo una ubicación y el valor Servicio de tiempo (minutos) que indica el tiempo necesario para un determinado servicio.

Ahora quiero calcular cuánto trabajo puedo esperar durante los próximos 56 días para una ubicación y un producto, o en general.

Quiero calcular la cantidad de tiempo [Time service] por [Created date] igual o anterior a cualquier fecha elegida y para [Plan delivery date] en los próximos 56 días a partir de la fecha elegida.

Usando finctios DimDate y DATESINPERIOD pero parece que no puede hacer que funcione. A los resultados les faltan fechas que no están en la tabla de Reservas.

CALCULATE(SUM(Reservations[Time service]),DATESINPERIOD(Date[Date],LASTDATE(Reservations[Creatted date]),-1,year),ALL(Date),DATESINPERIOD(Date[Date],LASTDATE(Reservations[Plan delivery date]),56,day))

Aquí una muestra de la tabla de datos [Reservations].

Ejemplo
Localización Producto Fecha de creación Fecha de entrega del plan Servicio de tiempo
a X 1-2-2018 2-2-2018 100
a y 1-2-2018 2-2-2018 50
a z 1-2-2018 16-3-2018 75
a X 1-2-2018 5-4-2018 35
a y 5-2-2018 2-2-2018 100
a z 7-2-2018 2-2-2018 50
a X 7-2-2018 16-3-2018 75
a y 8-2-2018 5-4-2018 35
B z 3-2-2018 2-2-2018 100
B y 3-2-2018 2-2-2018 50
B X 3-2-2018 16-3-2018 75
B z 3-2-2018 5-4-2018 35
B z 7-2-2018 2-2-2018 100
B X 9-2-2018 2-2-2018 50
B y 9-2-2018 16-3-2018 75
B X 10-2-2018 5-4-2018 35

¡¡Espero que alguien pueda ayudarme!!

Stachu

En respuesta a Ruud_K

prueba esto

Measure 3 = 
VAR SelectedDate = SELECTEDVALUE(Date_Dim[Date])
VAR Workload =
    FILTER (
        'Reservations',
        'Reservations'[Plan_Delivery_Date]
            < SelectedDate + 56
            && 'Reservations'[Plan_Delivery_Date] >= SelectedDate
            && 'Reservations'[Created_Date] <= SelectedDate
    )
RETURN
    SUMX ( Workload, [Time_service] )

Funciona si ambas combinaciones de fechas entre Reservas y Dim_Date son inactivo

Hola Ruud_K ,

«

Ahora quiero calcular cuánto trabajo puedo esperar durante los próximos 56 días para una ubicación y un producto, o en general.

Quiero calcular la cantidad de tiempo [Time service] por [Created date] igual o anterior a cualquier fecha elegida y para [Plan delivery date] en los próximos 56 días a partir de la fecha elegida.

«

<--- ¿Qué relación entre la tabla de fechas y la tabla de reservas, podría aclarar más detalles sobre su resultado esperado?

Saludos,

Jimmy Tao

Ruud_K

En respuesta a v-yuta-msft

Hola jimmy

En realidad, es muy simple.

Tengo los dos campos de fecha vinculados a mi tabla de fecha.

El enlace para [Plan delivery date] está activo. El otro inactivo ya que solo puedo elegir una relación activa.

Los resultados esperados y las fórmulas de Excel son los siguientes:

Ejemplo
Reservas de tabla Resultado Esperado
Localización Producto Fecha de creación Fecha de entrega del plan Valor (fecha de creación) Vlaue (plan) Servicio de tiempo Localización Fecha Workload_56 día
a X 1-2-2018 2-2-2018 43132,00 43133,00 100 a 1-2-2018 225
a y 1-2-2018 2-2-2018 43132,00 43133,00 50 a 2-2-2018 225
a z 1-2-2018 16-3-2018 43132,00 43175,00 75 a 3-2-2018 75
a X 1-2-2018 5-4-2018 43132,00 43195,00 35 a 4-2-2018 75
a y 5-2-2018 6-2-2018 43136,00 43137,00 100 a 5-2-2018 175
a z 7-2-2018 9-2-2018 43138,00 43140,00 50 a 6-2-2018 175
a X 7-2-2018 16-3-2018 43138,00 43175,00 75 a 7-2-2018 200
a y 8-2-2018 5-4-2018 43139,00 43195,00 35 a 8-2-2018 200
B z 3-2-2018 2-2-2018 43134,00 43133,00 100 B 1-2-2018 0
B y 3-2-2018 2-2-2018 43134,00 43133,00 50 B 8-2-2018 325
B X 3-2-2018 16-3-2018 43134,00 43175,00 75 B 15-2-2018 470
B z 3-2-2018 5-4-2018 43134,00 43195,00 35 B 22-2-2018 220
B z 7-2-2018 18-2-2018 43138,00 43149,00 250 B 1-3-2018 220
B X 9-2-2018 2-2-2018 43140,00 43133,00 50 B 8-3-2018 220
B y 9-2-2018 16-3-2018 43140,00 43175,00 75 B 15-3-2018 220
B X 10-2-2018 5-4-2018 43141,00 43195,00 35 B 22-3-2018 70
SUMIFS = SOMMEN.ALS ($ K $ 11: $ K $ 26; $ H $ 11: $ H $ 26; «> =» & O11; $ H $ 11: $ H $ 26; «<" & O11 + 56; $ G $ 11: $ G $ 26; "<=" & O11; $ E $ 11: $ E $ 26; N11)
DAX CALCULAR (SUMA (Reservas[Time service]), DATESINPERIOD (Fecha[Date], LASTDATE (Reservas[Creatted date]), – 1, año), ALL (Fecha), DATESINPERIOD (Fecha[Date], LASTDATE (Reservas[Plan delivery date]), 56, día))

Stachu

En respuesta a Ruud_K

Quiero calcular la cantidad de tiempo [Time service] por [Created date] igual o anterior a cualquier fecha elegida y para [Plan delivery date] en los próximos 56 días a partir de la fecha elegida.

esto debería funcionar después de claryfing de dónde viene ‘cualquier fecha elegida’, ahora está codificado a 2018-03-15 en la variable SelectedDate. ¿Se supone que proviene de la fecha de entrega del plan? las fechas en su ejemplo de Excel no coinciden con él

Measure =
VAR SelectedDate =
    DATE ( 2018, 3, 15 )
VAR Workload =
    FILTER (
        'Table',
        'Table'[Plan delivery Date]
            < SelectedDate + 56
            && 'Table'[Plan delivery Date] >= SelectedDate
            && 'Table'[Created date] <= SelectedDate
    )
RETURN
    SUMX ( Workload, [Time service] )

Ruud_K

En respuesta a Stachu

La fecha proviene de una tabla de dimensiones de 2010 a 2099 llamada Fecha en la fecha del nombre del campo (Fecha[Date])

Ruud_K

En respuesta a Ruud_K

Gracias por la entrada.

La fórmula está funcionando pero no da los resultados correctos.

Para aclarar.

Me gustaría hacer un vusual donde pueda mostrar la carga de trabajo planificada conocida durante un período de tiempo de, digamos, 16 meses.

Esto significa la suma de los valores [Time_service] para todos los [Created_Date] igual o mayor que 2016; 2; 16 y todos los [Plan_Delivery_Date] igual o 56 días después de 2016; 2; 16.

He usado la siguiente fórmula:

Measure 3 = VAR SelectedDate =
DATE (2016;2;16)
VAR Workload =
    FILTER (
        'Reservations';
        'Reservations'[Plan_Delivery_Date]
            < SelectedDate + 56
            && 'Reservations'[Plan_Delivery_Date] >= SelectedDate
            && 'Reservations'[Created_Date] <= SelectedDate     )
RETURN
    SUMX ( Workload; [Time_service] )

Mi modelo de datos es el siguiente:

Modelo de datos.JPG

Los resultados de la fórmula no coinciden con los valores esperados.

¿Qué necesito alterar en el Fórmula DAX.

PD. Preferiría una fórmula en la que se usa Dat_Dim en lugar de una fecha fija. Como quiero una visualización en más de 1 fecha

Stachu

En respuesta a Ruud_K

prueba esto

Measure 3 = 
VAR SelectedDate = SELECTEDVALUE(Date_Dim[Date])
VAR Workload =
    FILTER (
        'Reservations',
        'Reservations'[Plan_Delivery_Date]
            < SelectedDate + 56
            && 'Reservations'[Plan_Delivery_Date] >= SelectedDate
            && 'Reservations'[Created_Date] <= SelectedDate
    )
RETURN
    SUMX ( Workload, [Time_service] )

Funciona si ambas combinaciones de fechas entre Reservas y Dim_Date son inactivo

Ruud_K

En respuesta a Stachu

Hola @Stachu

Funciona perfectamente. Gracias por esto.

¿Podría molestar a alguien con una pregunta adicional sobre este problema?

¿Es posible obtener los valores, pero no durante 56 días intermedios, sino durante 40 días laborables?

La tabla de fechas tiene un indicador de día laborable (J / N) llamado [Workday_ind] y un valor de Workdat (1 o 0) denominado [Workday_value]

Stachu

En respuesta a Ruud_K

prueba esto, puedes jugar con > =/> para conseguir exactamente lo que necesitas

Measure 3 = 
VAR SelectedDate = SELECTEDVALUE(Date_Dim[Date])
VAR OnlyWorking = FILTER(ALL(Date_Dim[Date], Date_Dim[Workday_value]), Date_Dim[Workday_value]<>0 && Date_Dim[Date]>SelectedDate)
VAR RollingWD = ADDCOLUMNS(OnlyWorking,"RollingWD",RANKX(OnlyWorking, [Date], ,ASC))
VAR NextDate = CALCULATE(MAX(Date_Dim[Date]),FILTER(RollingWD,[RollingWD]=40))
VAR Workload =
    FILTER (
        'Reservations',
        'Reservations'[Plan_Delivery_Date]
            <= NextDate
            && 'Reservations'[Plan_Delivery_Date] >= SelectedDate
            && 'Reservations'[Created_Date] <= SelectedDate
    )
RETURN
    SUMX ( Workload, [Time_service] )

EDITAR
esto puede funcionar incluso mejor:

Measure 3 = 
VAR SelectedDate = SELECTEDVALUE(Date_Dim[Date])
VAR OnlyWorking = FILTER(ALL(Date_Dim[Date], Date_Dim[Workday_value]), Date_Dim[Workday_value]<>0 && Date_Dim[Date]>SelectedDate)
VAR Top40WD = TOPN(40,OnlyWorking,[Date],ASC)
VAR NextDate = CALCULATE(MAX(Date_Dim[Date]),Top40WD)
VAR Workload =
    FILTER (
        'Reservations',
        'Reservations'[Plan_Delivery_Date]
            < NextDate
            && 'Reservations'[Plan_Delivery_Date] >= SelectedDate
            && 'Reservations'[Created_Date] <= SelectedDate
    )
RETURN
    SUMX ( Workload, [Time_service] )

Deja un comentario

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