You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:32:38