SSRS报告中的空数据

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

我正在研究ssrs报道。我能够看到我的存储过程的数据或结果。不幸的是,当我使用与我的数据集相同的报告我无法看到数据而不是我得到0记录。可能是什么原因?我的报告结构将如下图所示:My ssrs design

我目前的结果:Current result

以下是我的程序:

 ALTER Proc [dbo].[SP_Get_CIPPSubjectMarks_New_HTSTEST] - 
 -7,'1,17,8','2537,2555,2558,2568'
(

@ReportId int=7,
@SubjectId varchar(200),
@SectionId varchar(200)
)
AS
BEGIN
Create table #temp (Name Varchar(500),Class varchar(50),Section 
Varchar(20),enrollno varchar(500),SubjectName varchar(500),TermName 
varchar(500),TestName varchar(500),TestGroupName varchar(500),Weightage 
int,IsWeight bit,Marks varchar(20),MaxMarks int,IsAbsent bit,SubjectOrder 
Varchar(200))
Insert into 
#temp(Name,Class,Section,enrollNo,SubjectName,
TermName,TestName,TestGroupName,Weightage,IsWeight,Marks,
MaxMarks,IsAbsent,SubjectOrder)
SELECT DISTINCT CONCAT(d.name,' ',d.surname),cls.Value,sec.Value, 
e.enroll_no,
CASE WHEN ISNULL(cxs.subject_alias,'')='' THEN CASE WHEN rtv.value='Second 
Language' then '2ND LANGUAGE:' + b.Name WHEN 
rtv.value='Third Language' THEN '3rd Language:'+b.name else b.name end 
ELSE cxs.subject_alias end  as SubjectName,
z.str_termname,c.str_termtestname,i.str_testgroupname,
i.str_testweightage,i.is_weighted_average,a.marks,max_marks,a.is_absent,
CASE WHEN  rtv.value='Second Language' THEN 'Second Language' WHEN 
rtv.Value='Third Language' THEN 'Third Language' When 
ISNULL(cxs.subject_alias,'')='' THEN b.Name 
ELSE cxs.subject_alias end as SubOrder
FROM marks_entry_HTS a JOIN subject b ON a.fk_subject_id=b.Id and a.marks 
is not null
LEFT JOIN subjectCategory_HTS l ON l.Id= b.subject_categoryID
JOIN class_term_test_mapping_HTS c ON a.fk_class_term_test_mapping_id=c.id
-- added by me
JOIN class_term_test_category_HTS ctc on c.fk_termcategoryid = ctc.id
JOIN reference_type_value rtv ON rtv.id=a.fk_subject_type_id
-- close
JOIN Term_Test_Subject_AssessmentType_HTS m ON m.fk_term_testID=c.id and 
m.fk_SubjectID=b.Id
JOIN class_report_types_mapping_test_HTS k ON 
k.fk_class_term_test_mapping_id=c.Id
JOIN class_term_mapping_HTS z ON z.id=k.fk_class_term_mapping_id
JOIN Term_Test_Testgroup_aggregate_HTS i ON 
i.Id=c.fk_testgroup_aggregateID
JOIN TestGroup_HTS j on j.Id=i.fk_TestGroupID
JOIN student d ON a.fk_student_id=d.Id JOIN student_enroll_no e ON   
e.fk_student_id=d.id and IsNULL(e.is_deleted,0)=0
JOIN student_academic f on f.fk_student_enroll_no_id=e.id and 
f.fk_academic_year_id=c.fk_academic_year_id
JOIN reference_type_value cls on cls.Id=f.fk_class_id
LEFT JOIN reference_type_value sec ON sec.Id=f.fk_section_id
LEFT JOIN max_marks_entry_HTS h on h.id=a.fk_max_marks_entry_id
join class_xref_subjects cxs ON h.fk_subject_id=cxs.fk_subject_id and      
cxs.fk_subject_type_id=h.fk_subject_type_id  and  
IsNull(cxs.is_deleted,0)=0 
and  cxs.fk_class_id=h.fk_class_id and 
cxs.fk_academic_year_campus_id=h.fk_academic_year_campus_id and 
cxs.fk_curriculum_segment_id=h.fk_curriculum_segment_id
where k.fk_class_report_types_mapping_id=@ReportId
and h.fk_section_id in (select * from SplitStringByChar(@SectionId,','))
and a.fk_subject_id in (select * from SplitStringByChar(@SubjectId,','))

select Name,Class,Section,enrollNo,SubjectName,TermName,
TestGroupName as TestName,
Case WHEN IsWeight=1 THEN Round(Cast(((avg(CAST(Marks as 
 float)/cast(MaxMarks as float)))*Weightage) as decimal(10,0)),0)
 else Round(Cast(((cast(max(Marks) as float)/cast(max(MaxMarks) as 
 float))*Weightage) as decimal(10,0)),0) ENd as Marks ,
SubjectOrder ,sum(maxmarks) as maxmarksare INTO #temp1 from #temp 
GROUP BY Name,Class,Section,enrollNo,SubjectName,
TermName,SubjectOrder,IsWeight,Weightage,TestGroupName

Insert into #temp 
 (Name,Class,Section,enrollNo,SubjectName,
TermName,TestName,Marks,SubjectOrder)
select
 Name,Class,Section,enrollNo,SubjectName,TermName,'Total',
SUM(Marks),SubjectOrder from #temp1 
GROUP BY Name,Class,Section,enrollNo,SubjectName,TermName,SubjectOrder

Insert into #temp 
(Name,Class,SubjectName,Section,enrollNo,TermName,TestName,Marks)
select Name,Class,'Total',Section,enrollNo,TermName,'Total 
Marks',SUM(Marks) 
from #temp1 
GROUP BY Name,Class,Section,enrollNo,TermName

Insert into #temp 
(Name,Class,SubjectName,Section,enrollNo,TermName,TestName,Marks)
select 
Name,Class,'Total',Section,enrollNo,TermName,'Percentage',
SUM(Marks)*100/sum(m 
axmarksare) from #temp1 
GROUP BY Name,Class,Section,enrollNo,TermName 



select *from #temp
drop table #temp
drop table #temp1

end

我的程序结果如下图所示:Procedure result

ssrs-2008 ssrs-tablix
1个回答
0
投票

由于有许多事情可能是错误的,我会做以下事情。

  1. 创建报告的副本
  2. 如果需要,删除现有数据集和Tablix。
  3. 创建一些只获取基本数据的新数据集(例如SELECT top 10 * FROM marks_emtry_HTS)。不要使用您的参数,因为我们只想测试我们可以获得基本数据。
  4. 在报表中添加一些表格以显示正在返回的数据
  5. 添加数据集以测试您是否通过使用select * from SplitStringByChar(@SectionId,',')等数据集查询正确传递和解析参数,然后将tablix放在报表上以显示结果。
  6. 尝试修剪参数值SET @SectionId = LTRIM(RTRIM(@SectionId)),以确保在分割函数中未正确处理前导或尾随空格。
  7. 如果任何部分不起作用,请在运行报表时在SQL Server上运行跟踪,并查看服务器上正在执行的内容。

我知道很多你认为可能不必要的步骤,但要花时间去做,至少你是肯定的,你可以从调查中排除这些基本检查。

© www.soinside.com 2019 - 2024. All rights reserved.