cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
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
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.

Super User IV
Super User IV

@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.



Did I answer your question? Mark my post as a solution! Appreciate your Kudos!!
Dashboard of My Blogs !! YouTube Channel !! Connect on Linkedin

Proud to be a Super User!

Super User I
Super User I

@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.

View solution in original post

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
secondImage

Congratulations!

We are excited to announce the Power BI Super Users!

Wave Release 2

Check out the updates in Power BI.

Overview of Power BI 2020 release wave 2!

Microsoft Ignite

Microsoft Ignite

Join digitally, March 2–4, 2021 to explore new tech that's ready to implement. Experience the keynote in mixed reality through AltspaceVR!

secondImage

The largest Power BI virtual conference

100+ sessions, 100+ speakers, Product managers, MVPs, and experts. All about Power BI. Attend online or watch the recordings.