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
v-yuta-msft
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:
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] )