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

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

Reply
Syndicate_Admin
Administrator
Administrator

¿Alguna forma de obtener una medida que calcule el promedio de las semanas anteriores a partir de 0 si la semana seleccionada es 0?

Hola a todos

Estoy tratando de crear una forma de comparar los pedidos realizados en una semana seleccionada con el promedio de las 5 semanas anteriores por cliente. Esto funciona exactamente como se espera cuando un cliente ha realizado pedidos en una semana seleccionada, pero si un cliente ha realizado cero pedidos, cualquier medida que intente obtener datos de otra semana o fecha se convierte en cero. La siguiente imagen intenta mostrar el problema en un gráfico.

graph.png

A continuación se muestra la medida que utilizo para obtener la semana anterior que se convierte en cero si la semana seleccionada tiene cero pedidos.

CALCULATE(
    COUNTROWS('orders'),
    FILTER(
        ALL('orders'),
        'orders'[week]=MAX('orders'[week])-1
    ),
    FILTER(
        ALL('orders'),
        'orders'[year]=MAX('orders'[year])
    ),
    FILTER(
        ALL('clients'),
        'clients'[client_lvl0]=MAX('clients'[client_lvl0])
        /* This filter is needed to make Power BI able to separate orders by clients when fetching data from another week. Without the filter each client gets the previous week total.  */
    )
)

Cualquier tipo de ayuda será muy apreciada.

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Gracias @rajendraongole1 y @v-cgao-msft por tratar de ayudarme y guiarme en la dirección de la solución con la que terminé.

Ya tengo una tabla de fechas separada, pero por alguna razón hubo problemas con los números de semana. El problema quizás provenga de que los datos utilizados son importados desde una base de datos MySQL que almacena la hora como el tipo de datos Int en lugar de DateTime.

La solución para mí fue agregar una columna adicional en el comando SELECT para la importación de MySQL que agregó la fecha del último día de una semana. Entonces pude obtener los datos correctos en el gráfico con el siguiente filtro:

FILTER(
  ALL('Orders'),
  'Orders'[lastDayOfAWeek]<MAX('Date'[Date]) &&
  'Orders'[lastDayOfAWeek]>MAX('Date'[Date])-42
)

Si alguien se encuentra en la misma situación, la forma de obtener la fecha del último día de una semana en MySQL es algo así:

STR_TO_DATE(concat(year(from_unixtime(dateAsInt)), weekofyear(from_unixtime(dateAsInt)),' sunday'), '%X%V %W') as lastDayOfAWeek

View solution in original post

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

Gracias @rajendraongole1 y @v-cgao-msft por tratar de ayudarme y guiarme en la dirección de la solución con la que terminé.

Ya tengo una tabla de fechas separada, pero por alguna razón hubo problemas con los números de semana. El problema quizás provenga de que los datos utilizados son importados desde una base de datos MySQL que almacena la hora como el tipo de datos Int en lugar de DateTime.

La solución para mí fue agregar una columna adicional en el comando SELECT para la importación de MySQL que agregó la fecha del último día de una semana. Entonces pude obtener los datos correctos en el gráfico con el siguiente filtro:

FILTER(
  ALL('Orders'),
  'Orders'[lastDayOfAWeek]<MAX('Date'[Date]) &&
  'Orders'[lastDayOfAWeek]>MAX('Date'[Date])-42
)

Si alguien se encuentra en la misma situación, la forma de obtener la fecha del último día de una semana en MySQL es algo así:

STR_TO_DATE(concat(year(from_unixtime(dateAsInt)), weekofyear(from_unixtime(dateAsInt)),' sunday'), '%X%V %W') as lastDayOfAWeek

Syndicate_Admin
Administrator
Administrator

Hola @sosVikar ,

También estoy de acuerdo en que se necesita una tabla de calendario en el modelo para manejar semanas que abarcan años.

vcgaomsft_0-1718001620641.png

De esta manera, puede averiguar el rango de fechas utilizando la fecha máxima de la semana: 41 días, así:

Measure = 
VAR __cur_orders = [Total orders]
VAR __week_end_date = MAX('Date'[WeekEndDate])
VAR __min_date = __week_end_date - 41
VAR __max_date = __week_end_date - 7
VAR __average = AVERAGEX( FILTER( ALL('Date'), 'Date'[Date]>=__min_date && 'Date'[Date]<=__max_date), CALCULATE([Total orders],ALLEXCEPT('Date','Date'[Week])) )
VAR __result = IF( NOT ISBLANK( [Total orders] ), [Total orders], __average)
RETURN
__result

vcgaomsft_1-1718002549271.png


Cálculos relacionados con la semana: patrones DAX

Saludos
Gao

Equipo de apoyo a la comunidad

Si hay alguna publicación que ayude, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
Si no entiendo sus necesidades o aún tiene problemas al respecto, no dude en hacérnoslo saber. ¡Muchas gracias!

Cómo obtener respuestas rápidas a sus preguntas -- Cómo proporcionar datos de ejemplo en el foro de Power BI -- Grupo de usuarios de Power BI de China

Syndicate_Admin
Administrator
Administrator

Hola @sosVikar - Cree una tabla de fechas separada y márquela como tabla de fechas en su modelo.

A continuación, cree para calcular la medida Total de pedidos para la semana seleccionada:

TotalOrdersSelectedWeek =
CALCULAR(
COUNTROWS('órdenes'),
FILTRO(
«órdenes»,
'orders'[semana] = MAX('DateTable'[Semana]) &&
'orders'[año] = MAX('DateTable'[Año])
)
)

Calcule el promedio de pedidos de las 5 semanas anteriores: Estoy usando la tabla de fechas aquí, agregue su tabla de fechas y columnas según su conveniencia

AverageOrdersPrevious5Weeks =
CALCULAR(
PROMEDIOX(
VALUES(DateTable[Week]),
CALCULAR(
COUNTROWS('órdenes'),
FILTRO(
«órdenes»,
'pedidos'[semana] EN
SELECTCOLUMNS(
FILTRO(
ADDCOLUMNS(
VALUES(DateTable[Week]),
"WeekOffset",
RANKX(ALL(DateTable[Week]), DateTable[Week],, ASC, DENSE)
),
[WeekOffset] <= RANKX(ALL(DateTable[Week]), MAX(DateTable[Week]),, ASC, DENSE) - 1 &&
[WeekOffset] > RANKX(ALL(DateTable[Week]), MAX(DateTable[Week]),, ASC, DENSE) - 6
),
"WeekOffset", DateTable[Week]
)
),
FILTRO(
«órdenes»,
'orders'[año] = MAX('DateTable'[Año])
),
FILTRO(
«clientes»,
'clientes'[client_lvl0] = MAX('clientes'[client_lvl0])
)
)
)
)

Use ambas medidas en el objeto visual para comparar los pedidos de la semana seleccionada con el promedio de las 5 semanas anteriores y controlar los casos en los que los clientes tienen cero pedidos en la semana seleccionada

¿He respondido a tu pregunta? ¡Marca mi publicación como una solución! ¡Esto ayudará a otros en el foro!
¡Agradezco sus felicitaciones!

Helpful resources

Announcements
July 2024 Power BI Update

Power BI Monthly Update - July 2024

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

PBI_Carousel_NL_June

Fabric Community Update - June 2024

Get the latest Fabric updates from Build 2024, key Skills Challenge voucher deadlines, top blogs, forum posts, and product ideas.

Top Solution Authors