Qliksense日期比较错误

时间:2016-11-07 22:02:18

标签: qliksense

我试图检查一个日期是否大于另一个日期。这是我使用的公式:

=if(
Date(PYMT_DT, 'MM/dd/yyyy') >=  Date($(Var_StartDate), 'MM/dd/yyyy')
AND
Date(PYMT_DT, 'MM/dd/yyyy') <= Date($(Var_EndDate), 'MM/dd/yyyy')
,1,0)

PYMT_DT是我查询中的字段。 Var_StartDate和Var_EndDate是变量。

公式始终返回0.但是,如果我直接在公式中键入日期,它可以正常工作。

让我们使用这些值作为示例:

PYMT_DT = 10/21/2016
Var_StartDate = 10/20/2016
Var_EndDate = 10/30/2016

那应该给我1,但我得到0。但是,如果我用实际日期值替换PYMT_DT,我会得到正确的结果:

=if(
Date('10/21/2016', 'MM/dd/yyyy') >=  Date($(Var_StartDate), 'MM/dd/yyyy')
AND
Date('10/21/2016', 'MM/dd/yyyy') <= Date($(Var_EndDate), 'MM/dd/yyyy')
,1,0)

我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

第一点是格式,它需要是大写'MM/DD/YYYY'。第二点是您需要Date#函数将文本转换为日期(Date仅更改日期或数字的格式)。第三点是你的变量需要用'$(variable)'包裹,可以将变量的值解释为值,而不是变量。

对于变量,建议使用MakeDate创建一个日期。

下面的代码可以粘贴并运行

LET Var_StartDate = MakeDate(2016, 10, 20);
LET Var_EndDate = MakeDate(2016, 10, 30);

DATA:
LOAD 
    PYMT_DT,
    if(Date#(PYMT_DT, 'MM/DD/YYYY') >=  '$(Var_StartDate)' AND Date#(PYMT_DT, 'MM/DD/YYYY') <= '$(Var_EndDate)', 1, 0) as test
Inline [
    PYMT_DT
    10/19/2016
    10/21/2016
    11/01/2016];

enter image description here

答案 1 :(得分:0)

如果您的日期很可能包含时间成分,则还需要确保floor()进行比较,否则可能是时间问题。以及使用正确的格式等,这可能会导致:

=if(
floor(Date#(PYMT_DT, 'MM/DD/YYYY')) >= floor(Date#('$(Var_StartDate)', 'MM/DD/YYYY'))
AND
floor(Date#(PYMT_DT, 'MM/DD/YYYY')) <= floor(Date#('$(Var_EndDate)', 'MM/DD/YYYY'))
,1,0)