DAX: contando el número de días a partir de las fechas

Un usuario Pregunto ✅

Anónimo

Tengo una tabla de fechas y tengo otra tabla que se ve así

Tienda cita abierta fecha de cierre
1abc 10/4/2019 7/5/2019
2cdf 15/03/2019 11/4/2019

Tengo un selector de fechas que selecciona el rango de fechas (ejemplo: 01/04/2019 – 30/04/2019).

Mi pregunta es –

1. ¿Cómo puedo contar los días activos para cada tienda, y también una medida que sume el número total de días activos en el rango de fechas seleccionado? (ejemplo: total de días activos (en el rango 01/04/2019 – 30/04/2019) = 21 + 12 = 33)

Nota: el número de días activos depende de la fecha de apertura y de cierre. open-date significa que la tienda diurna estuvo abierta y estuvo abierta hasta que se cerró.

¡Gracias!

Alba

Hola @Anónimo

Prueba esto:

1. No hay relación entre la tabla ‘Fecha’ y su tabla principal. Usar ‘Fecha'[Date] como dropdown

2. Colocar Table1[Store] en filas de una matriz visual.

3. Cree esta medida y colóquela en valores de la matriz:

Measure =
SUMX (
    ADDCOLUMNS (
        DISTINCT ( Table1[Store] ),
        "Result",
        VAR Min_Date_ =
            CALCULATE ( MAX ( MIN ( 'Date'[Date] ), SELECTEDVALUE ( Table1[open-date] ) ) )
        VAR Max_Date_ =
            CALCULATE ( MIN ( MAX ( 'Date'[Date] ), SELECTEDVALUE ( Table1[close-date] ) ) )
        RETURN
            ( Max_Date_ - Min_Date_ ) + 1
    ),
    [Result]
)

Tendrá el valor de cada tienda en filas más la suma de todas ellas en la fila total.

Alba

En respuesta a Alba

Otra opción:

AlternativeMeasure =
SUMX (
    ADDCOLUMNS (
        DISTINCT ( Table1[Store] ),
        "Result",
        VAR T1_ =
            CALENDAR (
                CALCULATE ( DISTINCT ( Table1[open-date] ) ),
                CALCULATE ( DISTINCT ( Table1[close-date] ) )
            )
        VAR T2_ =
            DISTINCT ( 'Date'[Date] )
        RETURN
            COUNTROWS ( INTERSECT ( T1_, T2_ ) )
    ),
    [Result]
)

Alba

Hola @Anónimo

Prueba esto:

1. No hay relación entre la tabla ‘Fecha’ y su tabla principal. Usar ‘Fecha'[Date] como dropdown

2. Colocar Table1[Store] en filas de una matriz visual.

3. Cree esta medida y colóquela en valores de la matriz:

Measure =
SUMX (
    ADDCOLUMNS (
        DISTINCT ( Table1[Store] ),
        "Result",
        VAR Min_Date_ =
            CALCULATE ( MAX ( MIN ( 'Date'[Date] ), SELECTEDVALUE ( Table1[open-date] ) ) )
        VAR Max_Date_ =
            CALCULATE ( MIN ( MAX ( 'Date'[Date] ), SELECTEDVALUE ( Table1[close-date] ) ) )
        RETURN
            ( Max_Date_ - Min_Date_ ) + 1
    ),
    [Result]
)

Tendrá el valor de cada tienda en filas más la suma de todas ellas en la fila total.

Anónimo

En respuesta a Alba

@AlB Me estoy midiendo como:

Capture.PNG

Me estoy perdiendo de algo ?

¡Gracias!

Alba

En respuesta a Anónimo

Hola @Anónimo

Acabo de editar las soluciones. Se cambió ALL por DISTINCT al principio.

Anónimo

En respuesta a Alba

@AlB ¡Funcionó perfectamente!

Anónimo

En respuesta a Anónimo

Capture123.PNG

@AlB He modificado la fórmula para tener en cuenta diferentes escenarios de fecha de apertura y cierre. Mis valores parecen ser correctos en cada tienda, pero mi TOTAL está completamente apagado. Alguna sugerencia ?
ActiveDays =
SUMX (
COLUMNAS (
DISTINCT (‘Tabla1′[Store]),
«Resultado»,
VAR Min_Date_ =
CALCULAR (MAX (MIN (‘Fecha'[Date] ), SELECTEDVALUE (‘Tabla1′[open-date] )),
FILTRAR(
‘Tabla1’, ‘Tabla1′[open-date] <= MAX ('Fecha'[Date] )
))
VAR Max_Date_ =
CALCULAR (MIN (MAX (‘Fecha'[Date] ), SELECTEDVALUE (‘Tabla1′[close-date] )),
FILTRAR(
‘Tabla1’, ‘Tabla1′[close-date] > = MIN (‘Fecha'[Date] )
))
VAR Diff_Date_ = IF ((Max_Date_ – Min_Date_) * 1> = 0, (Max_Date_ – Min_Date _) * 1 + 1, 0)
REGRESO
Diff_Date_
),
[Result]
)
¡Gracias!

Alba

En respuesta a Anónimo

@Anónimo

¿Puede explicar qué está tratando de hacer con los cambios que ha realizado, en particular los filtros en el cálculo? No sigo del todo

Anónimo

En respuesta a Alba

Revelación

@AlB Hola,

Si una tienda cerró antes del MIN (‘Fecha'[Date] ) es decir, ‘Tienda1′[Close-date]

VAR Max_Date_ = CALCULATE (MIN (MAX (‘Fecha'[Date] ), SELECTEDVALUE (Store1[Close-date] ))

seleccionará un valor que está fuera del rango del selector de fechas seleccionado. Entonces, una condición adicional también tiene que ser cierta
‘Tienda1′[Close-date] > = MIN (‘Fecha'[Date] )

similar,
CALCULAR (MAX (MIN (‘Fecha'[Date] ), SELECTEDVALUE (Store1[Open-Date] )),
con condición adicional Store1[Open-date] <= MAX ('Fecha'[Date] )

Si no se cumplen estas dos condiciones de suma, el valor es 0.

Estaba usando el filtro para hacer esto, pero parece que no funciona. ¿Alguna mejor solución?
¡Gracias!

Alba

En respuesta a Anónimo

@Anónimo, tienes toda la razón. No tomé en cuenta ese caso inicialmente.

(Max_Date_ – Min_Date_) será negativo en ese caso, así que creo que será suficiente con la modificación que ya pensó en el cálculo final (en rojo)

Measure =
SUMX (
    ADDCOLUMNS (
        DISTINCT ( Table1[Store] ),
        "Result",
        VAR Min_Date_ =
            CALCULATE ( MAX ( MIN ( 'Date'[Date] ), SELECTEDVALUE ( Table1[open-date] ) ) )
        VAR Max_Date_ =
            CALCULATE ( MIN ( MAX ( 'Date'[Date] ), SELECTEDVALUE ( Table1[close-date] ) ) )
        RETURN
            IF(( Max_Date_ - Min_Date_ )*1>=0, ( Max_Date_ - Min_Date_ )*1 + 1, 0)
    ),
    [Result]
)

Alba

En respuesta a Alba

Otra opción:

AlternativeMeasure =
SUMX (
    ADDCOLUMNS (
        DISTINCT ( Table1[Store] ),
        "Result",
        VAR T1_ =
            CALENDAR (
                CALCULATE ( DISTINCT ( Table1[open-date] ) ),
                CALCULATE ( DISTINCT ( Table1[close-date] ) )
            )
        VAR T2_ =
            DISTINCT ( 'Date'[Date] )
        RETURN
            COUNTROWS ( INTERSECT ( T1_, T2_ ) )
    ),
    [Result]
)

Anónimo

En respuesta a Alba

@AlB Ambas soluciones me están dando la respuesta correcta ahora. ¡Muchas gracias!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *