2012-06-12 5 views
7

Этот форум, похоже, больше ориентирован на большее количество проблем программирования, но мне было бы интересно, если кто-то посмотрит на логическую проблему в приведенной ниже ссылке. Моя проблема заключается в том, как рассчитать предыдущий 12-месячный итог с использованием уже определенного календаря. Я нашел очень мало примеров этого в сообществе QV. Для получения более подробной информации см. Приведенную ниже ссылку. Я бы хотел посмотреть на SQL или QV-скрипт.Qlikview Rolling 12 Month Fiscal

Наш финансовый год работает с ноября по октябрь. Я хотел бы, чтобы конечный пользователь выделил год и график, чтобы отобразить последний разворот на 12 месяцев. У меня были проблемы с тем, чтобы моя сумма накапливалась в течение предыдущих месяцев. Моя цель состояла бы в том, чтобы он выглядел так же, как столбец Rolling 12 Month Total - GP в образце «Цель» с ручным калибром Excel. (Посмотреть на QV ссылку на скриншот)

Роллинг Margin уравнение: моя попытка использовать Set Analysis, чтобы сделать прокатное Avg уравнения

=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: это использует master_date для подключения предметы вместе. Это финансовый календарь трудно положить вместе с качению 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> Это определяет наш финансовый год

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; 

Чтобы увидеть снимки экрана: http://community.qlikview.com/message/219912#219912

Благодарим Вас за время чтобы посмотреть на эту проблему.

+0

Я надеюсь, что это содержит достаточно информации/контекст –

+0

Кажется, что http://community.qlikview.com/message/219912#229267 содержит решение. – smartmeta

ответ

0

Решение отсутствует в календаре: вам необходимо создать сводную таблицу между вашим календарем и таблицей фактов.

В этом сводном столе у ​​вас есть 2 типа: ПРЯМОЙ И ПЕРЕСЕЧЕНИЕ.

Для типа DIRECT таблица фактических строк привязана к дате в календаре Для типа CROSSING таблица фактических строк привязана ко всем датам 12 будущих месяцев в календаре.

Итак, в Qlikview вы используете тип DIRECT все время, за исключением случаев, когда вы хотите представить за каждый месяц общую сумму за последние 12 месяцев. В этом случае вы используете CROSSING, потому что все строки привязаны к датам 12 будущих месяцев, поэтому это означает (обратная точка зрения), что месяц связан со всеми данными за последние 12 месяцев.

Примеры:

xlsx

QVW