如果数据具有层次结构,如何设计SSRS报表和SQL Server表?

问题描述 投票:0回答:1

我必须设计表和包含以下格式数据的SSRS报告。

请点击下面的URL下载Excel表格here

下载文件后,请查看包含RAW数据的标签。它列出了所有具有滚动总和的数字(即状态“ A-F”,“ G-N”和“ O-Z”),月份由列分隔。

这里的问题是该月份应根据当前月份动态生成。因此,现在报表显示了9月的数据,但是我不确定如何在数据库中存储未来月份的值以及如何在报表中显示所有月份的数据。

应该创建所有未来月份的表格,还是应该动态提及“月份”列?

请注意,美国的州和结转公式保持不变,我能够编写查询以生成州值。

我已经想到的数据库结构(和报告结构)在“示例报告”选项卡中可见

sql sql-server reporting-services ssrs-2008 ssrs-2012
1个回答
0
投票

我只是尝试您尝试做的事情。我认为您需要使用以下数据集在SSRS中创建列分组。.>

CREATE TABLE #TEMP_RAW_DATA
(
    N_id NUMERIC(18,0) IDENTITY(1,1),
    VC_Country VARCHAR(30),
    VC_States VARCHAR(50),
    D_Date DATE,
    I_Values INT
)

INSERT INTO #TEMP_RAW_DATA
(
    VC_Country,VC_States,D_Date,I_Values
)
SELECT 'USA','Alabama','09-01-2019',57 UNION ALL
SELECT 'USA','Alabama','10-01-2019',47 UNION ALL
SELECT 'USA','Alabama','11-01-2019',69 UNION ALL
SELECT 'USA','Alabama','12-01-2019',1 UNION ALL
SELECT 'USA','Alabama','01-01-2020',42 UNION ALL
SELECT 'USA','Hawaii','09-01-2019',80 UNION ALL
SELECT 'USA','Hawaii','10-01-2019',55 UNION ALL
SELECT 'USA','Hawaii','11-01-2019',19 UNION ALL
SELECT 'USA','Hawaii','12-01-2019',73 UNION ALL
SELECT 'USA','Hawaii','01-01-2020',76 UNION ALL
SELECT 'USA','Massachusetts','09-01-2019',20 UNION ALL
SELECT 'USA','Massachusetts','10-01-2019',74 UNION ALL
SELECT 'USA','Massachusetts','11-01-2019',30 UNION ALL
SELECT 'USA','Massachusetts','12-01-2019',36 UNION ALL
SELECT 'USA','Massachusetts','01-01-2020',53 UNION ALL
SELECT 'USA','Pennsylvania','09-01-2019',53 UNION ALL
SELECT 'USA','Pennsylvania','10-01-2019',17 UNION ALL
SELECT 'USA','Pennsylvania','11-01-2019',1 UNION ALL
SELECT 'USA','Pennsylvania','12-01-2019',13 UNION ALL
SELECT 'USA','Pennsylvania','01-01-2020',42 UNION ALL
SELECT 'USA','Virginia','09-01-2019',26 UNION ALL
SELECT 'USA','Virginia','10-01-2019',24 UNION ALL
SELECT 'USA','Virginia','11-01-2019',29 UNION ALL
SELECT 'USA','Virginia','12-01-2019',79 UNION ALL
SELECT 'USA','Virginia','01-01-2020',73

SELECT VC_Country,VC_States,DATENAME(MONTH,D_Date) VC_Month,
CASE 
    WHEN PATINDEX('[a-f]%',VC_States)>0 THEN 'A-F'
    WHEN PATINDEX('[g-n]%',VC_States)>0 THEN 'G-N'
    WHEN PATINDEX('[o-z]%',VC_States)>0 THEN 'O-Z'
END VC_Group,
SUM(I_Values) I_Values
FROM #TEMP_RAW_DATA
GROUP BY VC_Country,VC_States,
CASE 
    WHEN PATINDEX('[a-f]%',VC_States)>0 THEN 'A-F'
    WHEN PATINDEX('[g-n]%',VC_States)>0 THEN 'G-N'
    WHEN PATINDEX('[o-z]%',VC_States)>0 THEN 'O-Z'
END,DATENAME(MONTH,D_Date)
© www.soinside.com 2019 - 2024. All rights reserved.