2015-05-13 43 views
1

我有一個組合圖表,顯示了人們支付帳單所花費的平均天數。Qlikview過去12個月的自動化選擇

圖表的尺寸= [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]

現在上面的字段是這樣構建的:

[PAY月年過去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 
]; 

現在正在發生的事情是每個月當它到達終點,接下來的一個月需要手動添加並刪除第一個月(例如,在上面我會刪除該行2014年5月,並在最後添加行2015年6月)

此外,如果有幾個月定義,目前還沒有數據,即你有Jun-2015硬編碼和當前在2015年5月到2015年6月,將顯示2014年的數據,並且月份的順序會混合起來。

我想要做的是徹底刪除上面幾個月的硬編碼需求,並完成它自己。

如果有任何你需要讓更多的信息,我知道

回答

1

而不是使用您可能需要手動更新「排序順序」表的,它可能是值得做以下幾點:

  • 創建一個從[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領域的日曆表。這可以達到同樣的效果,但是,您也可以將「年迄今」指標集成到日曆中,並將其從主表中移除。我迅速一起扔一個示例如下所示:

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等於-1如果[Pay Date]字段的值在過去12個月時,0否則。您可以在設置的分析表達式中將其用作過濾器。此外,您可以使用PayMonthYear作爲圖表維度。

+0

這完美的作品! (我用第一種方法) – Matt