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;