Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
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?
Solved! Go to Solution.
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!
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 ...
¡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!
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?
User | Count |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |