filtrar el conjunto de datos solo durante los últimos 20 días hábiles en DAX

Un usuario Pregunto ✅

chefe

Hola,

Estoy tratando de escribir una medida que devuelva un recuento simple. El único inconveniente es que debe filtrar el conjunto de datos subyacente solo a los últimos 20 días hábiles. Para esto, tengo una tabla de fechas adecuada («Fechas») que reconoce los días hábiles con el campo [IS_WORKING_DAY].

Probé con éxito la fórmula mediante la creación de una tabla personalizada con ella, consulte la siguiente captura de pantalla.

T = 
VAR tbl_filtered_is_working_day = FILTER(Dates;Dates[IS_WORKING_DAY]=1)
VAR tbl_filtered_ranked = ADDCOLUMNS(SUMMARIZE(tbl_filtered_is_working_day;Dates[DATE_KEY]);"Rank";RANKX(tbl_filtered_is_working_day;Dates[DATE_KEY])) 
VAR tbl_filtered_top20 = FILTER(tbl_filtered_ranked;[Rank]<=20)
VAR tbl_last_20days = SUMMARIZE(tbl_filtered_top20;Dates[DATE_KEY])

RETURN tbl_last_20days

Solo se devuelven los últimos 20 días hábiles:

2_tabla_personalizada.png

Éxito hasta ahora. Sin embargo, cuando trato de incorporar esto a mi medida, no aplico el filtro correctamente. La fórmula de medida es la siguiente, también consulte la siguiente captura de pantalla que muestra el resultado visualmente.

Count of last 20 days' CDS spreads TEST = 

VAR tbl_filtered_is_working_day = FILTER(Dates;Dates[IS_WORKING_DAY]=1)
VAR tbl_filtered_ranked = ADDCOLUMNS(SUMMARIZE(tbl_filtered_is_working_day;Dates[DATE_KEY]);"Rank";RANKX(tbl_filtered_is_working_day;Dates[DATE_KEY])) 
VAR tbl_filtered_top20 = FILTER(tbl_filtered_ranked;[Rank]<=20)
VAR tbl_last_20days = SUMMARIZE(tbl_filtered_top20;Dates[DATE_KEY])

RETURN IF(HASONEVALUE(Dates[DATE_KEY])
	;CALCULATE([Count of CDS spreads]
		;FILTER(Dates;Dates[DATE_KEY]>=FIRSTDATE(tbl_last_20days))
	)
	;1 //for row total, dummy = 1 for now
)

Se devuelven más resultados de los esperados. ¿Alguien sabe por qué? La fórmula inicial es idéntica.

1_diferentes cuentas.png

¡Cualquier ayuda es muy apreciada!

Salud

jahida

Supongo que es porque el primer FILTRO solo funciona en las Fechas en el contexto actual, lo que significa que retrocederá 20 días desde cualquier fecha de inicio. Intenta cambiar la primera línea a:

FILTRO(TODO(Fechas); Fechas[IS_WORKING_DAY]=1)

Puede que no funcione, pero vale la pena intentarlo.

@chefe

Según tengo entendido, solo desea mostrar los últimos 20 días en el gráfico de tabla. Parece que seleccionaste fechas[DATE_KEY] para el gráfico de valores de la tabla. Si es así, todas las fechas se mostrarán en el gráfico de tabla. Puedes intentar seleccionar T[DATE_Key] para el gráfico de valores de la tabla.

Si aún no puede resolver su problema, ¿podría proporcionar también la fórmula de medida de [Count of CDS spreads]?

Atentamente,

Herbert

jahida

Supongo que es porque el primer FILTRO solo funciona en las Fechas en el contexto actual, lo que significa que retrocederá 20 días desde cualquier fecha de inicio. Intenta cambiar la primera línea a:

FILTRO(TODO(Fechas); Fechas[IS_WORKING_DAY]=1)

Puede que no funcione, pero vale la pena intentarlo.

chefe

En respuesta a jahida

@jahida Gracias eso funcionó. Bonito.

Aunque todavía necesito entender esto (aunque ya diste una explicación) 😕

Todavía soy nuevo @ «pensando en DAX»

Deja un comentario

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