2012-06-12 30 views
7

Diễn đàn này dường như được hướng đến nhiều vấn đề lập trình hơn nhưng tôi sẽ quan tâm nếu có ai đó xem xét vấn đề logic trong liên kết dưới đây. Vấn đề của tôi là làm thế nào để tính toán tổng số 12 tháng trước đó bằng cách sử dụng lịch đã được xác định. Tôi đã tìm thấy rất ít ví dụ về điều này trên cộng đồng QV. Vui lòng xem liên kết dưới đây để biết thêm chi tiết. Tôi sẽ sẵn sàng xem xét một giải pháp SQL hoặc một kịch bản QV.Qlikview Rolling 12 Tháng Fiscal

Năm tài chính của chúng tôi kéo dài từ tháng 11 đến tháng 10. Tôi muốn người dùng cuối chọn Năm và biểu đồ để hiển thị lề 12 tháng cuối cùng. Tôi đã gặp vấn đề khi tổng số tiền của tôi tích luỹ trong những tháng trước. Mục tiêu của tôi sẽ cho nó trông giống như cột Rolling 12 Month Total - GP trong hình ảnh Excel được tính toán thủ công 'Mục tiêu'. (Nhìn vào liên kết QV cho ảnh chụp màn hình)

cán Margin phương trình: nỗ lực của tôi để sử dụng Set Analysis để thực hiện một phương trình trung bình cán

=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: này sử dụng master_date để kết nối các mục với nhau. Đây là một lịch tài chính khó có thể đặt cùng với cán 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> Điều này xác định năm tài chính của chúng tôi

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; 

Để xem ảnh chụp màn hình: http://community.qlikview.com/message/219912#219912

Cảm ơn bạn đã dành thời gian để xem xét vấn đề này.

+0

Tôi hy vọng điều này có chứa đầy đủ thông tin/bối cảnh –

+0

Có vẻ rằng http://community.qlikview.com/message/219912#229267 chứa một giải pháp. – smartmeta

Trả lời

0

Giải pháp không có trong lịch: bạn phải tạo bảng tổng hợp giữa lịch của bạn và bảng thực tế.

Trong bảng tổng hợp này, bạn có 2 loại: TRỰC TIẾP và CHÉO.

Đối với loại DIRECT, một hàng trong bảng thực tế được liên kết với ngày trong lịch Đối với loại CROSSING, một hàng trong bảng thực tế được liên kết với tất cả các ngày trong 12 tháng trong tương lai.

Vì vậy, trong Qlikview, bạn sử dụng loại DIRECT mọi lúc, trừ khi bạn muốn trình bày cho mỗi tháng tổng cộng trong 12 tháng qua. Trong trường hợp này, bạn sử dụng CROSSING vì tất cả các hàng được liên kết với các ngày trong 12 tháng trong tương lai, vì vậy nó có nghĩa là (một điểm bị đảo ngược) mà một tháng được liên kết với tất cả dữ liệu trong 12 tháng qua.

Ví dụ:

xlsx

QVW