过滤空白日期值
有时数据是不完整的或可选的,因此 Analytics 表中的域可能包含空值或空白值。当 Analytics 中的表达式遇到一个空白日期值时,该空白日期会被视为最小系统日期值 1900-01-01。每当您编写比较日期的表达式时,您都必须考虑该行为。
销售订单表
您正在处理下面的销售订单表,并且您想要过滤它以便您可以分析所有在 2011 年之前提交的订单。如果某个记录没有订单日期,则它表示一个被取消的订单,并且您不希望将其包括在您的过滤记录中:
| 类别 | 订单日期 | 订单 ID | 数量 |
|---|---|---|---|
| 办公用品 | 3 | 6 | |
| 办公用品 | 293 | 49 | |
| 办公用品 | 07/23/2012 | 293 | 27 |
| 技术 | 10/15/2010 | 483 | 30 |
| 办公用品 | 08/28/2010 | 515 | 19 |
| 家具 | 08/28/2010 | 515 | 21 |
| 办公用品 | 06/17/2011 | 613 | 12 |
| 办公用品 | 06/17/2011 | 613 | 22 |
| 办公用品 | 03/24/2012 | 643 | 21 |
| 办公用品 | 02/26/2009 | 678 | 44 |
使用简单的过滤器
当您首次尝试过滤表时,您可以使用下面的简单表达式排除 2011 年及以后年份的任何订单:
提示
请注意围绕字面量日期值的反引号 `。您必须总是使用该限定符围绕字面量日期时间值。要了解更多信息,请参考数据类型。
COMMENT 过滤掉其订单日期为 2011 年 1 月 1 日及以后的记录
SET FILTER TO Order_Date < `20110101`
第一个过滤器结果
因为 Analytics 将空白日期值视为 1900-01-01,而 1900 年 1 月 1 日早于 2011 年 1 月 1 日,所以您的结果包括具有您想要排除的空白 Order_Date 值的记录:
| 类别 | 订单日期 | 订单 ID | 数量 |
|---|---|---|---|
| 办公用品 | 3 | 6 | |
| 办公用品 | 293 | 49 | |
| 技术 | 10/15/2010 | 483 | 30 |
| 办公用品 | 08/28/2010 | 515 | 19 |
| 家具 | 08/28/2010 | 515 | 21 |
| 办公用品 | 02/26/2009 | 678 | 44 |
在过滤期间检查是否存在空白域
使用函数,您可以在过滤掉 2011 年及以后年份的记录之前排除空白日期值。
如果文本值为空,则 ISBLANK( ) 函数返回真,因此,通过对 Order_Date 域进行某些操作,您可以排除空白值:
COMMENT 排除 2011 年及以后年度的空白日期和订单日期
SET FILTER TO NOT ISBLANK(DATETIME(Order_Date)) AND Order_Date < `20110101`
当该表达式求值时,函数由内而外运行,并且会发生几件事情:
- DATETIME( ) 函数将 Order_Date 日期值转换为文本值(`20100828` 变成 "20100828")。
- ISBLANK( ) 函数检查文本值是否为空,其求值结果为真或假。
- NOT 运算符翻转从 ISBLANK( ) 返回的逻辑值,以便:
- 如果 Order_Date 为空(真),则该值被翻转为假,并且过滤器会排除记录
- 如果 Order_Date 不为空(假),则该值被翻转为真,并且过滤器检查该日期是否早于 2011 年,并且包括所有其 Order_Date 值早于 2011 年 1 月 1 日的记录
提示
只有其子表达式在 AND 运算符的两侧的求值结果都为真的记录才会被包括在内。如果任一子表达式等于假,则该记录被排除。
第二个过滤器结果
第二个过滤器首先排除空白日期值,然后再测试订单是否是在 2011 年之前下的,因此结果不包括被第一个过滤器所包括的已取消订单。
| 类别 | 订单日期 | 订单 ID | 数量 |
|---|---|---|---|
| 技术 | 10/15/2010 | 483 | 30 |
| 办公用品 | 08/28/2010 | 515 | 19 |
| 家具 | 08/28/2010 | 515 | 21 |
| 办公用品 | 02/26/2009 | 678 | 44 |