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

Qlikview Automate past 12 months selection

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

图表的维度是= [Pay Month Year last 12 months]

没有维度限制

有 1 个表达式 Average 其定义是:

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])`

按表达式排序,即[Pay Month Year last 12 months]

现在上面的字段是这样建立起来的:

[最近 12 个月的工资月年]

If([Pay Date] >= '$(vPeriodS12)',[Pay Month year]) as [Pay Month Year last 12 months],

PayLoadOrder:

Load * Inline [Pay Month Year last 12 months
May-2014
Jun-2014
Jul-2014
Aug-2014
Sep-2014
Oct-2014
Nov-2014
Dec-2014
Jan-2015
Feb-2015
Mar-2015
Apr-2015
May-2015
];

现在发生的事情是每个月结束时,需要手动添加下个月并删除第一个月(例如,在上面我会删除行 May-2014 并在最后添加2015 年 6 月线)

此外,如果定义了尚无数据的月份,即您对 2015 年 6 月进行了硬编码,而当前月份为 2015 年 5 月,则 2015 年 6 月将显示 2014 年的数据,并且月份的顺序将搞混了。

我想做的是完全消除对上述几个月进行硬编码的需要,并自行完成。

如果您需要任何更多信息,请告诉我

与其使用您可能必须手动更新的 "sort order" table,不如执行以下操作:

  • 创建一个派生自 [Pay Date] 的新字段,returns 您可以对月份和年份进行排序。例如:

    dual(date(makedate(year([Pay Date]),num(month([Pay Date]))),'MMM-yyyy'),
    year([Pay Date]) * 100 + num(month([Pay Date]))) as PayMonthYear
    

    在这里,dual 函数允许您将字段值的不同表示与其基础值相关联。例如,这里我们设置基础数据为 [Pay Date] 的年份加上月份,但声明它应该显示为 MMM-yyyy。例如,在内部,QV 仍然看到值 201502,但将其显示为 Feb-2015。这意味着您可以根据其基础值对其进行正确排序。

    使用dual是一个很大的话题,请参考QV的内置帮助以获取更多信息。

  • 将图表维度从 [Pay Month Year last 12 months] 更改为使用 PayMonthYear 并将排序设置为升序。这意味着您的月份将被正确排序,即使添加了新的月份。

  • 从您的脚本中删除 table PayLoadOrder

替代方法

另一种方法是使用加入您的 Pay Date 字段的日历 table。这将实现相同的目的,但是,您也可以将 "year to date" 指标也集成到日历中,并将其从主 table 中删除。下面显示了我快速拼凑的一个示例:

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;

因此,在上面,如果 [Pay Date] 字段的值出现在最近 12 个月内,则字段 PaidInLast12MonthsFlag 等于 -1,否则 0 .您可以在集合分析表达式中将其用作过滤器。此外,您可以使用 PayMonthYear 作为图表维度。