QlikView技术问题:如何在现有表达式中添加Date WHERE子句?
在QlikView表达式中添加日期筛选条件的方法
嘿,作为QlikView新手遇到这种问题太正常了!其实不用单独写WHERE子句,QlikView的集合分析语法里,直接在现有的筛选条件里追加日期规则就行——只需要在<>内部用逗号分隔多个筛选条件。
我给你分两种常见场景来演示修改方法:
1. 固定日期范围筛选
比如你想筛选2023年10月1日到10月31日的数据,只需要在每个集合分析的[SL Level]={'Test'}后面追加日期字段的筛选规则。注意要把[DateField]替换成你实际的日期字段名,同时根据你的日期格式调整Date#函数的参数:
=num( (SUM({$<[SL Level]={'Test'}, [DateField]={"=Date#([DateField], 'YYYY-MM-DD') >= Date#('2023-10-01', 'YYYY-MM-DD') and Date#([DateField], 'YYYY-MM-DD') <= Date#('2023-10-31', 'YYYY-MM-DD')"}>}acceptable) / ( SUM({$<[SL Level]={'Test'}, [DateField]={"=Date#([DateField], 'YYYY-MM-DD') >= Date#('2023-10-01', 'YYYY-MM-DD') and Date#([DateField], 'YYYY-MM-DD') <= Date#('2023-10-31', 'YYYY-MM-DD')"}>}callsoffered ) - SUM({$<[SL Level]={'Test'}, [DateField]={"=Date#([DateField], 'YYYY-MM-DD') >= Date#('2023-10-01', 'YYYY-MM-DD') and Date#([DateField], 'YYYY-MM-DD') <= Date#('2023-10-31', 'YYYY-MM-DD')"}>}outflowcalls) - SUM({$<[SL Level]={'Test'}, [DateField]={"=Date#([DateField], 'YYYY-MM-DD') >= Date#('2023-10-01', 'YYYY-MM-DD') and Date#([DateField], 'YYYY-MM-DD') <= Date#('2023-10-31', 'YYYY-MM-DD')"}>}dequecalls) - SUM({$<[SL Level]={'Test'}, [DateField]={"=Date#([DateField], 'YYYY-MM-DD') >= Date#('2023-10-01', 'YYYY-MM-DD') and Date#([DateField], 'YYYY-MM-DD') <= Date#('2023-10-31', 'YYYY-MM-DD')"}>}abncalls1) - SUM({$<[SL Level]={'Test'}, [DateField]={"=Date#([DateField], 'YYYY-MM-DD') >= Date#('2023-10-01', 'YYYY-MM-DD') and Date#([DateField], 'YYYY-MM-DD') <= Date#('2023-10-31', 'YYYY-MM-DD')"}>}abncalls2) - SUM({$<[SL Level]={'Test'}, [DateField]={"=Date#([DateField], 'YYYY-MM-DD') >= Date#('2023-10-01', 'YYYY-MM-DD') and Date#([DateField], 'YYYY-MM-DD') <= Date#('2023-10-31', 'YYYY-MM-DD')"}>}abncalls3) - SUM({$<[SL Level]={'Test'}, [DateField]={"=Date#([DateField], 'YYYY-MM-DD') >= Date#('2023-10-01', 'YYYY-MM-DD') and Date#([DateField], 'YYYY-MM-DD') <= Date#('2023-10-31', 'YYYY-MM-DD')"}>}abncalls4) ) ),'#.%')
小提示:
如果你的日期字段已经是QlikView能识别的标准日期格式,可以简化日期条件,比如:[DateField]>=#2023-10-01# and [DateField]<=#2023-10-31#
2. 动态日期范围筛选
比如想筛选最近7天(包含今天)的数据,日期条件可以改成动态计算的:
=num( (SUM({$<[SL Level]={'Test'}, [DateField]={"=Today() - [DateField] <= 6"}>}acceptable) / ( SUM({$<[SL Level]={'Test'}, [DateField]={"=Today() - [DateField] <= 6"}>}callsoffered ) - SUM({$<[SL Level]={'Test'}, [DateField]={"=Today() - [DateField] <= 6"}>}outflowcalls) - SUM({$<[SL Level]={'Test'}, [DateField]={"=Today() - [DateField] <= 6"}>}dequecalls) - SUM({$<[SL Level]={'Test'}, [DateField]={"=Today() - [DateField] <= 6"}>}abncalls1) - SUM({$<[SL Level]={'Test'}, [DateField]={"=Today() - [DateField] <= 6"}>}abncalls2) - SUM({$<[SL Level]={'Test'}, [DateField]={"=Today() - [DateField] <= 6"}>}abncalls3) - SUM({$<[SL Level]={'Test'}, [DateField]={"=Today() - [DateField] <= 6"}>}abncalls4) ) ),'#.%')
进阶优化:用变量简化重复代码
你会发现每个SUM里的筛选条件都一样,重复写很麻烦还容易出错。可以把筛选条件存成一个变量,这样表达式更简洁易维护:
// 先在变量编辑器里定义这个变量,或者直接写在表达式前面 Set vFilter = {$<[SL Level]={'Test'}, [DateField]={"=Date#([DateField], 'YYYY-MM-DD') >= Date#('2023-10-01', 'YYYY-MM-DD') and Date#([DateField], 'YYYY-MM-DD') <= Date#('2023-10-31', 'YYYY-MM-DD')"}>}; =num( (SUM($(vFilter)acceptable) / ( SUM($(vFilter)callsoffered ) - SUM($(vFilter)outflowcalls) - SUM($(vFilter)dequecalls) - SUM($(vFilter)abncalls1) - SUM($(vFilter)abncalls2) - SUM($(vFilter)abncalls3) - SUM($(vFilter)abncalls4) ) ),'#.%')
这样以后要修改筛选条件,只需要改变量里的内容就行啦!
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

