Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Calcular el promedio mensual de los valores diarios en una matriz con fechas en el filtro de fila

Tengo las dos tablas a continuación, una sales_table con las ventas diarias y otra check_dates_table que tiene una columna de fecha que es un subconjunto de las fechas que se encuentran en sales_table.

sales_table:

date_sales ventas

03/01/202410
03/02/202420
03/03/202422
03/04/20245
03/05/20247
03/06/202415
03/07/202434
03/08/202456
03/09/20242
03/10/202415
03/11/20245
03/12/20247
03/13/202425
03/14/202432
03/15/202445
03/16/202423
03/17/20242
03/18/20243
03/19/202424
03/20/202415
03/21/20247

check_dates_table:

date_check

03/01/2024
03/05/2024
03/06/2024
03/07/2024
03/11/2024
03/12/2024
03/14/2024

La relación entre ambos es la siguiente:

PowerBeeTree_0-1710941398534.png

Para la salida final, quiero obtener una matriz con las fechas de comprobación en las filas y las ventas, el promedio de las ventas en el check_dates en los valores. Algo así en otras palabras (reproducido en excel):

PowerBeeTree_1-1710943043814.png

He definido una medida en el sales_table que calcula el promedio de ventas:

msr_AVG = AVERAGE(sales_table[sales])

Sin embargo, cuando agrego id a los valores de la matriz, no puedo hacer que ignore el filtro de filas del "date_check".

PowerBeeTree_2-1710944214151.png

Parece que tengo que crear de alguna manera una medida que ignore el filtro de fila, pero todo lo que intenté no funcionó. ¿Alguien puede ayudar, por favor?

10 REPLIES 10
Syndicate_Admin
Administrator
Administrator

Gracias @Greg_Deckler

¿Es posible hacer algo como lo siguiente?

Measure Avg = 
  VAR __Date = MAX( 'check_dates_table'[date_check] )
  VAR __Year = YEAR( __Date )
  VAR __Month = MONTH( __Date )
  VAR __Table = FILTER( ALL( 'sales_table'), sales_table[date_sales] IN check_dates_table[date_check])
  VAR __Result = AVERAGEX( __Table, [sales] )
RETURN
  __Result

El ejemplo proporcionado es solo para fines ilustrativos y es una coincidencia que todas las fechas de verificación ocurran en un solo mes.

@PowerBeeTree Lo más probable es que esa forma no funcione. El motivo es que en el objeto visual de la tabla, tiene las filas por fecha. Por lo tanto, en tu check_dates_table IN [date_check] la única fecha allí va a ser la fecha de esa fila que no es lo que quieres. Es por eso que no puedes hacerlo de esa manera.

Gracias @Greg_Deckler

Sí, he pensado que mantenerlos allí está causando el problema, sin embargo, necesito ver la fecha "activa".

¿Alguna solución? Parece que mi problema es similar al cálculo de MTD, sin embargo, cuando agrego la medida TOTALMTD (medida visual), obtengo el promedio móvil en lugar del promedio general.

@PowerBeeTree Bien, hice una maqueta de esto y ahora entiendo mejor el problema. Aquí hay una medida revisada y se adjunta PBIX debajo de la firma:

Measure Avg = 
  VAR __Date = MAX( 'check_dates_table'[date_check] )
  VAR __CheckDates = DISTINCT(check_dates_table[date_check])
  VAR __Year = YEAR( __Date )
  VAR __Month = MONTH( __Date )
  VAR __Table = FILTER( ALL( 'sales_table'), YEAR( [date_sales] ) = __Year && MONTH( [date_sales] ) = __Month && [date_sales] IN __CheckDates)
  VAR __Result = AVERAGEX( __Table, [sales] )
RETURN
  __Result

@Greg_Deckler tal vez comuniqué mal mi desafío.

Abrí el archivo PBI (¡gracias por ello!)

en lugar de la matriz que se presenta en él, quiero tener lo siguiente en la columna "measure Avg":

PowerBeeTree_0-1710959503664.png

@PowerBeeTree Lo malo es que es un cambio muy pequeño:

Measure Avg = 
  VAR __Date = MAX( 'check_dates_table'[date_check] )
  VAR __CheckDates = ALL(check_dates_table[date_check])
  VAR __Year = YEAR( __Date )
  VAR __Month = MONTH( __Date )
  VAR __Table = FILTER( ALL( 'sales_table'), YEAR( [date_sales] ) = __Year && MONTH( [date_sales] ) = __Month && [date_sales] IN __CheckDates)
  VAR __Result = AVERAGEX( __Table, [sales] )
RETURN
  __Result

¡Esto es genial @Greg_Deckler !

Por favor, corríjame si me equivoco, pero parece que necesito salir del contexto de filtro aplicado por " check_dates_table[date_check] ".

El uso de DISTINCT mantiene el contexto del fitler en su lugar, por lo que tengo que usar ALL para escapar de él. ¿Derecha?

¿Existe por casualidad una lista/hoja de trucos de las funciones que se mantienen en su lugar/escapan del contexto del filtro?

@PowerBeeTree Correcto, ALL escapa del contexto del filtro. ALL es la función principal para hacer esto. También está ALLSELECTED, que se supone que solo escapa de los filtros internos pero no de los filtros externos (como las rebanadoras, por ejemplo). También existe ALLEXCEPT que elimina todos los filtros excepto los especificados.

También hay funciones especiales que solo funcionan realmente con CALCULATE y CALCULATETABLE, como REMOVEFILTERS. Por lo general, no uso CALCULAR, por lo que generalmente no me importan.

Este es el vínculo a la referencia de la función DAX: Referencia de la función DAX - DAX | Microsoft Learn

Expanda la sección Filtros y encontrará todas las diferentes funciones que pueden afectar el contexto del filtro, etc.

Además, tenga en cuenta que me baso en una peculiaridad extraña de la función ALL en la que si usa la forma de columna, devuelve valores distintos.

@PowerBeeTree La primera variable toma la fecha activa. ¿Cuál es el problema con la medida? Si necesita conservar filtros externos (externos a la visualización), puede usar ALLSELECTED frente a ALL.

Syndicate_Admin
Administrator
Administrator

@PowerBeeTree Quizás:

Measure Avg = 
  VAR __Date = MAX( 'check_dates_table'[date_check] )
  VAR __Year = YEAR( __Date )
  VAR __Month = MONTH( __Date )
  VAR __Table = FILTER( ALL( 'sales_table'), YEAR( [date_sales] ) = __Year && MONTH( [date_sales] ) = __Month )
  VAR __Result = AVERAGEX( __Table, [sales] )
RETURN
  __Result

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.