私のクエリの結果は、現在の月と合計金額から12ヶ月前に表示されるピボットテーブルです。月は動的なので、10月には表の最初の列が11月になり、最後の列は10月(現在の列)になります。動的にピボットテーブルからSSRSでTablixレポートを作成できますか?
どのように私は、この結果セットを使用して、簡単なTablixのか、行列を作成することができますか?私の主な関心事は、タブリックスで動的な月の名前を作る方法です。
これは可能ですか?
Iは1から12までの値として、列の名前を変更しかし、私は次のように10月あちこちに式を記述しようとすると:=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
OUTPUT:
ありがとうアンドリュー、私はそれをしましたが、まだ混乱しました。私は質問を更新しました。 – Oleg