【发布时间】:2023-04-02 11:36:01
【问题描述】:
我有两个数据集,
这两个数据集的行数不同。
我有两个 Tablix。每个 Tablix 都指向这两个不同的数据集
在一列中,我想逐行比较两个数据集。
这是我的两个 Tablix 和我的数据集,你可以看到学生号 10,15 和 23 在 Dataset2 上不存在。
当这种情况发生时,我想写一个 0。
如果我使用查找表达式,它会在比较每个数据集存在的行时给我一个错误:
=IIF(Fields!Student.Value <> Lookup(Fields!Student.Value,Fields!Student.Value,Fields!Student.Value,"Dataset1"),"0","1")
那个表达式会给我一个错误。
这个想法(我认为)是保留学生 21 并在数据集 1 上为每个学生进行比较,当他们相等时写入 1 和 0,而他们不相等但对于每一行。
我不能触摸数据集,我的意思是查询。
如果您需要更多信息,请告诉我。
编辑: 为了给你更多信息,我想要做的是复制我在我的网络应用程序中的代码在数据层中所做的事情:
ReportsDataSet.MyDatasetRow drSchool = (ReportsDataSet.MyDatasetRow)repDset.MyDataset.Rows[0];
string Student = drSchool.Student;
bool firstone = true;
bool hayApproved = false;
bool hayNotApproved = false;
bool hayNeedMoreStudy = false;
bool hayFail = false;
bool hayG5 = false;
bool hayNC = false;
if (repDset.MyDataset.Rows.Count > 0)
{
int Count = repDset.MyDataset.Rows.Count;
for (int i = 0; i < Count; i++)
{
ReportsDataSet.MyDatasetRow dr = (ReportsDataSet.MyDatasetRow)repDset.MyDataset.Rows[i];
if (dr.tipo.Trim() == "TOTAL" && firstone)
{
Student = dr.Student;
firstone = false;
switch (dr.categoria.Trim())
{
case "Approved":
hayApproved = true;
break;
case "NotApproved":
hayNotApproved = true;
break;
case "NeedMoreStudy":
hayNeedMoreStudy = true;
break;
case "Fail":
hayFail = true;
break;
case "G5":
hayG5 = true;
break;
case "N/C":
hayNC = true;
break;
}
}
else
{
if (dr.tipo.Trim() == "TOTAL" && dr.Student == Student)
{
switch (dr.categoria.Trim())
{
case "Approved":
hayApproved = true;
break;
case "NotApproved":
hayNotApproved = true;
break;
case "NeedMoreStudy":
hayNeedMoreStudy = true;
break;
case "Fail":
hayFail = true;
break;
case "G5":
hayG5 = true;
break;
case "N/C":
hayNC = true;
break;
}
}
}
if (dr.Student != Student || i == (Count-1) )
{
if (!hayApproved)
{
repDset.MyDataset.AddMyDatasetRow(Student, "Approved", "TOTAL", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0");
Alreadyfilled++;
}
if (!hayNotApproved)
{
repDset.MyDataset.AddMyDatasetRow(Student, "NotApproved", "TOTAL", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0");
Alreadyfilled++;
}
if (!hayNeedMoreStudy)
{
repDset.MyDataset.AddMyDatasetRow(Student, "NeedMoreStudy", "TOTAL", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0");
Alreadyfilled++;
}
if (!hayFail)
{
repDset.MyDataset.AddMyDatasetRow(Student, "Fail", "TOTAL", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0");
Alreadyfilled++;
}
if (!hayG5)
{
repDset.MyDataset.AddMyDatasetRow(Student, "G5", "TOTAL", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0");
Alreadyfilled++;
}
if (!hayNC)
{
repDset.MyDataset.AddMyDatasetRow(Student, "N/C", "TOTAL", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0");
Alreadyfilled++;
}
if (!hayApproved && !hayNotApproved && !hayNeedMoreStudy && !hayFail && !hayG5 && !hayNC)
{
repDset.MyDataset.AddMyDatasetRow(Student, "TOTAL", "TOTAL", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0");
Alreadyfilled++;
}
repDset.MyDataset.AcceptChanges();
hayApproved = false;
hayNotApproved = false;
hayNeedMoreStudy = false;
hayFail = false;
hayG5 = false;
hayNC = false;
firstone = true;
if (i != (Count - 1))
{
Student = dr.Student;
i--;
}
}
}
}
编辑 2:
正如您在最后一张图片中看到的,学生 11、16 等在数据集 2 上不存在,在这些情况下我必须输入“0”。 但是我对 Lookup 所做的是将 21 与 11,21 与 11 再次进行比较,22 与 11 进行比较,依此类推。这不是重点,重点是每次 Dataset1 中存在的 Student 不在 Dataset2 中时输入 0。
应该是这样的,我将Student的值保存在Dataset 2中,并在Dataset1上比较每个Student,当它们不相等时,输入0,相等时输入1。
也许是一个函数?将 Dataset1 的所有学生保存在一个列表中,将 Dataset2 的学生保存在另一个列表中,并在自定义代码中的 foreach 上进行比较?
【问题讨论】:
标签: c# asp.net vba reporting-services ssrs-2008-r2