Search code examples
ssrs-2008ssrs-tablix

Empty data in SSRS Reports


I'm working on ssrs reports. I was able to see the data or result of my stored procedure.unfortunatesly, when used the same as my dataset for report I was unable to see the data instead i'm getting 0 records.what might be the reasons ?My reports structure will be as like below image : My ssrs design

My current result : Current result

Below is my procedure :

 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

My procedure result is as like below image : Procedure result


Solution

  • As there are a number of things that could be wrong I would do the following.

    1. Create copy of your report
    2. Remove the existing dataset and tablix if you want.
    3. Create some new datasets that just get the basic data (e.g. SELECT top 10 * FROM marks_emtry_HTS). Do not use your parameters yet as we just want to test we can get basic data.
    4. Add some tables to your report to show that the data is being returned
    5. Add a dataset to test you are passing and parsing parameters correctly by using a dataset query like select * from SplitStringByChar(@SectionId,',') and then put tablix on your report to show the results.
    6. Try trimming your parameter values SET @SectionId = LTRIM(RTRIM(@SectionId)) to make sure you're not handling leading or trailing space incorrectly in you split function.
    7. If any parts do not work, run a trace on the SQL Server as you run the report and look at exactly what is being executed on the server.

    I know a lot of those steps you will think might be unnecessary but take the time to do it and at least you are certain and you can exclude such basic checks from your investigation.