Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:
columna Calculada
tabla calculada
Medida
cálculo visual
Nota
No se recomienda usar esta función en cálculos visuales, ya que probablemente devuelva resultados sin sentido.
Para la entrada de columna de fecha, devuelve una tabla que contiene una columna de fechas que comienza con una fecha de inicio especificada y continúa para el número especificado y el tipo de intervalos de fecha.
Para la entrada del calendario, devuelve una tabla que comienza con una fecha de inicio especificada y continúa para el número especificado y el tipo de intervalos de fecha. La tabla contiene todas las columnas etiquetadas principal y todas las columnas relacionadas con el tiempo.
Esta función es adecuada para pasar como filtro a la función CALCULATE. Úselo para filtrar una expresión por intervalos de fecha estándar, como días, meses, trimestres o años.
Sintaxis
DATESINPERIOD(<dates> or <calendar>, <start_date>, <number_of_intervals>, <interval>[, <endbehavior>])
Parámetros
| Término | Definición |
|---|---|
dates or calendar |
Columna que contiene fechas o una referencia de calendario |
start_date |
Expresión de fecha. Si se usa la sintaxis del calendario, use el mismo tipo de datos que la columna principal etiquetada en la categoría Día. |
number_of_intervals |
Entero que especifica el número de intervalos que se van a agregar o restar de las fechas. |
interval |
Intervalo por el que se van a desplazar las fechas. El valor de interval puede ser uno de los siguientes: DAY, WEEK, MONTH, QUARTERy YEAR. La semana solo se puede usar con el calendario. |
endbehavior |
Solo se aplica cuando se proporciona una referencia de calendario. Optional. Controla cómo se alinea la fecha de finalización cuando el intervalo de destino es mayor que el intervalo de origen. Los valores válidos son: PRECISE (valor predeterminado) y ENDALIGNED. |
Valor devuelto
Para la entrada de columna de fecha, una tabla que contiene una sola columna de valores de fecha.
Para la entrada del calendario, una tabla que contiene todas las columnas etiquetadas principal y todas las columnas relacionadas con el tiempo.
Observaciones
En el caso de uso más común,
dateses una referencia a la columna de fecha de una tabla de fechas marcada.Si el número especificado para
number_of_intervalses positivo, las fechas se mueven hacia delante en el tiempo; si el número es negativo, las fechas se desplazan hacia atrás en el tiempo.El parámetro
intervales una enumeración. Los valores válidos sonDAY,WEEK,MONTH,QUARTERyYEAR. Dado que es una enumeración, los valores no se pasan como cadenas. Así que no los incluya entre comillas.Cuando
endbehaviorse proporciona (solo inteligencia de tiempo del calendario), DATESINPERIOD reenvía el valor al DATEADDparámetro deExtension. Consulte Descripción de endbehavior para obtener ejemplos detallados.Para la entrada de columna de fecha, la tabla devuelta solo puede contener fechas almacenadas en la
datescolumna. Por ejemplo, si la columnadatescomienza desde el 1 de julio de 2017 y el valor destart_datees el 1 de julio de 2016, la tabla devuelta comenzará desde el 1 de julio de 2017.Para la entrada del calendario, si no se encuentra la fecha de entrada en la columna de día etiquetado, el resultado será indefinido. Proporcione una entrada de fecha válida.
Para la entrada del calendario, use el mismo tipo de datos y formato que la columna de día etiquetada para la fecha de inicio. Por ejemplo, si la columna usa el formato AAAA-Sn-Qn-Mnn-Wnn-Dnn (por ejemplo, "2014-S2-Q4-M11-W45-D03"), la fecha de inicio debe seguir el mismo formato (por ejemplo, "2015-S2-Q4-M11-W45-D03"). De lo contrario, el comportamiento no está definido.
Esta función no se admite para su uso en el modo DirectQuery cuando se usa en columnas calculadas o reglas de seguridad de nivel de fila (RLS).
Ejemplo
La siguiente definición de medida Sales tabla usa la función DATESINPERIOD para calcular los ingresos del año anterior (PY).
Observe que la fórmula usa la función MAX. Esta función devuelve la fecha más reciente que se encuentra en el contexto de filtro. Por lo tanto, la función DATESINPERIOD devuelve una tabla de fechas a partir de la fecha más reciente del año pasado.
Los ejemplos de este artículo se pueden usar con el modelo de Power BI Desktop de Adventure Works 2020 de ejemplo. Para obtener el modelo, consulte DAX modelo de ejemplo.
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -1, YEAR )
)
Tenga en cuenta que el informe se filtra por el mes de junio de 2020. La función MAX devuelve el 30 de junio de 2020. A continuación, la función DATESINPERIOD devuelve un intervalo de fechas comprendido entre el 1 de julio de 2019 y el 30 de junio de 2020. Es un año de valores de fecha a partir del 30 de junio de 2020 para el último año.
Ejemplo de inteligencia de tiempo basada en calendarios
La siguiente definición de medida Sales tabla usa la función DATESINPERIOD para calcular los ingresos del año anterior (PY).
Observe que la fórmula usa la función MAX. Esta función devuelve la fecha más reciente que se encuentra en el contexto de filtro. Por lo tanto, la DATESINPERIOD función devuelve las columnas principales a partir de la fecha más reciente del último año. DateKey se usa como ejemplo para mostrar que la categoría "Día" se puede etiquetar con una columna que no tiene tipo de fecha.
Los ejemplos de este artículo se pueden usar con el modelo de Power BI Desktop de Adventure Works 2020 de ejemplo. Para obtener el modelo, consulte DAX modelo de ejemplo.
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( FiscalCalendar, MAX ( 'Date'[DateKey] ), -1, YEAR )
)
Tenga en cuenta que el informe se filtra por el mes de junio de 2020. La función MAX devuelve el 30 de junio de 2020. A continuación, la DATESINPERIOD función devuelve un intervalo comprendido entre el 1 de julio de 2019 y el 30 de junio de 2020. Es un año a partir del 30 de junio de 2020 para el último año.
Descripción del parámetro endbehavior para la inteligencia de tiempo del calendario
Internamente, DATESINPERIOD calcula el límite final llamando DATEADD a con el mismo intervalo, número de intervalos y endbehavior que se pasaron a DATESINPERIOD. Cuando number_of_intervals es negativo (común al revertir una ventana), la función devuelve el intervalo (endDate, startDate], donde endDate es la fecha devuelta por DATEADD después de desplazar el contexto del calendario que finaliza startDate mediante <number_of_intervals><interval><endbehavior>. Para los valores positivos, el intervalo devuelto es [startDate, endDate).
-
PRECISEmantiene el valor exacto devuelto por DATEADD. -
ENDALIGNEDsigue la DATEADDEndAlignedsemántica, moviendo el límite al final del período de destino cuando la selección de origen ya alcanzó su propio final. Esto resulta útil cuando el contexto de filtro ya finaliza el último día de un período y desea que una ventana de aspecto hacia atrás (por ejemplo, seis meses) use el último día del período desplazado como límite.
Ejemplo con EndAligned
EndAlignedTest =
CALCULATE (
COUNTROWS ( SUMMARIZE ( Sales, 'Date'[MonthName] ) ),
DATESINPERIOD ( 'Gregorian Calendar', MAX ( 'Date'[Date] ), -6, MONTH, EndAligned )
)
Esta medida cuenta los nombres de mes distintos de los últimos seis meses en relación con el contexto actual. Con EndAligned, la ventana mantiene el límite al final del mes desplazado cuando el contexto ya termina en un límite de mes, lo que impide que las fechas finales adicionales que Precise incluyan (por ejemplo, Feb 28 cambiarían a Aug 28, al extraer Aug 29–31 y expandir eficazmente el intervalo a siete meses). La EndAligned configuración mantiene el recuento en seis en ese escenario.
En la siguiente comparación se supone que el contexto de filtro actual finaliza el 28 de febrero de 2023 y la expresión llama a DATESINPERIOD(..., -6, MONTH, <endbehavior>). El intervalo funcional es (endDate, startDate], por lo que el endDate devuelto por DATEADD se excluye mientras startDate se incluye.
| endbehavior |
DATEADD endDate |
DATESINPERIOD gama | Nombres de mes devueltos por la medida |
|---|---|---|---|
Precise |
2022-08-28 |
(2022-08-28, 2023-02-28] → 29 de agosto de 2022 : 28 de febrero de 2023 |
Ago, Sep, Oct, Nov, Dec, Jan, Feb (7) |
EndAligned |
2022-08-31 |
(2022-08-31, 2023-02-28] → 1 de septiembre de 2022 : 28 de febrero de 2023 |
Sep, Oct, Nov, Dec, Jan, Feb (6) |
Diferencias en el comportamiento entre la inteligencia de tiempo clásica y de calendario
Internamente, DATESINPERIOD usa la misma lógica que DATEADD para determinar la fecha de finalización de la fecha de inicio y, a continuación, calcula el intervalo. Algunos escenarios pueden producir resultados diferentes al comparar la inteligencia de tiempo clásica y del calendario. Por ejemplo, en un año lunar, DATEADD produce resultados diferentes en la granularidad de fecha, por lo que el resultado de DATESINPERIOD también será diferente. En la inteligencia de tiempo basada en el calendario, el cambio del 29 de febrero de 2008 a un año da como resultado el 1 de marzo de 2007, ya que se trata como el día 60 del año. En la inteligencia de tiempo clásica, el mismo turno devuelve el 28 de febrero de 2007. Dado que la fecha de finalización difiere, la salida de DATESINPERIOD también variará. La solución alternativa consiste en usar DATEADD(Calendario, -<número de un año>, mes) para calcular la fecha de finalización. Por ejemplo, si un año tiene 13 meses en el calendario, use DATEADD(Calendario, -13, mes). Este enfoque cambiará por mes para que febrero de 2008 vaya a febrero de 2007. A continuación, escriba una fecha personalizadaInPeriod basada en la nueva fecha de finalización.
Contenido relacionado
funciones de inteligencia de tiempo (DAX)funciones de fecha y hora (DAX)DATESBETWEEN (DAX)