cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Syndicate_Admin
Administrator
Administrator

Contar filas cuando la fecha está entre fechas en una tabla relacionada

Esencialmente estoy tratando de calcular el número de filas en una tabla que tienen una fecha en el mes anterior. Cada fila de mi tabla de búsqueda de fechas tiene una columna para las fechas de inicio y finalización de ese mes.

Pensaría que podría hacer:

CALCULATE(
COUNTROWS(FactTable),
FILTER(FactTable,
FactTable[Date] >= RELATED(DateTable[StartOfLastMonth]) &&
FactTable[Date] <=RELATED(DateTable[EndOfLastMonth))

Pero veo que no puedo usar RELATED de esta manera. Sin embargo, especificar una fecha literal para comparar en lugar de un valor de columna tampoco funciona, ya sea en una columna de medida o de agregación calculada en una tercera tabla relacionada.

¿En qué me estoy equivocando pensando en esto?

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Hola @skelecopter

¿Estoy asumiendo que"fecha en el mes anterior" significa a partir de hoy? Si es así, pruebe esto

CALCULATE(
	COUNTROWS(FactTable),
	FILTER(
		DateTable,
		DateTable[Date] > EOMONTH(TODAY(),-2) + 1 &&
		DateTable[Date] <= EOMONTH(TODAY(), -1)
	)
)

¡Espero que esto ayude!

View solution in original post

8 REPLIES 8
Syndicate_Admin
Administrator
Administrator

Hola @skelecopter. DAX actúa un poco raro cuando se trata de fechas. Con la muestra que proporcionaste

CALCULATE(
	COUNTROWS(FactTable),
	FILTER(
		FactTable,
		FactTable[Date] = 01/19/2022
	)
)

Podría estar haciendo un par de cosas... Primero, las fechas son realmente solo el recuento de números enteros desde una fecha determinada (creo que el 1 de enero de 1900, pero no positivo). Entonces, al pasar el 19/01/2022 en él, podría estar pasando 1 dividido por 19 dividido para 2022. Lo que sería un decimal realmente pequeño, que se interpretaría como unos segundos después de la medianoche del 1 de enero de 1900.

Además, existe el problema de si es formato MM / DD / AAAA o formato DD / MM / AAAA. Es obvio que el 19/01/2022 es el 19 de enero de 2022 porque solo hay 12 meses. Pero, ¿y si la fecha fuera el 1/7/2022? ¿Es el 7 de enero de 2022 o el 1 de julio de 2022?

Lo que haría si quisiera filtrar por una fecha específica es esto

CALCULATE(
	COUNTROWS(FactTable),
	FILTER(
		FactTable,
		FactTable[Date] = DATE(2022, 1, 19)
	)
)

Lo siento, no había tenido la oportunidad de responder antes. He estado locamente ocupado desde el momento en que llegué al trabajo esta mañana.

Espero que esta explicación divagante ayude un poco ...

Syndicate_Admin
Administrator
Administrator

¡Muchas gracias! Su primera solución funcionó exactamente como se esperaba. Pasaré algún tiempo tratando de entender por qué. 🙂

@skelecopter de nada... Me alegro de poder ayudar. (y traté de responder a su pregunta anterior en la parte inferior del hilo)

¡Muchas gracias de nuevo! DATE es lo que buscaba y estaba haciendo una mala suposición de que funcionaría así siempre y cuando los campos de fecha estuvieran escritos correctamente.

Me di cuenta de que había pedido algo incorrecto en mi expresión de ejemplo (la suma del mes pasado y este mes), ¡pero DATESINBETWEEN es lo que realmente necesitaba!

Syndicate_Admin
Administrator
Administrator

Hola @skelecopter

¿Estoy asumiendo que"fecha en el mes anterior" significa a partir de hoy? Si es así, pruebe esto

CALCULATE(
	COUNTROWS(FactTable),
	FILTER(
		DateTable,
		DateTable[Date] > EOMONTH(TODAY(),-2) + 1 &&
		DateTable[Date] <= EOMONTH(TODAY(), -1)
	)
)

¡Espero que esto ayude!

¡Lo intentaré! ¿Podría darme una pista de por qué usar un literal de fecha no funciona allí? Me di cuenta de que SÍ funcionaba si le daba a FILTER una cadena de una columna / tabla diferente para buscar en su lugar.

Hola @skelecopter. Eso es difícil de responder sin tener acceso al modelo de datos. Recuerdo que iba a PS mi respuesta con "probablemente hay formas más elegantes de hacer esto, dependiendo de lo que realmente estés tratando de hacer" 😉

En realidad, hay varias formas en que esto podría hacerse, dependiendo de lo que realmente esté tratando de llegar y cómo lo vaya a usar en un informe. Te ofrecí lo que probablemente sea lo más simple. La solución original y la siguiente literalmente mirando "último mes" definido (mientras escribo esto el 19 de enero de 2022) es diciembre de 2021. Un equivalente a lo que ofrecí es este

CALCULATE(
	COUNTROWS(FactTable),
	DATESBETWEEN(
		DateTable[Date],
		EOMONTH(TODAY(),-2) + 1,
		EOMONTH(TODAY(), -1
	)
)

Algo similar podría hacerse con cualquiera de estos

CALCULATE(
	COUNTROWS(FactTable),
	DATESINPERIOD(
		DateTable[Date],
		EOMONTH(TODAY(),-2) + 1,
		1,
		MONTH
	)
)

CALCULATE(
	COUNTROWS(FactTable),
	PREVIOUSMONTH(DateTable[Date]
)

Una posible interpretación de su pregunta es "en el mes previo a la fecha en la tabla de hechos". Eso se vuelve un poco más complejo.

Entonces, la pregunta es ¿qué es lo que realmente estás tratando de hacer (en un lenguaje sencillo y sencillo) para que podamos resolver esto? 🙂

Sí, nada lujoso, y mi modelo de datos es solo la tabla de hechos (ventas) y tres tablas de búsqueda (vendedores y ubicaciones, más la fecha posible). He comprobado y comprobado tres veces que todos están conectados correctamente con los tipos de datos correctos.

Mi pregunta, mirando sus soluciones, es más sobre cómo funciona la función FILTER entonces.

Mencioné que ni siquiera podía pasar un literal de fecha en mi ejemplo para decir "devuelva los registros donde la fecha = 19/01/2022". ¿Qué haría en ese escenario? Lo siguiente no funcionó, a pesar de que existen entradas para esa fecha (y tampoco funcionó cuando lo intenté sin usar FILTER y simplemente pasando la expresión de filtro dentro de CALCULATE):

CALCULATE(
	COUNTROWS(FactTable),
	FILTER(
		FactTable,
		FactTable[Date] = 01/19/2022
	)
)

Sin embargo, lo siguiente SÍ funciona:

CALCULATE(
	COUNTROWS(FactTable),
	FILTER(
		FactTable,
		FactTable[SalesPerson] = "John Smith"
	)
)

¿Y qué pasa si SÍ necesito hacer referencia a una columna extranjera allí? He practicado el uso de RELATED con funciones de agregación/iteración; ¿no funciona fuera de ellos?

Helpful resources

Announcements
Microsoft Build 768x460.png

Microsoft Build is May 24-26. Have you registered yet?

Come together to explore latest innovations in code and application development—and gain insights from experts from around the world.

charticulator_carousel_with_text (1).png

Charticulator Design Challenge

Put your data visualization and design skills to the test! This exciting challenge is happening now through May 31st!

May UG Leader Call Carousel 768x460.png

What difference can a User Group make for you?

At the monthly call, connect with other leaders and find out how community makes your experience even better.

Power BI Release May 2022 768x460.png

Check it out!

Click here to read more about the May 2022 updates!

Top Kudoed Authors