我有一个包含帐号和 3 个日期(气球、到期日和利率变化)的表格。我想对这些进行集中过滤,如果任何一个字段具有过滤后的处理日期之后 36 个月内的日期,则返回整行。使用相对日期仅返回适合未来 36 个月内所有 3 个日期的行。
我已经接近
filtcol =
if(not(isblank(ds[BalloonDate])),(datediff(ds[AsOfDate], ds[BalloonDate], month) <=36), blank())
||
if(not(isblank(ds[MaturityDate])),(datediff(ds[AsOfDate], ds[MaturityDate], month) <=36), blank())
||
if(not(isblank(ds[ChangeDate])),(datediff(ds[AsOfDate], ds[ChangeDate], month) <=36), blank())
这会正确地将日期在 36 个月内的行标记为 TRUE,将日期超出的行标记为 FALSE,但它也会将具有过去值的日期标记为 TRUE,这是什么原因?
DATEDIFF(D1, D2, X)
将返回负数。您需要检查是否在 0 到 36 之间。
使用
VAR
作为局部变量的示例,以及可能有助于提高可读性的 SWITCH
。
filtcol =
var diffBallon = DATEDIFF(ds[AsOfDate], ds[BalloonDate], MONTH)
var diffMaturity = DATEDIFF(ds[AsOfDate], ds[MaturityDate], MONTH)
var diffChange = DATEDIFF(ds[AsOfDate], ds[ChangeDate], MONTH)
return SWITCH( TRUE(),
0 <= diffBallon && diffBallon <= 36, TRUE(),
0 <= diffMaturity && diffMaturity <= 36, TRUE(),
0 <= diffChange && diffChange <= 36, TRUE(),
FALSE()
)