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

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
Yeztrom
Helper I
Helper I

Calcular número de días consecutivos en desabasto

Hola buenas tardes,

 

Tengo una tabla calculada con la que obtengo en una columna de nombre available si un producto estuvo disponible en una tienda en una determinada fecha como se muestra en la siguiente imagen.

Yeztrom_0-1654275865545.png

 

Lo que pretendo obtener los días consecutivos en los que la columna available estuvo en cero ya que con ello obtengo los números de días concecutivos que un producto estuvo en desabasto en una determinada tienda, ya lo he intentando de varias maneras pero no encuentro como conseguir esto, espero me puedan ayudar

 

 

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

Hi, @Syndicate_Admin

Puede probar los siguientes métodos.

Tabla 2:

Table 2 = 
Var table2=SUMMARIZE('Table','Table'[retailer_id],'Table'[master_data_id],'Table'[master_product_id],'Table'[Available])
return
FILTER(table2,[Available]=0)

vzhangti_0-1654495929072.png

Columna:

Judge = 
DATEDIFF([master_data_id]-2,MaxX(FILTER('Table 2',[master_data_id]=EARLIER('Table 2'[master_data_id])-1),[master_data_id]),DAY)
First day = 
IF([Judge]<>BLANK(),0,1)
Consecutive days = 
VAR last_1_date =
    CALCULATE (
        MAX ( 'Table 2'[master_data_id] ),
        FILTER (
            'Table 2',
            'Table 2'[master_data_id] <= EARLIER ( 'Table 2'[master_data_id] )
                && [First day] = 1
        )
    )
VAR sum_ =
    CALCULATE (
        COUNTROWS ( 'Table 2' ),
        FILTER (
            'Table 2',
            'Table 2'[master_data_id] >= last_1_date
                && 'Table 2'[master_data_id] <= EARLIER ( 'Table 2'[master_data_id] )
        )
    )
RETURN
    IF ( [First day] = 1, 1, sum_ )
Days = 
VAR _N1 =
    CALCULATE (
        MIN ( 'Table 2'[master_data_id] ),
        FILTER ( 'Table 2', 'Table 2'[master_data_id] > EARLIER ( 'Table 2'[master_data_id] ) && [First day] = 1 )
    )
VAR _N2 =
    CALCULATE (
        MAX ( 'Table 2'[Consecutive days] ),
        FILTER ( 'Table 2', [master_data_id] >= EARLIER ( 'Table 2'[master_data_id] ) && [master_data_id] <= _N1 )
    )
VAR _N3 =
    CALCULATE (
        MAX ( 'Table 2'[Consecutive days] ),
        FILTER ( 'Table 2', [master_data_id]= MAX ( 'Table 2'[master_data_id] ) )
    )
RETURN
    IF (
        [First day] = 1
            && _N1 <> BLANK (),
        _N2,
        IF ( [First day] = 1 && _N1 = BLANK (), _N3 )
    )

vzhangti_1-1654496075414.png

Date1 = IF([Consecutive days]=1,[master_data_id])
Date2 = IF([Days]<>BLANK(),[Date1]+[Days]-1,BLANK())
period = IF([Date1]<>BLANK(), [Date1]&"-"&[Date2],BLANK())

vzhangti_2-1654497333768.png

Tabla 3:

Table 3 = 
Var table3=SUMMARIZE('Table 2','Table 2'[retailer_id],'Table 2'[master_product_id],'Table 2'[period],'Table 2'[Days])
return
Filter(table3,[Days]<>BLANK())

vzhangti_3-1654497502743.png

¿Es este el resultado que esperas?

Saludos

Equipo de soporte de la comunidad _Charlotte

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

Hola buenas tardes,

 

Gracias por su apoyo, si ese es el comportamiento que espero que tenga, únicamente si se ingresa más de un producto  en los datos de origen no reconoce los otros productos , si ingreso los datos así 

Yeztrom_0-1654538828118.png

No reconoce el producto con id 2

Yeztrom_1-1654538893612.png

 

Hi, @Syndicate_Admin

El resto de los métodos y fórmulas permanecen sin cambios. Es necesario cambiar la fórmula de la sentencia.

Judge =
DATEDIFF (
    [master_data_id] - 2,
    MAXX (
        FILTER (
            'Table 2',
            [master_data_id]
                = EARLIER ( 'Table 2'[master_data_id] ) - 1
                && [retailer_id] = EARLIER ( 'Table 2'[retailer_id] )
                && [master_product_id] = EARLIER ( 'Table 2'[master_product_id] )
        ),
        [master_data_id]
    ),
    DAY
)

vzhangti_0-1654568843550.png

vzhangti_1-1654568869572.png

¿Es este el resultado que esperabas?

Saludos

Equipo de soporte de la comunidad _Charlotte

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

Hola buenas tardes, 

Funciona perfecto, ahora mi único problema está siendo unificar en una sola medida todos los cálculos, ya que todo este cálcula va a ser utilizado dentro de una medida que se va a mostrar en el dashboard, teniendo la tabla3 calculada voy a mostrar en el return un max, min y varias cosas a parte, la razón por la que se hace así es porque la medida tiene que ser dinamica y el resultado mostrado tiene que variar en función de los filtros seleccionados.

 

El problema que estoy teniendo es cuando agrega una columna con la medida sum_

Yeztrom_0-1654621902611.png

 

Yeztrom_1-1654621935629.png

 

El avance de la medida es este:

_Test stockout =
VAR _PRESENCE_BY_PRODUCT = //Determinar la presencia de los productos en cada retailer
SUMMARIZE(
            vw_product_availabilies,
            vw_product_availabilies[master_product_id],
            vw_product_availabilies[retailer_id],
            "Presence",[Avg. Presence]
)
VAR _FILTER_PRODCUTS_W_PRESENCE = //Obtener lista de retailers-productos con presencia
SUMMARIZE(
            ADDCOLUMNS(
                        SUMMARIZE(
                                    FILTER(
                                            _PRESENCE_BY_PRODUCT,
                                            [Presence] = 1
                                    ),
                                    [retailer_id],
                                    [master_product_id]
                        ),
                        "RET-PROD",[retailer_id]&"-"&[master_product_id]
            ),
            [RET-PROD]
)
VAR _FILTER_AVAILABILITES_TABLE =  //Filtrar tabla vw_product_availabilies con retailers-productos con presencia
FILTER(
        ADDCOLUMNS(
                    VALUES(vw_product_availabilies),
                    "RET-PROD",[retailer_id]&"-"&[master_product_id]
                ),
        [RET-PROD] IN _FILTER_PRODCUTS_W_PRESENCE
)

VAR _CONSOLIDATE_STORE_ID =
ADDCOLUMNS(
            GROUPBY(
                        _FILTER_AVAILABILITES_TABLE,
                        [retailer_id],
                        [master_date_id],
                        [master_product_id],
                        "Available", SUMX(CURRENTGROUP(),[product_available])
            ),
            "Date",DATE(LEFT([master_date_id],4),MID([master_date_id],5,2),RIGHT([master_date_id],2))
        )
VAR _TABLE2_0 =
ADDCOLUMNS(
            SUMMARIZE(  
                        FILTER(
                                _CONSOLIDATE_STORE_ID,
                                [Available] = 0
                        ),
                        [retailer_id],
                        [Date],
                        [master_product_id],
                        [Available]
                    ),
            "Judge",    DATEDIFF (
                                    [Date] - 2,
                                    MAXX (
                                        FILTER (
                                            _CONSOLIDATE_STORE_ID,
                                            [Date] = EARLIER ( [Date] ) - 1
                                                && [retailer_id] = EARLIER ( [retailer_id] )
                                                && [master_product_id] = EARLIER ( [master_product_id] )
                                        ),
                                        [Date]
                                    ),
                                    DAY
                                )
        )

VAR _TABLE2_1 =
ADDCOLUMNS(
            _TABLE2_0,
            "First day", IF([Judge]<>BLANK(),0,1)
)

VAR _TABLE2_2 =
ADDCOLUMNS(
            _TABLE2_1,
            "last_1_date", CALCULATE (
                                        MAXX (_TABLE2_1, [Date] ),
                                        FILTER (
                                            _TABLE2_1,
                                            [Date] <= EARLIER ([Date] )
                                                && [First day] = 1
                                        )
                                    )
)

VAR _TABLE2_3 =
SUMMARIZE(
            _TABLE2_2,
            [retailer_id],
            [Date],
            [master_product_id],
            [Available],
            [Judge],
            [First day],
            [last_1_date],
            "sum_", CALCULATE(
                                COUNTROWS ( _TABLE2_2 ),
                                FILTER (
                                    _TABLE2_2,
                                    [Date] >= [last_1_date]
                                        && [Date] <= EARLIER ([Date] )
                                )
                            )
)

RETURN
_TABLE2_3
 
El archivo de prueba es este: 

Hi, @Syndicate_Admin

¿Qué tipo de resultados espera obtener de esta columna de Sum?

vzhangti_0-1654671350997.pngvzhangti_1-1654671366699.png

¿Es 292 la salida que esperas?

Saludos

Equipo de soporte de la comunidad _Charlotte

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

Lo que estoy intentando hace es unir todas las medidas que nos compartió en el archivo de nombre 

Calculate number of consecutive days in shortages update.pbix en una única medida, las columnas que estaba adaptando eran estas
 

Yeztrom_0-1654702935098.png

 

No había analizado que es lo que hacen de manera particular las medidas, yo supongo que si seria 292 lo que tiene que devolver, pero estos últimos dos cálculos corresponde a la columna Consecutive days del archivo que habia compartido.

 

Yeztrom_1-1654703191858.png

 

Hi, @Syndicate_Admin

Puede intentar utilizar las columnas calculadas después de crear la tabla. Escribirlo todo en la función de la tabla tal como está ahora cometerá errores aritméticos contextuales.

Saludos

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

Dec Fabric Community Survey

We want your feedback!

Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors