此笔记记录使用SQL Server Reporting Services过程中一些比较使用的功能
1. 柏拉图
- 柱形图序列值为:=Fields!销量.Value
- 线形图序列值为:=RunningValue(Fields!销量.Value,Sum,"dsMain")
-
若折线图要显示为比例,则序列值设置为:
-
=RunningValue(Fields!销量.Value,Sum,"dsMain") / Sum(Fields!销量.Value,"dsMain")
-
其中"dsMain"为作用域。如果要按员工分组查看每个员工的销量,按此处填写分组的名字,如User_Group
-
作用域的每个新实例 RunningValue 的值都会重置为 0。 如果指定组,则会在更改组表达式时重置该运行值。 如果指定数据区域,则会为该数据区域的每个新实例重置该运行值。 如果指定数据集,则不会在整个数据集中重置该运行值。
-
详细可参见MSDN用法说明 报表生成器函数 - RunningValue 函数
2. 引用单元格值
- 使用ReportItems.XXX.Value
3. 检查报表订阅失败,并邮件通知
- 可在程序中使用以下SQL,查询出失败的订阅,再发送出来:
SELECT S.SUBSCRIPTIONID,CL.PATH, CL.NAME,S.Description,S.INACTIVEFLAGS, S.LASTSTATUS,S.LASTRUNTIME
FROM CATALOG AS CL,REPORTSCHEDULE AS RS,SUBSCRIPTIONS S
WHERE CL.ITEMID = RS.REPORTID AND RS.SUBSCRIPTIONID = S.SUBSCRIPTIONID AND S.INACTIVEFLAGS = 0
- 发送邮件效果如下
- 产生邮件body
LogUntil.LogInfo("发送邮件通知");
StringBuilder sbMailContent = new StringBuilder();
string temp = "";
sbMailContent.Append(@"
<div>
<span style='font - family: verdana, arial, sans - serif; font - size: 11px;'>
Hi:all
<br/>
    报表订阅邮件发送状态异常,详情如下:
<br/>
</span>
</div>
<table style='font-family: verdana,arial,sans-serif; font-size: 11px; color: #333333; border-width: 1px; border-color: #666666; border-collapse: collapse;'>
<tr>
<th style='border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #dedede;'>Subscription Id</th>
<th style='border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #dedede;'>Path</th>
<th style='border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #dedede;'>Name</th>
<th style='border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #dedede;'>Description</th>
<th style='border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #dedede;'>Last Status</th>
<th style='border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #dedede;'>Last Runtime</th>
</tr>");
foreach (DataRow error in drErrors)
{
temp = @"<tr>
<td style='border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #ffffff;'>#SubscriptionId#</td>
<td style='border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #ffffff;'>#Path#</td>
<td style='border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #ffffff;'>#Name#</td>
<td style='border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #ffffff;'>#Description#</td>
<td style='border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #ffffff;'>#LastStatus#</td>
<td style='border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #ffffff;'>#LastRuntime#</td>
</tr>";
sbMailContent.Append(temp.Replace("#SubscriptionId#", error["SUBSCRIPTIONID"].ToString()).Replace("#Path#", error["PATH"].ToString())
.Replace("#Name#", error["NAME"].ToString()).Replace("#Description#", error["Description"].ToString()).Replace("#LastStatus#", error["LASTSTATUS"].ToString())
.Replace("#LastRuntime#", error["LASTRUNTIME"].ToString()));
}
sbMailContent.Append("</table>");
string result = sendMail(sbMailContent.ToString());
if ("success".Equals(result))
{
LogUntil.LogInfo("邮件发送成功");
}
else
{
LogUntil.LogError(string.Format("邮件发送失败:{0}", result));
}
4. 报表订阅时,在生成的文件名中保存日期
为每个传递创建唯一的文件的另一种方法是在文件名中包含时间戳。
若要执行此操作,请将“@timestamp”变量添加到文件名中(例如,CompanySales@timestamp)。
导出文件名效果如下:
注:修改文件名仅在传递方式为Windows文件共享时可以,发送到电子邮件则无法修改文件名。
5. 数据驱动订阅
可以根据自定义数据集,订阅不同的邮件/文件发送