Date Qlikview自动化过去12个月的选择

Date Qlikview自动化过去12个月的选择,date,business-intelligence,qlikview,qliksense,Date,Business Intelligence,Qlikview,Qliksense,我有一个组合图,显示了一个人支付账单的平均天数 图表的维度为=[上一个12个月的薪资月数] 没有尺寸限制 有1个表达式称为平均值,其定义为: avg({< InvoicefromSqlType = {'Invoices'},[Is Invoice Paid] = {'Y'},[Is Positive Amount] = {'Y'},[Is Paid last 12 months] = {'Y'},DueGroups=,[Pay Month Year last 12 months]=>

我有一个组合图,显示了一个人支付账单的平均天数

图表的维度为
=[上一个12个月的薪资月数]

没有尺寸限制

有1个表达式称为
平均值
,其定义为:

avg({< InvoicefromSqlType = {'Invoices'},[Is Invoice Paid] = {'Y'},[Is Positive Amount] = {'Y'},[Is Paid last 12 months] = {'Y'},DueGroups=,[Pay Month Year last 12 months]=>}[Days to Pay])`
付费订单:

现在发生的情况是每个月结束时,需要手动添加下一个月,删除第一个月(例如,在上面我将删除行May-2014,并在结束时添加行Jun-2015)

此外,如果已定义的月份尚未有数据,即您已对2015年6月进行硬编码,而当前月份为2015年5月,则2015年6月将显示2014年的数据,月份顺序将混淆

我想做的是完全消除对上面几个月硬编码的需要,让它自己完成

如果您需要更多信息,请告诉我,而不是使用您可能需要手动更新的“排序顺序”表,您可能需要执行以下操作:

  • 创建从
    [Pay Date]
    派生的新字段,该字段返回可以排序的月份和年份。例如:

    dual(date(makedate(year([Pay Date]),num(month([Pay Date]))),'MMM-yyyy'),
    year([Pay Date]) * 100 + num(month([Pay Date]))) as PayMonthYear
    
    这里,
    dual
    函数允许您将字段值的不同表示形式与其基础值相关联。例如,这里我们将基础数据设置为添加到月份中的
    [支付日期]
    年份,但声明它应显示为
    MMM-yyyy
    。例如,在内部,QV仍然看到值201502,但显示为2015年2月。这意味着您可以根据其基础值对其进行正确排序

    使用
    dual
    是一个重要主题,有关更多信息,请参阅QV的内置帮助

  • 将图表维度从
    [最近12个月的付款月份年份]
    更改为使用
    PayMonthYear
    ,并将排序设置为升序。这意味着您的月份将被正确排序,即使添加了新的月份

  • 从脚本中删除表
    PayLoadOrder

替代方法

另一种方法是使用一个日历表,该表连接到您的
支付日期
字段。这将实现同样的效果,但是,您也可以将“年初至今”指标集成到日历中,并将其从主表中删除。下面是我快速组合的一个示例:

MinMax:
LOAD 
   Max([Pay Date]) AS MaxDate,
   Min([Pay Date]) AS MinDate
RESIDENT MyData;

LET varMinDate = Num(Peek('MinDate',0,'MinMax'));      // 0 is first record
LET varMaxDate = Num(Peek('MaxDate',-1,'MinMax'));      // -1 is last record
LET varToday = Num(Today());

MasterCalendar:
LOAD
    monthstart([Pay Date]) >= monthstart(AddMonths(Today(),-12)) as PaidInLast12MonthsFlag,
    dual(date(makedate(year([Pay Date]),num(month([Pay Date]))),'MMM-yyyy'),year([Pay Date]) * 100 + num(month([Pay Date]))) as PayMonthYear
    [Pay Date];
LOAD
   date($(varMinDate) + RecNo() - 1,'DD/MM/YYYY') as [Pay Date]
AUTOGENERATE num($(varMaxDate)) - num($(varMinDate)) + 1;

DROP TABLE MinMax;
因此,在上述情况下,如果
[支付日期]
字段的值发生在过去12个月内,则
字段paidinast12个月的滞后时间等于
-1
,否则为
0
。可以在集合分析表达式中将其用作过滤器。此外,您可以使用
PayMonthYear
作为图表维度

dual(date(makedate(year([Pay Date]),num(month([Pay Date]))),'MMM-yyyy'),
year([Pay Date]) * 100 + num(month([Pay Date]))) as PayMonthYear
MinMax:
LOAD 
   Max([Pay Date]) AS MaxDate,
   Min([Pay Date]) AS MinDate
RESIDENT MyData;

LET varMinDate = Num(Peek('MinDate',0,'MinMax'));      // 0 is first record
LET varMaxDate = Num(Peek('MaxDate',-1,'MinMax'));      // -1 is last record
LET varToday = Num(Today());

MasterCalendar:
LOAD
    monthstart([Pay Date]) >= monthstart(AddMonths(Today(),-12)) as PaidInLast12MonthsFlag,
    dual(date(makedate(year([Pay Date]),num(month([Pay Date]))),'MMM-yyyy'),year([Pay Date]) * 100 + num(month([Pay Date]))) as PayMonthYear
    [Pay Date];
LOAD
   date($(varMinDate) + RecNo() - 1,'DD/MM/YYYY') as [Pay Date]
AUTOGENERATE num($(varMaxDate)) - num($(varMinDate)) + 1;

DROP TABLE MinMax;