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

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

Reply
Syndicate_Admin
Administrator
Administrator

Problemas con el recuento de fechas distintas en un intervalo de tiempo de media hora

Estoy totalmente perplejo con esto.

Tengo tres tablas en juego aquí: DimTimes, DimDates y Facts, donde Facts es un montón de cosas que ocurrieron en un momento específico, y las otras dos se explican por sí mismas.

Facts se conecta a DimTimes en TimeKey y a DimDates en Date.

pertinentmodel.png

Tiempos oscuros

Hora HoraCubo Media HoraCubo 15MinCubo HoraClave Hora Minuto IsDaytimeShift

12:00 a.m.12:00 a.m.12:00 a.m.12:00 a.m.000N
12:01 a.m.12:00 a.m.12:00 a.m.12:00 a.m.001N
...
12:16 a.m.12:00 a.m.12:00 a.m.12:15 a.m.0016N
...
13:4713:0013:3013:458271347Y

Hechos

Id DateTime Date TimeKey OtherColumns

120001/08/2021 09:498/1/2021589
120001/08/2021 17:178/1/20211037
120004/08/2021 06:018/4/2021361
120004/08/2021 15:298/4/2021929
120005/08/2021 06:038/4/2021363
120005/08/2021 15:328/4/2021932

Mi objetivo es tener un gráfico de barras con el eje x como DimTimes[HalfHourBucket] y el eje y como el recuento de fechas en las que la marca de tiempo mínima en esa fecha cae en el intervalo de media hora (por ejemplo, la línea roja).

examplechart.png

Entonces, para la tabla de hechos de ejemplo, con cubos de media hora desde la medianoche hasta las 11:30 p.m., tendríamos:

Recuento de cubos de media hora

6:00 a.m.2
9:30 a.m.1

y todo lo demás 0.

No puedo conseguir que el DAX coopere. O bien rellena el gráfico de barras con el valor mínimo de cada cubo, como

Recuento de cubos de media hora

6:00 a.m.2
9:30 a.m.1
15:001
15:301
17:001

y todo lo demás 0,

o simplemente devuelve un recuento de 1 en cada cubo de media hora porque hay 1 valor mínimo (6:01 a.m.).

Si creo una tabla en Power Query en la que cada fila es un identificador y una fecha, con la hora mínima para esa fecha en una tercera columna y la media hora de inicio asociada en una cuarta, Power BI cuenta las fechas según lo esperado con esta medida:

CALCULATE(
        COUNT(GroupedTable[StartHalfHour])
    )

Buscando solo la fecha mínima (y sin intentar contarla todavía), si la fecha está incluida en el objeto visual, esto funciona:

VAR vMinByDate =
    CALCULATE(
        MINX(
            DimDates
            , MIN(Facts[Time])
        )
        , REMOVEFILTERS(DimTimes)
    )

pero tan pronto como quito la fecha del objeto visual, esto devuelve el tiempo mínimo en todo el conjunto de datos, punto.

Lo he probado con ADDCOLUMNS, funciones de iterador solas, SUMMARIZE, GROUPBY y otras combinaciones en el mismo, junto con mover los REMOVEFILTERS(DimTimes) a diferentes ubicaciones en las fórmulas, y usar DimTimes o DimTimes[HalfHourBucket] en REMOVEFILTERS().

El siguiente código casi funciona, pero devuelve aleatoriamente valores incorrectos de los que no puedo sacar cara o cruz:

dev_StartHalfHourCount = 
// count the number of dates where the half hour bucket was the minimum time

/* VAR vMinByDate =
// this works in table of date, time, value
    CALCULATE(
        MINX(
            DimDates
            , MIN(Facts[Time])
        )
        , REMOVEFILTERS(DimTimes)
    ) */

VAR x = 
// this works most of the time, but returns wonky values randomly
// doesn't work to define vMinByDate outside of the iterator

    SUMX(
        VALUES(DimDates[Date])
        , 
            VAR vMinByDateInternal =
                CALCULATE(
                    MINX(
                        VALUES(Facts[Date])
                        , MIN(Facts[Time])
                    )
                    , REMOVEFILTERS(DimTimes)
                )
            RETURN
                IF(
                    (not ISBLANK(vMinByDateInternal)) 
                        && SELECTEDVALUE(DimTimes[Half Hour Bucket]) <= vMinByDateInternal
                        && vMinByDateInternal < SELECTEDVALUE(DimTimes[Half Hour Bucket]) + TIME(0, 30, 0)
                    , 1
                    , BLANK()
                )
    )
RETURN x

Por ejemplo, para un identificador específico, el valor de 3:30PM debe ser 56, pero devuelve 62. (El número de fechas distintas en ese intervalo de tiempo para esa identificación es 136, y el número de horas distintas combinadas con una de las otras columnas es 111, por lo que no tengo idea de dónde provienen las 6 adicionales).

1 ACCEPTED SOLUTION

Sin crear la relación, el código sugerido devuelve un total acumulado que comienza desde el último cubo de media hora hasta el primero.

Solo busco cuántas veces un cubo de media hora en particular abarcó la marca de tiempo más temprana en una fecha determinada. Por lo tanto, Joe Schmoe puede haber trabajado un turno de 9 a.m. a 3 p.m. cinco días en una semana, pero el cubo de las 10:00 a.m. sería la hora de inicio 0 veces en esa semana, a pesar de que trabajó durante el cubo de las 10:00 a.m. los cinco días.

Un colega acaba de resolverlo, con la relación intacta:

Cree una columna auxiliar en la tabla Hechos:

CALCULAR(
MIN(Hechos[Tiempo])
, FILTRO(
Hechos
, Hechos[Fecha] = ANTERIOR(Hechos[Fecha])
&& Hechos[Id] = ANTERIOR(Hechos[Id])
)
)
Y, a continuación, cree la columna calculada real:
SI(
Hechos[MinStartHelper] = Hechos[Tiempo]
, 1
, 0
)
A continuación, la medida es la siguiente:
CALCULAR(
DISTINCTCOUNT(Hechos[Fecha])
, Hechos[MinStart] == 1
)
Los errores aleatorios en el intento de medición estricta se debieron al uso de SUMX.

View solution in original post

2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

Hola @otis_pc ,

Siga los pasos a continuación para obtenerlo:

1. No cree ninguna relación entre DimTimes y la tabla Facts

2. Cree una medida como se muestra a continuación

Measure =
VAR _time =
    SELECTEDVALUE ( 'DimTimes'[HalfHourBucket] )
RETURN
    CALCULATE (
        COUNT ( 'Facts'[Id] ),
        FILTER (
            'Facts',
            TIMEVALUE ( 'Facts'[DateTime] ) >= _time
                && TIMEVALUE ( 'Facts'[DateTime] )
                    <= TIMEVALUE ( 'Facts'[DateTime] ) + TIME ( 0, 30, 0 )
        )
    )

3. Cree un gráfico de barras (eje X: DimTimes[HalfHourBucket] Eje Y: [Medir])

Si el anterior no puede ayudarlo a obtener el resultado esperado, proporcione algunos datos brutos En las tablas (Excluir datos confidenciales) con Mensaje de texto formato y el resultado esperado con ejemplos especiales y capturas de pantalla. Sería útil encontrar la solución. YPuede consultar el siguiente enlace para compartir la información requerida:

Proporcionar datos de ejemplo en el foro de Power BI

Y es mejor si puede compartir un archivo pbix simplificado. Puede consultar el siguiente enlace para subir el archivo a la comunidad. Gracias.

Cómo subir PBI en Community

Saludos

Sin crear la relación, el código sugerido devuelve un total acumulado que comienza desde el último cubo de media hora hasta el primero.

Solo busco cuántas veces un cubo de media hora en particular abarcó la marca de tiempo más temprana en una fecha determinada. Por lo tanto, Joe Schmoe puede haber trabajado un turno de 9 a.m. a 3 p.m. cinco días en una semana, pero el cubo de las 10:00 a.m. sería la hora de inicio 0 veces en esa semana, a pesar de que trabajó durante el cubo de las 10:00 a.m. los cinco días.

Un colega acaba de resolverlo, con la relación intacta:

Cree una columna auxiliar en la tabla Hechos:

CALCULAR(
MIN(Hechos[Tiempo])
, FILTRO(
Hechos
, Hechos[Fecha] = ANTERIOR(Hechos[Fecha])
&& Hechos[Id] = ANTERIOR(Hechos[Id])
)
)
Y, a continuación, cree la columna calculada real:
SI(
Hechos[MinStartHelper] = Hechos[Tiempo]
, 1
, 0
)
A continuación, la medida es la siguiente:
CALCULAR(
DISTINCTCOUNT(Hechos[Fecha])
, Hechos[MinStart] == 1
)
Los errores aleatorios en el intento de medición estricta se debieron al uso de SUMX.

Helpful resources

Announcements
Sept PBI Carousel

Power BI Monthly Update - September 2024

Check out the September 2024 Power BI update to learn about new features.

September Hackathon Carousel

Microsoft Fabric & AI Learning Hackathon

Learn from experts, get hands-on experience, and win awesome prizes.

Sept NL Carousel

Fabric Community Update - September 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors