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
Thcferreira
Frequent Visitor

Contar días para un valor dado sin tener en cuenta el valor anterior

Hola
Trataré de simplificar a lo sumo para socavar la comprensión.

Tengo un rango de fechas, por ejemplo del 1 de enero al 1 de marzo.
Tengo una tabla con una columna DATA y otra columna X con un valor, por ejemplo: el 01 de marzo y 02 el valor de la columna X es 1, en 03 y 04 el valor de la columna x es 5, en 05 y 06 el valor vuelve a 1.

Necesito hacer un recuento de cuántos días se produjo el valor de X, pero con cada nuevo recuento no debo considerar el anterior, ejemplo en mi filtro seleccioné el día 2 (ese día el valor de X es 1), mi resultado será de 2 días, porque tengo el día 01 y 02 con el valor 1 , cuando selecciono el día 04 el valor de X será 5 entonces mi resultado será 2 porque tengo el valor 5 en el día 03 y 04, hasta ahora todo bien, el problema es cuando selecciono el día 06 (en ese día el valor de X es 1 de nuevo) entonces el valor que se está devolviendo es 4 porque también considera los días 01 y 02 , la necesidad es no contar más días 01 y 02 y contado sólo 05 y 06, porque entre el día 02 y 05 tenía diferentes valores de 1 a X.

Si alguien tiene alguna idea.

1 ACCEPTED SOLUTION

Hola, @Thcferreira
Primero debe crear una columna de índice en el editor de consultas

A continuación, puede intentar crear columnas calculadas como se muestra a continuación:

color flag = 
VAR value1 =
    'COVID'[TRANSMISSIBILIDADE]
RETURN
    SWITCH (
        TRUE (),
        value1 > 1.5, "red",
        value1 >= 1
            && value1 <= 1.5, "orange",
        value1 < 1, "green"
    )
ChangedStatue = 
VAR pre =
    CALCULATE (
        VALUES ( COVID[color flag] ),
        FILTER ( ALL ( COVID ), 'COVID'[Index] = EARLIER ( COVID[Index] ) - 1 )
    )
RETURN
    IF ( ISBLANK ( pre ) || pre = 'COVID'[color flag],"unchanged","changed" )
Counting days = 
VAR _max =
    CALCULATE (
        MAX ( 'COVID'[Index] ),
        FILTER (
            'COVID',
            'COVID'[Index] <= EARLIER ( 'COVID'[Index] )
                && 'COVID'[ChangedStatue] = "changed"
        )
    )
RETURN
    IF ( ISBLANK ( _max ), 'COVID'[Index], 'COVID'[Index] - _max + 1 )

El resultado se mostrará como se muestra a continuación:

118.png

Para obtener más detalles, compruebe el archivo adjunto.

Saludos
Equipo de soporte de la comunidad _ Eason
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

8 REPLIES 8
Thcferreira
Frequent Visitor

Lo siento, soy nuevo en powerbi

Traté de simplificar el ejemplo para una mejor comprensión, ahora estoy proporcionando más información, no pude adjuntar el pbix.
esta necesidad es un mapa que mida la transmisibilidad de cada estado durante la pandemia covid.
por lo que la necesidad de saber cuántos días cada estado permaneció en un cierto rango de transmisibilidad (este rango se define por la transmisibilidad) y realizar un seguimiento de los cambios en los rangos, por lo que no puedo acumular los valores, cada vez que cambio el rango para presentar un nuevo valor.


Aquí está un ejemplo de la tabla que estoy usando: Estado, transmisibilidad (Rt) y la fecha de una tabla llamada covid

Thcferreira_0-1602265654253.png


Las reglas del rango son las siguientes:
transmissibilidade > 1,5 - rojo
transmissibilidade > 1 e <-1,5 – naranja
transmissibilidade <1 - verde

En 05/30/2020 cuando el rango está por encima de 1.5 tengo 54 días que me quedé en ese rango

t2.png

En 05/31/2020 mi rango ya no está por encima de 1.5, pero <-1.5 por lo que cambió de color

t3.png

El 06/14/2020 mi rango volvió a 1.5 y luego debe empezar a contar los días desde cero de nuevo, pero también está contando los días de ese primer período (05/30/2020 de la primera imagen).

t.png


Entonces, ¿cuál es la necesidad? Déjalo contar los días para cada pista, pero cuando hay un cambio de pista, por ejemplo me quedé 2 días en el rango> 1.5 entonces me mudé al rango <-1.5 y luego volví al rango> 1.5 Debo contar esos 2 días que me había quedado en este rango en el conteo.

amitchandak
Super User
Super User

@Thcferreira, parece más acumulativo

Ejemplo

Ventas de Cumm: CALCULATE(SUM(Sales[Sales Amount]),filter(allselected(date),date[date] <-maxx(date,date[date])))
Ventas de Cumm: CALCULATE(SUM(Sales[Sales Amount]),filter(allselected(date),date[date] <-max(Sales[Sales Date]))

¿Puede compartir datos de ejemplo y salida de ejemplo en formato de tabla? O una muestra de pbix después de eliminar datos confidenciales.

Proporcione sus comentarios y consejos para nuevos videos
Tutorial Series Dax Vs SQL Direct Query PBI Consejos
Apreciamos tus Felicitaciones.

VijayP
Super User
Super User

@Thcferreira

¿Es posible compartir datos de ejemplo. La explicación no está dando el contexto .




Did I answer your question? Mark my post as a solution! Appreciate your Kudos!!
MY Blog || My YouTube Channel || Connect with me on Linkedin || My Latest Data Story - Ageing Analysis

Proud to be a Super User!


Hello, I put more information below.
the measure I am using is accumulating the days, is as follows:

VAR MX_DT = CALCULATE(DISTINCT(COVID[TRANSMISSIBILIDADE]),LASTDATE(COVID[DATA]))
VAR DT = LASTDATE(COVID[DATA])
VAR DT_1 = CALCULATE(DISTINCT(COVID[DATA]),COVID[TRANSMISSIBILIDADE] <1.0,ALL(COVID[DATA]))
 
--VAR QTD_D = CALCULATE(DISTINCTCOUNT(COVID[DATA]),COVID[TRANSMISSIBILIDADE] = MX_DT,ALL(COVID[DATA]))
RETURN
IF(MX_DT < 1.0,
CALCULATE(DISTINCTCOUNT(COVID[DATA]), COVID[TRANSMISSIBILIDADE] < 1,COVID[DATA] <=DT)
,
IF(AND(MX_DT >=1.0, MX_DT < 1.5),
CALCULATE(DISTINCTCOUNT(COVID[DATA]), AND(COVID[TRANSMISSIBILIDADE] >=1.0,COVID[TRANSMISSIBILIDADE] <1.5),COVID[DATA] <=DT) ,
IF(MX_DT >= 1.5,
CALCULATE(DISTINCTCOUNT(COVID[DATA]), COVID[TRANSMISSIBILIDADE] >= 1.5,COVID[DATA] <=DT)
,0)
)
)

Hola, @Thcferreira
Primero debe crear una columna de índice en el editor de consultas

A continuación, puede intentar crear columnas calculadas como se muestra a continuación:

color flag = 
VAR value1 =
    'COVID'[TRANSMISSIBILIDADE]
RETURN
    SWITCH (
        TRUE (),
        value1 > 1.5, "red",
        value1 >= 1
            && value1 <= 1.5, "orange",
        value1 < 1, "green"
    )
ChangedStatue = 
VAR pre =
    CALCULATE (
        VALUES ( COVID[color flag] ),
        FILTER ( ALL ( COVID ), 'COVID'[Index] = EARLIER ( COVID[Index] ) - 1 )
    )
RETURN
    IF ( ISBLANK ( pre ) || pre = 'COVID'[color flag],"unchanged","changed" )
Counting days = 
VAR _max =
    CALCULATE (
        MAX ( 'COVID'[Index] ),
        FILTER (
            'COVID',
            'COVID'[Index] <= EARLIER ( 'COVID'[Index] )
                && 'COVID'[ChangedStatue] = "changed"
        )
    )
RETURN
    IF ( ISBLANK ( _max ), 'COVID'[Index], 'COVID'[Index] - _max + 1 )

El resultado se mostrará como se muestra a continuación:

118.png

Para obtener más detalles, compruebe el archivo adjunto.

Saludos
Equipo de soporte de la comunidad _ Eason
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Gracias, ahora tengo problemas para calcular los días.

DIAS_NA_FAIXA =
VAR _max =
CALCULATE (
MAX ( 'COVID'[Índice] ),
FILTER ('COVID','COVID'[Índice] <= EARLIER(COVID[Índice]) && 'COVID'[MUDA_FAIXA] = "SIM")
)
RETURN
IF ( ISBLANK ( _max ), 'COVID'[Índice], 'COVID'[Índice] - _max + 1 )
 
t4.png

Hola, @Thcferreira

La fórmula que proporcioné es una columna calculada, en lugar de una medida...

Puede comprobarlo en mi archivo pbix adjunto.

Saludos
Equipo de soporte de la comunidad _ Eason

Olá, depois eu percebi o meu equivoco.
eu consegui resolver usando uma medida, ficou da seguinte forma:

DIAS_TRANSM =
VAR MX_DT = CALCULATE(DISTINCT(COVID[TRANSMISSIBILIDADE]),LASTDATE(COVID[DATA]))
VAR COR = DISTINCT(COVID[VL_FAIXA_TRANSMISSIBILIDADE])
VAR DT = LASTDATE(COVID[DATA])

VAR MUDA_FAIXA_ANT = CALCULATE(DISTINCT(COVID[MUDA_FAIXA]),PREVIOUSDAY(LASTDATE(COVID[DATA])))
VAR ULT_DT_VERDE = CALCULATE(LASTDATE(COVID[DATA]),COVID[VL_FAIXA_TRANSMISSIBILIDADE] = "VERDE",ALL(COVID[DATA]),COVID[DATA]<=DT)
VAR ULT_DT_VERMEL = CALCULATE(LASTDATE(COVID[DATA]),COVID[VL_FAIXA_TRANSMISSIBILIDADE] = "VERMELHO",ALL(COVID[DATA]),COVID[DATA] <= DT)
VAR ULT_DT_LAR = CALCULATE(LASTDATE(COVID[DATA]),COVID[VL_FAIXA_TRANSMISSIBILIDADE] = "LARANJA",ALL(COVID[DATA]),COVID[DATA] <= DT)

VAR FAIXA_ANT = CALCULATE(DISTINCT(COVID[VL_FAIXA_TRANSMISSIBILIDADE]),PREVIOUSDAY(LASTDATE(COVID[DATA])))
VAR FAIXA_ATUAL = VALUES(COVID[VL_FAIXA_TRANSMISSIBILIDADE])

RETURN

IF(COR = "VERDE",
IF(FAIXA_ATUAL <> FAIXA_ANT,1
,CALCULATE(DISTINCTCOUNT(COVID[DATA]), COVID[VL_FAIXA_TRANSMISSIBILIDADE] = "VERDE",COVID[DATA] > ULT_DT_LAR || COVID[DATA] > ULT_DT_VERMEL,COVID[DATA] <=DT)
)
,
IF(COR = "LARANJA",
IF(FAIXA_ATUAL <> FAIXA_ANT,
1
,CALCULATE(DISTINCTCOUNT(COVID[DATA]),COVID[VL_FAIXA_TRANSMISSIBILIDADE] = "LARANJA",COVID[DATA]>ULT_DT_VERDE,COVID[DATA]>ULT_DT_VERMEL, COVID[DATA] <= DT)
)
,
IF(COR = "VERMELHO",
IF(FAIXA_ATUAL <> FAIXA_ANT,
1,
CALCULATE(DISTINCTCOUNT(COVID[DATA]), COVID[VL_FAIXA_TRANSMISSIBILIDADE] = "VERMELHO",COVID[DATA]>ULT_DT_VERDE || COVID[DATA] > ULT_DT_LAR,COVID[DATA] <=DT)
)
,0)
)
)
 
Agradeço a todos pela ajuda.

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.