내 쿼리의 결과는 현재 월 및 총 금액에서 12 개월 전에 표시되는 피벗 테이블입니다. 달은 동적이므로 10 월에 표의 첫 번째 열은 11 월이고 마지막 열은 10 월이됩니다 (현재 열).동적 피벗 테이블에서 SSRS의 테이블 릭스 보고서를 만들 수 있습니까?
어떻게 설정 간단한 테이블 릭스 또는이 결과를 이용하여 매트릭스를 만들 수 있습니까? 주요 관심사는 테이블 릭스에서 동적 인 월 이름을 만드는 방법입니다.
그게 가능합니까?
나는 10 월 같은 이리저리 식을 작성하려고 값을 1에서 12 그러나 때와 같이 내가 열 이름을 변경 : =Month(Today()) - CInt(Fields!ID10.Value)
의 단지 나에게주는 현재 월 번호. 내가 무엇이 누락 되었습니까?
UPDATE : 테이블 달력에서 데이터는 다음과 같이 구성 :
DECLARE @CurrentMonth DATE = DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101');
--print @CurrentMonth
SELECT
M_00 = COUNT(CASE WHEN DATEDIFF(MONTH, fom.FirstOfMonth, @CurrentMonth) = 0 THEN 1 END),
M_01 = COUNT(CASE WHEN DATEDIFF(MONTH, fom.FirstOfMonth, @CurrentMonth) = 1 THEN 1 END),
M_02 = COUNT(CASE WHEN DATEDIFF(MONTH, fom.FirstOfMonth, @CurrentMonth) = 2 THEN 1 END),
M_03 = COUNT(CASE WHEN DATEDIFF(MONTH, fom.FirstOfMonth, @CurrentMonth) = 3 THEN 1 END),
M_04 = COUNT(CASE WHEN DATEDIFF(MONTH, fom.FirstOfMonth, @CurrentMonth) = 4 THEN 1 END),
M_05 = COUNT(CASE WHEN DATEDIFF(MONTH, fom.FirstOfMonth, @CurrentMonth) = 5 THEN 1 END),
M_06 = COUNT(CASE WHEN DATEDIFF(MONTH, fom.FirstOfMonth, @CurrentMonth) = 6 THEN 1 END),
M_07 = COUNT(CASE WHEN DATEDIFF(MONTH, fom.FirstOfMonth, @CurrentMonth) = 7 THEN 1 END),
M_08 = COUNT(CASE WHEN DATEDIFF(MONTH, fom.FirstOfMonth, @CurrentMonth) = 8 THEN 1 END),
M_09 = COUNT(CASE WHEN DATEDIFF(MONTH, fom.FirstOfMonth, @CurrentMonth) = 9 THEN 1 END),
M_10 = COUNT(CASE WHEN DATEDIFF(MONTH, fom.FirstOfMonth, @CurrentMonth) = 10 THEN 1 END),
M_11 = COUNT(CASE WHEN DATEDIFF(MONTH, fom.FirstOfMonth, @CurrentMonth) = 11 THEN 1 END)
FROM
dbo.tblCalendar c
/* changed "YearNum, MonthNum" instead of "(YEAR(c.dt), MONTH(c.dt)" */
CROSS APPLY (VALUES (DATEFROMPARTS(YearNum, MonthNum, 1))) fom (FirstOfMonth)
WHERE
/* changed c.MonthNum instead of c.dt */
c.MonthNum >= MONTH(DATEADD(MONTH, -11, @CurrentMonth))
/* changed c.MonthNum instead of c.dt */
AND c.MonthNum < MONTH(DATEADD(MONTH, 1, @CurrentMonth));
가 올바른지인가요 :
그래서 내가 쿼리를 수정?죄송합니다. 여기 혼란스러워합니다. 동적 SQL을 전혀 사용하지 않는 것이 좋습니다. 은 내 쿼리를 사용
;WITH cte_TopClasses
AS (
SELECT
c.YearNum,
c.MonthNum,
DD.ClassCode,
ISNULL(SUM(prm.Premium),0) as NetWrittenPremium
FROM tblCalendar c
LEFT JOIN ProductionReportMetrics prm ON c.YearNum = YEAR(prm.EffectiveDate) and c.MonthNum = MONTH(prm.EffectiveDate)
AND CompanyGUID = '18E04C99-D796-4CFA-B1E7-28328321C8AD'
LEFT JOIN [dbo].[Dynamic_Data_GLUnitedSpecialty] DD on prm.QuoteGUID = DD.QuoteGuid
WHERE (c.YearNum = YEAR(GETDATE())-1 and c.MonthNum >= MONTH(GETDATE())+1) OR
(c.YearNum = YEAR(GETDATE()) and c.MonthNum <= MONTH(GETDATE()))
GROUP BY c.YearNum,
c.MonthNum,
DD.ClassCode
)
select * from cte_TopClasses
출력 :
감사합니다. Andrew, 저도 그랬지만 여전히 혼란 스러웠습니다. 나는 질문을 업데이트했다. – Oleg