2012-06-12 25 views
7

To forum wydaje się być bardziej nastawione na więcej problemów programistycznych, ale byłbym zainteresowany, gdyby ktoś spojrzał na problem logiczny w linku poniżej. Mój problem polega na tym, jak obliczyć sumę poprzednich 12 miesięcy przy użyciu kalendarza już zdefiniowanego. Znalazłem bardzo nieliczne tego przykłady w społeczności QV. Zobacz poniższy link, aby uzyskać więcej informacji. Byłbym skłonny spojrzeć na rozwiązanie skryptowe SQL lub QV.Qlikview Rolling 12 Month Fiscal

Nasz rok podatkowy trwa od listopada do października. Chciałbym, aby użytkownik końcowy wybrał rok i wykres, aby wyświetlić ostatni dwunastomiesięczny marżę w trakcie przewalutowania. Mam problemy z gromadzeniem mojej sumy za poprzednie miesiące. Moim celem byłoby, gdyby wyglądał podobnie do kolumny Rolling 12 Month Total - GP w ręcznie spreparowanym obrazie Excela "Cel". (Spójrz na odnośnik QV na zrzucie)

Rolling Margin równanie: moja próba wykorzystania analizowanej aby kroczącego AVG równanie

=Sum({<master_date={'>=$(=MonthStart(Max(master_date), -12))<=$(=MonthEnd(Max(master_date)))'}>} 

MasterCalendar

TempCalendar: 
LOAD 
$(vDateMin) + RowNo() - 1 AS DateNumber, 
Date($(vDateMin) + RowNo() - 1) AS TempDate 
AUTOGENERATE 1 
WHILE $(vDateMin)+IterNo()-1<= $(vDateMax); 

MasterCalendar: ten wykorzystuje master_date podłączenia elementy razem. Ten kalendarz fiskalny są trudne do ułożyła z toczenia AVG

LOAD 
TempDate AS master_date, 
Day(TempDate) AS CalendarDay, 
     WeekDay(TempDate) AS CalendarWeekDay, 
     Week(TempDate) AS CalendarWeek, 
     Month(TempDate) AS CalendarMonth, 
     Year(TempDate) AS CalendarYear, 
     'Q' & Ceil(Month(TempDate)/3) AS CalendarQuarter, 
     WeekDay(TempDate) & '-' & Year(TempDate) AS CalendarWeekAndYear, 
     Month(TempDate) & '-' & Year(TempDate) AS CalendarMonthAndYear, 
     If(Num(TempDate) >= $(vYearStart) AND Num(TempDate) < $(vMonthNow), -1, 0) AS YTD, 
     If(Num(TempDate) >= $(vYearStartLY) AND Num(TempDate) < $(vMonthNowLY), -1, 0) AS LY_YTD, 
     Year2Date(TempDate) * -1 AS YTD_Flag, 
     Year2Date(TempDate,-1, 1, $(vToday))*-1 AS LY_YTD_Flag 
RESIDENT TempCalendar ORDER BY TempDate ASC; 

DROP TABLE TempCalendar; 

FiscalCalander> To definiuje nasz rok fiskalny

FiscalCalendar: 
LOAD date(date#(20011101,'YYYYMMDD')+recno(),'MM/DD/YY') AS "master_date" 
AUTOGENERATE today()-date#(20011101,'YYYYMMDD'); 
LEFT JOIN (FiscalCalendar) 
LOAD 
"master_date", 
date(monthstart(master_date),'MMM YY') AS "MonthFisical", 
date(monthstart(master_date),'MMM') AS "MonthFisical_MonthTitle", 
date(yearstart(master_date,1,11),'YYYY') AS "YearFiscal", 
month(master_date)-month(num(today(1))) AS FiscalMonthsElapsed, 
YearToDate(master_date, 0,11)*-1 AS YTD_FLAG_Fiscal, 
YearToDate(master_date,-1,11)*-1 AS LY_YTD_FLAG_Fiscal 
RESIDENT FiscalCalendar; 

Aby zobaczyć zrzuty ekranu: http://community.qlikview.com/message/219912#219912

Dziękujemy za poświęcenie czasu aby spojrzeć na ten problem.

+0

Mam nadzieję, że zawiera wystarczającą ilość informacji/kontekst –

+0

Wydaje się, że http://community.qlikview.com/message/219912#229267 zawiera roztwór. – smartmeta

Odpowiedz

0

Rozwiązania nie ma w kalendarzu: musisz utworzyć tabelę przestawną między kalendarzem a tabelą faktów.

W tym stole przestawnym masz 2 rodzaje: BEZPOŚREDNIE i PRZEKRACZANIE.

W przypadku typu DIRECT tabela wiersza faktów jest powiązana z datą w kalendarzu W przypadku typu PRZEKRÓJ, tabela wiersza w rzeczywistości jest powiązana ze wszystkimi datami 12 przyszłych miesięcy w kalendarzu.

W aplikacji Qlikview cały czas korzystasz z typu BEZPOŚREDNI, chyba że chcesz przedstawić dla każdego miesiąca sumę z ostatnich 12 miesięcy. W tym przypadku używasz CROSSING, ponieważ wszystkie wiersze są powiązane z datami 12 przyszłych miesięcy, więc oznacza to (odwrócony punkt widzenia), że miesiąc jest powiązany ze wszystkimi danymi z ostatnich 12 miesięcy.

Przykłady:

xlsx

QVW