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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Necesita ayuda en DAX: Columna calculada

Hola a todos,

Publicando aquí de nuevo, ya que todavía no puedo obtener una respuesta, agradezco sinceramente todas las ideas.

Me gustaría tener una fórmula que cree la columna "Stock de apertura después" para la semana actual que se deriva de restar la demanda de la semana anterior del stock de apertura de la semana anterior después y agregar el envío propuesto de la semana anterior. (por ejemplo, para G52314 Semana 34 Acciones de apertura después de -> 113-70 + 40 = 83) (por ejemplo, para G52314 Semana 37 Acciones de apertura después de -> 0-40 + 100 = 60).

Sin embargo, para el número de semana más pequeño (Semana 31), ya que no hay datos para la semana anterior, el Stock de Apertura Después es siempre igual al Stock de Apertura.

El Stock de apertura después nunca debe ser un valor negativo (por ejemplo, si el valor es negativo, devuelva 0 en su lugar). Si el stock de apertura después de la semana anterior es negativo, se debe usar 0 en el cálculo del stock de apertura de la semana actual después (por ejemplo, X78321 El cálculo de la semana 37 debe ser 0-49 + 60 = 11).

ÚnicoNúmero de semanaApertura de stockEnvío propuestoDemandaOpening Stock After
G5231431120035120
G5231432120704285
G52314331204070113
G52314341204013083
G5231435120801400
G5231436120100400
G5231437120403660
X7832131200057200
X78321322002048143
X783213320090120115
X78321342006015085
X7832135200601500
X783213620060490
X7832137200605211

cómo se ve en las fórmulas de Excel:

bluerooster_0-1661485014776.png

Una vez más, gracias por toda la ayuda.

14 REPLIES 14
Syndicate_Admin
Administrator
Administrator

Buenos días @bluerooster

Consulte el archivo de muestra adjunto con la solución.

Tengo que mencionar que esta solución no es perfecta. Podría haber algunos casos en los que podría no proporcionar resultados correctos, sin embargo, tales casos son extremadamente raros. De todos modos, la solución ya es compleja y vincular para mejorar aún más dará como resultado una solución aún más compleja y menos eficiente que supongo que no será necesaria. Por favor, hágamelo saber si tiene más preguntas.

1.png

Opening Stock After = 
VAR CurrentWeek1 = Data[Week Number]
VAR OpeningStock1 = Data[Opening Stock]
VAR CurrentUniqueTable = CALCULATETABLE ( Data, ALLEXCEPT ( Data, Data[Unique] ) )
VAR StockAfterTable = 
    ADDCOLUMNS ( 
        CurrentUniqueTable, 
        "@StockAfter", 
        VAR CurrentWeek2 = [Week Number]
        VAR TableBefore2 = FILTER ( CurrentUniqueTable, [Week Number] < CurrentWeek2 )
        VAR Value1 =
            SUMX ( 
                TableBefore2, 
                [Proposed Shipment] - [Demand]
            ) 
        VAR Value2 = Value1 + OpeningStock1
        RETURN
            IF ( Value2 < 0, 0, Value2 )
    )
VAR CurrentRecord = FILTER ( StockAfterTable, [Week Number] = CurrentWeek1 )
VAR PreviousRecord = FILTER ( StockAfterTable, [Week Number] = CurrentWeek1 - 1 )
VAR OpeningStock2 = MINX ( CurrentRecord, [@StockAfter] )
VAR Result =
    IF ( OpeningStock2 = 0, SUMX ( PreviousRecord, [Proposed Shipment] - [Demand] ), OpeningStock2 )
RETURN
    IF ( Result < 0, 0, Result )

Buenos días @tamerj1

Muchas gracias por su respuesta!! El código funciona casi perfectamente, sin embargo, descubrí que si agregué más semanas después de la semana 37, el código no devuelve las respuestas correctas. Agregué nuevos datos para la semana 38 y la semana 39 y experimenté con el código.

El resultado deseado con los datos de la semana 38 y 39:

ÚnicoNúmero de semanaApertura de stockEnvío propuestoDemandaApertura de stock después
G5231431120035120
G5231432120704285
G52314331204070113
G52314341204013083
G5231435120801400
G5231436120100400
G5231437120403660
G5231438120503864
G5231439120604076
X7832131200057200
X78321322002048143
X783213320090120115
X78321342006015085
X7832135200601500
X783213620060490
X7832137200605211
X7832138200503019
X7832139200602539

El resultado en PBI:

bluerooster_0-1661938583512.png

Para las semanas 38 y 39, el código tomó el Envío propuesto - Demanda de la semana anterior sin agregar el Stock de apertura después de la semana anterior.

Gracias una vez más por su ayuda hasta ahora... 🙏

@bluerooster HI
Pude obtener números correctos de las filas agregadas. Sin embargo, fui más allá y agregué aún más filas y me di cuenta de que el ciclo entre positivo a negativo a positivo más de una vez hará que la solución DAX sea imposible de lograr. Lo que se puede lograr con una función simple en Excel no se puede lograr con DAX. En general, DAX no admite cálculos recursivos, pero en algunos casos hay soluciones alternativas que aparentemente no en este caso.

1.png2.png

Ya veo, muchas gracias @tamerj1 por su generosa ayuda... Si hay una solución alternativa, creando nuevas medidas u otras columnas calculadas para lograr el resultado deseado, soy todo oídos ...

@bluerooster

¿Existe un número máximo de ciclos de reinicio?

@tamerj1
No, es aleatorio dependiendo de la Demanda / Envío Propuesto para la semana actual, así como el Stock de Apertura después de la semana anterior.

@bluerooster

Sé que es aleatorio pero en general podemos decir que esto no puede suceder por ejemplo más de 5 veces o puede ser mucho más?

@tamerj1
En realidad, sí, se podría decir que los ciclos de reinicio máximos son el número de semanas que abarca el conjunto de datos actual (por ejemplo, semana 31-37, ciclos de reinicio máximos = 6).


Encontrará el archivo de muestra modificado adjunto. Tenga en cuenta que el rendimiento sería probablemente malo.Opening Stock After = VAR CurrentWeek = Data[Week Number] VAR OpeningStock = Data[Opening Stock] VAR CurrentUniqueTable = CALCULATETABLE ( Data, ALLEXCEPT ( Data, Data[Unique] ) ) VAR T1 = ADDCOLUMNS ( CurrentUniqueTable, "@StockAfter1", VAR WeekNumber = [Week Number] VAR TableBefore = FILTER ( CurrentUniqueTable, [Week Number] < WeekNumber ) VAR Value1 = SUMX ( TableBefore, [Proposed Shipment] - [Demand] ) VAR Value2 = Value1 + OpeningStock RETURN Value2 ) VAR R1 = TOPN ( 1, FILTER ( T1, [@StockAfter1] < 0 ), [Week Number], ASC ) VAR W1 = MINX ( R1, [Week Number] ) VAR V1 = MINX ( R1, [@StockAfter1] ) VAR T2 = ADDCOLUMNS ( T1, "@StockAfter2", IF ( [Week Number] < W1, [@StockAfter1], [@StockAfter1] - V1 ) ) VAR R2 = TOPN ( 1, FILTER ( T2, [@StockAfter2] < 0 ), [Week Number], ASC ) VAR W2 = MINX ( R2, [Week Number] ) VAR V2 = MINX ( R2, [@StockAfter2] ) VAR T3 = ADDCOLUMNS ( T2, "@StockAfter3", IF ( [Week Number] < W2, [@StockAfter2], [@StockAfter2] - V2 ) ) VAR R3 = TOPN ( 1, FILTER ( T3, [@StockAfter3] < 0 ), [Week Number], ASC ) VAR W3 = MINX ( R3, [Week Number] ) VAR V3 = MINX ( R3, [@StockAfter3] ) VAR T4 = ADDCOLUMNS ( T3, "@StockAfter4", IF ( [Week Number] < W3, [@StockAfter3], [@StockAfter3] - V3 ) ) VAR R4 = TOPN ( 1, FILTER ( T4, [@StockAfter4] < 0 ), [Week Number], ASC ) VAR W4 = MINX ( R4, [Week Number] ) VAR V4 = MINX ( R4, [@StockAfter4] ) VAR T5 = ADDCOLUMNS ( T4, "@StockAfter5", IF ( [Week Number] < W4, [@StockAfter4], [@StockAfter4] - V4 ) ) VAR R5 = TOPN ( 1, FILTER ( T5, [@StockAfter5] < 0 ), [Week Number], ASC ) VAR W5 = MINX ( R5, [Week Number] ) VAR V5 = MINX ( R5, [@StockAfter5] ) VAR T6 = ADDCOLUMNS ( T5, "@StockAfter6", IF ( [Week Number] < W5, [@StockAfter5], [@StockAfter5] - V5 ) ) RETURN MAXX ( FILTER ( T6, [Week Number] = CurrentWeek ), [@StockAfter6] )

@bluerooster

Buenos días @tamerj1
He probado el código anterior y lo he ajustado en consecuencia al número máximo de semanas que mi conjunto de datos podría abarcar y hasta ahora funciona! No puedo agradecerte lo suficiente por tu gran ayuda de corazón en los últimos días ... hiciste mi semana y espero que tengas un gran fin de semana por delante, gracias 😃

@bluerooster

Sé que es aleatorio pero en general podemos decir que esto no puede suceder por ejemplo más de 5 veces o puede ser mucho más?

@tamerj1
O podría decir que los ciclos de reinicio máximos son el número de semanas que abarca el conjunto de datos actual (por ejemplo, semana 31-37, ciclos de reinicio máximos = 6).

Syndicate_Admin
Administrator
Administrator

@bluerooster

cuando llegué a la parte en la que dijiste "Si el Stock de Apertura después de la semana anterior es negativo, se debe usar 0 en el cálculo de la semana actual " estaba como 😅

No creo que vaya a ser fácil. Sin embargo, tengo algo en mente, permítanme intentar aplicarlo mañana por la mañana. De todos modos, esto no va a ser eficiente de ninguna manera, así que espero que sus datos no sean tan grandes.

Hola @tamerj1

gracias por ayudar 🙏

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

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.