DATESINPERIOD:计算过去某段时间的指标

在商业场景中,有时会需要计算过去某段时间的指标,以此来预测未来的情况。比如用过去三个月的销售均值预测未来一个月的销售额,用其和未来月份的目标值做对比。
那么怎么计算过去三个月的销售额呢?
我们可以用DATESINPERIOD函数,该函数返回指定时间段的时间值构成的单列的表,即该函数可以返回某个时间段的时间。其参数为:

DATESINPERIOD(<dates>,<start_date>,<number_of_intervals>,<interval>)

其中,各参数含义如下:

file

所以,如果我们需要从上月算起的过去三个月的时间段的话,公式可以这样写:

DATESINPERIOD('Calendar'[Date],EOMONTH(TODAY(),-1),-3,MONTH)

其中EOMONTH(TODAY(),-1)代表今天的日期向前推移一个月的月末日期。
所以,该公式中的起始时间为上月末,推移时间为往前推移3个月,返回这个时间段的日期。
因此,要想计算过去三个月的销售额,只需要外面嵌套上Calculate即可:

CALCULATE([销售额],
DATESINPERIOD('Calendar'[Date],EOMONTH(TODAY(),-1),-3,MONTH))

如果我们不希望以今天的日期为参考,而是希望过去的这个时间段随着年月切片器的变化而变化呢?
比如,当切片器选择2019年5月时,我们希望获取到2019年3月到2019年5月的数据呢?

`DATESINPERIOD` 是 Power BI 中 DAX(Data Analysis Expressions)语言提供的时间智能函数,用于在指定的日期列中筛选出一个连续的日期区间,该区间基于给定的起始日期并按照指定的时间周期(如天、月、季度、年)进行扩展。此函数常用于计算滚动周期内的指标,例如最近 7 天、过去 30 天、最近 1 个月等范围内的销售总额或平均值。 ### 基本语法 ```dax DATESINPERIOD(<dates>, <start_date>, <number_of_intervals>, <interval>) ``` - **`<dates>`**:包含日期的列,通常是一个日期表中的日期列。 - **`<start_date>`**:用于确定起始点的日期表达式,通常使用 `MAX()` 或 `MIN()` 函数结合当前上下文来指定。 - **`<number_of_intervals>`**:要向前或向后移动的周期数。负值表示往前,正值表示往后。 - **`<interval>`**:周期单位,支持以下值: - `DAY` - `MONTH` - `QUARTER` - `YEAR` ### 使用示例 #### 示例 1:计算最近 7 天的销售额总和 ```dax 最近7天销售额 = CALCULATE( SUM(Sales[Amount]), DATESINPERIOD( 'Date'[Date], MAX('Date'[Date]), -7, DAY ) ) ``` 此表达式计算当前上下文中最近 7 天(包括当天)的销售额总和。 #### 示例 2:计算过去一个月的平均销售额 ```dax 过去一个月平均销售额 = AVERAGEX( DATESINPERIOD( 'Date'[Date], MAX('Date'[Date]), -1, MONTH ), CALCULATE(SUM(Sales[Amount])) ) ``` 该示例使用 `AVERAGEX` 遍历过去一个月的每一天,并为每一天计算销售额,最后取平均值。 #### 示例 3:计算最近一年的销售总额 ```dax 最近一年销售额 = CALCULATE( SUM(Sales[Amount]), DATESINPERIOD( 'Date'[Date], MAX('Date'[Date]), -1, YEAR ) ) ``` 此度量值用于获取最近一年的销售总和。 ### 注意事项 - `DATESINPERIOD` 与 `DATEADD` 的区别在于其不依赖自然周期,而是基于固定周期进行计算。例如,`DATEADD` 在处理月份时会考虑自然月的变化,而 `DATESINPERIOD` 则会基于整数周期数进行推移。 - 使用该函数时,确保日期表是完整的,并且与事实表建立了正确的关系。 - 在使用 `MAX()` 或 `MIN()` 作为 `<start_date>` 参数时,应确保上下文中有有效的日期值,否则可能导致错误或空结果。 ### 与其他函数的比较 - **`DATESBETWEEN`**:允许指定起始和结束日期,适用于非对称区间。 - **`SAMEPERIODLASTYEAR`**:用于获取与当前周期对应的上一年同期数据。 - **`PARALLELPERIOD`**:用于获取与当前周期平行但偏移指定周期数的完整周期数据,适用于月、季度、年等周期单位。 `DATESINPERIOD` 特别适用于需要基于动态起始点构建连续周期区间的情境,如滚动平均、最近 N 天趋势分析等场景。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值