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

Ignora toda la semana si hay vacaciones en esa semana

Hola a todos

Tengo una mesa serarate con vacaciones y otra mesa donde tengo algunos volúmenes. Tengo una medida donde calculo el volumen total de las últimas 5 semanas, pero quiero ignorar toda la semana si hay vacaciones.

Ejemplo de la semana 2020-51 tiene dos días festivos 25/12/2020 y 26/12/2020. Estoy calculando las últimas 5 semanas de la semana 53/1 entonces mi cálculo haciendo una suma de la semana 52/51/50/49/48 , pero quiero esto: suma de la semana 52/50/49/48/47

esta es mi medida:

X semanas suma total ?
CALCULATE(
SUM('X por semana'[X Portador])+SUM('X por semana'[X Retail]),
DATESINPERIOD('Date'[Date],MAX('Date'[Date])-7,-35,DAY)
)

BYENER_0-1612959336198.png

Muchas gracias.

1 ACCEPTED SOLUTION

No hay @BYENER

Creo que su 1/53 contiene 3 días 2021/01/01-2021/01/03, deberían hacerlo en la misma semana que 2020/12/28-2020/12/31. Así que divido 2021/01/01-2021/01/03 en el 2020-53.

actualizar:

NewYear = IF('Date'[Year]=2020,2020,IF('Date'[Year]=2021&&'Date'[Accumulate_Week_Num]=53,2020,2021))
New_WeekNum = 
IF('Date'[NewYear] = 2021,'Date'[Accumulate_Week_Num]-53,'Date'[Accumulate_Week_Num])
Year_WeekNum = 'Date'[NewYear]&"-"&FORMAT('Date'[New_WeekNum],"00")

Cree una tabla de segmentación de datos:

Slicer = VALUES('Date'[Year_WeekNum])

Medida del filtro:

Measure = 
VAR _Select = SELECTEDVALUE(Slicer[Year_WeekNum])
VAR _Accumulate = CALCULATE(MAX('Date'[Accumulate_Week_Num]),FILTER(ALL('Date'),'Date'[Year_WeekNum]=_Select))
VAR _Last5weeks = _Accumulate-5
VAR _holidayweek = CALCULATETABLE(VALUES('Date'[Accumulate_Week_Num]),FILTER(ALL('Date'),'Date'[Accumulate_Week_Num]<_Accumulate&&'Date'[Accumulate_Week_Num]>=_Last5weeks),FILTER(ALL(Holiday),Holiday[bank holiday]<>BLANK()))
VAR _Countholidayweek = COUNTAX(_holidayweek,[Accumulate_Week_Num])
VAR _NewLast5weeks = _Last5weeks-_Countholidayweek
Return
IF(MAX('Date'[Accumulate_Week_Num])>=_NewLast5weeks&&MAX('Date'[Accumulate_Week_Num])<_Accumulate&&NOT(MAX('Date'[Accumulate_Week_Num]) IN _holidayweek),1,0)

Cree un objeto visual de matriz como el suyo y agregue mi medida a Filtro. Estapóralo para mostrar elementos cuando valor =1.

Creo que su 2021-01 debería comenzar en 2021/01/04.

Cuando seleccione 2021-01, se mostrará las últimas tres semanas sin vacaciones,2020-47 a 2020-51.

2020-52 tiene chirstmas y 2020-53(2020/12/28-2021/01/03) tiene nuevo año.

1.png

Puede descargar el archivo pbix desde este enlace: Test2

Saludos

Rico Zhou

Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

15 REPLIES 15
Syndicate_Admin
Administrator
Administrator

No hay @BYENER

¿Podría decirme si su problema ha sido resuelto? Si es así, por favor acéptelo como la solución. Más gente se beneficiará de ello. O aún estás confundido al respecto, por favor dame más detalles sobre tu problema.

Saludos

Rico Zhou

No @RicoZhou,

¡Muchas gracias! Voy a probar la solución hoy y aceptaré como solución si está funcionando.

Syndicate_Admin
Administrator
Administrator

No @BYENER

Parece que hay algo mal en tu semana.

Creo que el semana num de 2020/12/28 debería ser 53 en lugar de 52.

Parece que quieres dejar que el weeknum de 2021/01/04 sea 1, así que todos los weeknums -1.

Construyo una nueva tabla de fechas.

WeekNum = WEEKNUM(Holiday[Date],2)
Year = YEAR(Holiday[Date])
Accumulate_Week_Num = 
IF (
    RANKX ( Holiday, Holiday[YEAR],, ASC, DENSE ) <> 1,
    SUMX (
        SUMMARIZE (
            FILTER ( Holiday, Holiday[YEAR] < EARLIER ( Holiday[YEAR] ) ),
            Holiday[Year],
            "Maxweeknum-1",
                MAXX (
                    FILTER ( Holiday, Holiday[YEAR] = EARLIER ( Holiday[YEAR] )),
                    Holiday[WeekNum]
                ) - 1
        ),
        [Maxweeknum-1]
    ) + Holiday[WeekNum],
    WEEKNUM ( Holiday[Date], 1 )
)
New_WeekNum = 
IF(Holiday[Year] = 2021,Holiday[Accumulate_Week_Num]-53,Holiday[Accumulate_Week_Num])
Year_WeekNum = Holiday[Year]&"-"&Holiday[New_WeekNum]

1.png

A continuación, cree una nueva tabla de la semana Year para la segmentación de datos.

Table = VALUES(Holiday[Year_WeekNum])

Mi muestra:

2.png

Construir una medida:

Measure = 
VAR _Select = SELECTEDVALUE('Table'[Year_WeekNum])
VAR _Accumulate = CALCULATE(MAX(Holiday[Accumulate_Week_Num]),FILTER(ALL(Holiday),Holiday[Year_WeekNum]=_Select))
VAR _Last5weeks = _Accumulate-5
VAR _holidayweek = CALCULATETABLE(VALUES(Holiday[Accumulate_Week_Num]),FILTER(ALL(Holiday),Holiday[Accumulate_Week_Num]<_Accumulate&&Holiday[Accumulate_Week_Num]>=_Last5weeks&&Holiday[Holiday]<>BLANK()))
VAR _Countholidayweek = COUNTAX(_holidayweek,[Accumulate_Week_Num])
VAR _NewLast5weeks = _Last5weeks-_Countholidayweek
Return
CALCULATE(SUM('X per week'[X Carrier])+SUM('X per week'[X Retail]]]),FILTER(ALL(Holiday),Holiday[Accumulate_Week_Num]<_Accumulate&&Holiday[Accumulate_Week_Num]>=_NewLast5weeks&&NOT(Holiday[Accumulate_Week_Num] in _holidayweek)))

El resultado es el siguiente.

3.png

Al seleccionar 2021-1, obtendrá la suma de 53,51,50,49,48.

Saludos

Rico Zhou

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

No @RicoZhou

Creé la nueva columna Accumulate_Week_Num, pero no funciona. Tengo números extraños, ¿qué me equivoqué?

BYENER_0-1613640597208.png

Está contando también en el nuevo año

No @BYENER

La captura de pantalla es borrosa. ¿Podría compartir una muestra conmigo por su Onedrive para la Empresa?

Y muéstrame una nueva captura de pantalla del resultado que deseas.

Esto me hará más fácil entender tu problema.

Saludos

Rico Zhou

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

@RicoZhou ,

Consulte Test pbix para la prueba pbix.
Tengo dos tablas una los volúmenes por día y una tabla con los volúmenes de la semana. Calculo primero la suma de las últimas 5 semanas y otra medida la suma de las últimas 5 semanas por día de la semana. Divido estas medidas para obtener un porcentaje (% minorista [medida]).

Quiero añadir una criterea en la medida [suma las últimas 5 semanas] y [Carrier Last 5 weeks DaySUm]. Estas medidas deben omitirse todas las semanas cuando hay un día festivo en el cálculo.

Espero que mi explicación sea un poco comprensible.

Atentamente

B. Yener

No hay @BYENER

Creo que su 1/53 contiene 3 días 2021/01/01-2021/01/03, deberían hacerlo en la misma semana que 2020/12/28-2020/12/31. Así que divido 2021/01/01-2021/01/03 en el 2020-53.

actualizar:

NewYear = IF('Date'[Year]=2020,2020,IF('Date'[Year]=2021&&'Date'[Accumulate_Week_Num]=53,2020,2021))
New_WeekNum = 
IF('Date'[NewYear] = 2021,'Date'[Accumulate_Week_Num]-53,'Date'[Accumulate_Week_Num])
Year_WeekNum = 'Date'[NewYear]&"-"&FORMAT('Date'[New_WeekNum],"00")

Cree una tabla de segmentación de datos:

Slicer = VALUES('Date'[Year_WeekNum])

Medida del filtro:

Measure = 
VAR _Select = SELECTEDVALUE(Slicer[Year_WeekNum])
VAR _Accumulate = CALCULATE(MAX('Date'[Accumulate_Week_Num]),FILTER(ALL('Date'),'Date'[Year_WeekNum]=_Select))
VAR _Last5weeks = _Accumulate-5
VAR _holidayweek = CALCULATETABLE(VALUES('Date'[Accumulate_Week_Num]),FILTER(ALL('Date'),'Date'[Accumulate_Week_Num]<_Accumulate&&'Date'[Accumulate_Week_Num]>=_Last5weeks),FILTER(ALL(Holiday),Holiday[bank holiday]<>BLANK()))
VAR _Countholidayweek = COUNTAX(_holidayweek,[Accumulate_Week_Num])
VAR _NewLast5weeks = _Last5weeks-_Countholidayweek
Return
IF(MAX('Date'[Accumulate_Week_Num])>=_NewLast5weeks&&MAX('Date'[Accumulate_Week_Num])<_Accumulate&&NOT(MAX('Date'[Accumulate_Week_Num]) IN _holidayweek),1,0)

Cree un objeto visual de matriz como el suyo y agregue mi medida a Filtro. Estapóralo para mostrar elementos cuando valor =1.

Creo que su 2021-01 debería comenzar en 2021/01/04.

Cuando seleccione 2021-01, se mostrará las últimas tres semanas sin vacaciones,2020-47 a 2020-51.

2020-52 tiene chirstmas y 2020-53(2020/12/28-2021/01/03) tiene nuevo año.

1.png

Puede descargar el archivo pbix desde este enlace: Test2

Saludos

Rico Zhou

Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

@RicoZhou gracias por su buena ayuda. El cálculo de la semana está funcionando, gracias por eso. Está usando una segmentación de datos en su solución, pero no quiero usar eso. Siempre quiero mostrar toda la mesa con todas las semanas.

Syndicate_Admin
Administrator
Administrator

@BYENER . La solución parcial es crear un calendario como este y usar

Viajar a través de los días laborables - ¿Qué es el siguiente/anterior día de trabajo
https://community.powerbi.com/t5/Community-Blog/Travelling-Across-Workdays-Decoding-Date-and-Calenda...

Ejemplo

Este día: CALCULATE(sum('order'[Qty]), FILTER(ALL('Date'),'Date'[Work Date cont Rank]-max('Date'[Work Date cont Rank])))
El último día de trabajo: CALCULATE(sum('order'[Qty]), FILTER(ALL('Date'),'Date'[Work Date cont Rank]-max('Date'[Work Date cont Rank])-1))

Last 7 día de trabajo ? CALCULATE(sum('order'[Qty]), FILTER(ALL('Date'),'Date'[Work Date cont Rank]>'max('Date'[Work Date cont Rank])-7 && & 'Date'[Work Date cont Rank]<-max('Date'[Work Date cont Rank])))

No @amitchandak ,

Gracias por su respuesta. Esto está trabajando para las vacaciones, pero quiero ignorar toda la semana si hay al menos unas vacaciones en esa semana.

¿Cómo es posible?

Gracias

@BYENER

Tal vez usted puede crear una columna calculada con el contador con 0 o 1 y si existen vacaciones entonces la columna calculada debe tener 1. Después de eso, puede realizar el cálculo en las filas que tienen la marca 0.

@SpiroswayGR esto está funcionando bien, pero tengo que añadir un criterio adicional en mi fórmula. Tengo la siguiente fórmula:

CALCULATE(SUM('X'[X Carrier])+SUM('X'[X Retail]),
DATESINPERIOD('Fecha'[Fecha],MAX('Fecha'[Fecha])-7,-35,DÍA),'Calendario de vacaciones'[Bandera]=0)

Por ejemplo, en la semana 52 (Navidad) y 53 (Año Nuevo) hubo 2 semanas con vacaciones. Cuando utilizo este cálculo que calculo para la semana 1 la suma de la semana 51,50 y 49. Pero hay que sumar 51.550,49,48 y 47. Siempre quiero calcular 5 semanas y si hay una semana de vacaciones allí de lo que debería omitir eso.

Si la semana contiene un día festivo de lo que debería añadir +7 en el estándar -35 (5 semanas) en la fórmula.

BYENER_0-1613639731621.png

@BYENER , Es necesario tener una marca que rellene el mismo valor en la semana

una nueva columna como if(Sumx(filter(Date, [Weekyear] á earlier([Weekyear])),[Work Day]) >0,1,0)

entonces el rango de la semana en la misma línea que sugerí en el blog. No incluya la semana con la bandera 1

Además, consulte

Power BI — Semana a semana y WTD
https://medium.com/@amitchandak.1978/power-bi-wtd-questions-time-intelligence-4-5-98c30fab69d3
https://community.powerbi.com/t5/Community-Blog/Week-Is-Not-So-Weak-WTD-Last-WTD-and-This-Week-vs-La...
https://www.youtube.com/watch?v=pnAesWxYgJ8

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.