Qlikview自动选择过去12个月

时间:2015-05-13 11:18:14

标签: date business-intelligence qlikview qliksense

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

图表的维度为chomp $port;

没有维度限制

有一个名为= [Pay Month Year last 12 months]的表达式,其定义为:

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

现在上面的字段是这样构建的:

[支付月份过去12个月]

[Pay Month Year last 12 months]
  

PayLoadOrder:

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

现在发生的事情是每个月到达终点,下个月需要手动添加并删除第一个月(例如在上面我会删除2014年5月的行,最后添加行君2015)

此外,如果有几个月定义没有数据,即您有2015年6月的硬编码和2015年5月的当月,那么2015年6月将显示2014年的数据,并且月份的顺序将变得混杂起来。

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

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

1 个答案:

答案 0 :(得分:1)

而不是使用&#34;排序顺序&#34;您可能需要手动更新的表,可能值得执行以下操作:

  • 创建一个从[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函数允许您将字段值的不同表示与其基础值相关联。例如,在这里我们将基础数据设置为[Pay Date]添加到月份的年份,但声明它应显示为MMM-yyyy。例如,在内部,QV仍然看到值201502,但显示为2015年2月。这意味着您可以根据其基础值对其进行正确排序。

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

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

  • 从脚本中删除表PayLoadOrder

替代方法

另一种方法是使用加入Pay Date字段的日历表。这将实现同样的目的,但是,您也可以整合您的&#34;年初至今&#34;指标也会进入日历并从主表中删除。我快速拼凑的一个例子如下所示:

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;

因此,在上文中,如果PaidInLast12MonthsFlag字段的值在过去12个月内发生,则字段-1等于[Pay Date],否则为0。您可以在set分析表达式中将其用作过滤器。此外,您可以使用PayMonthYear作为图表维度。