我想在SSRS 2008报告的简单查询中使用“拆分”功能。但是,我收到错误“数据集的查询执行失败”SlsmRealNum“。”拆分“不是公认的内置函数名称”。但如果我打开查询中的表达式框,它会被列为常用函数(文本),所以不确定它为什么会失败?
我的简单选择语句是:
select slsm_num, slsm_msid from Salesman where slsm_msid = split(User.UserID,"\").GetValue(1)
现在要使报告生效,我有一个参数(SlsmnNum),其中包含Split表达式(以获取用户的MSID),然后是使用数据集Salesrepum中的上述查询的第二个参数@SlsmnNum参数作为MSID。如果可能的话,我不想有2个参数,只需要一个实际的salesrep#。非常感谢任何帮助!
答案 0 :(得分:0)
您的select语句以SQL身份执行,因此您获得的错误实际上来自SQL Server。这可能是你感到困惑的地方。
SSRS有两个组件 - SQL语句和报表表达式。通常,SQL语句用于通过查询数据库来生成数据集。报表表达式用于组织,聚合和过滤从SQL数据库获取的数据集。由于SQL语句在SQL数据库中执行,因此只有数据库中的函数可用。您发布的代码是SQL语句而不是报表。
例如,您不能使用Report Expression并期望它在SSMS中工作吗?不,因为它们是两个不同的实体,具有完全不同的语法和目的。当在SQL语句中使用内置的SSRS函数时,它将无法工作,数据库没有内置User.UserId的概念,因此您必须使用参数将值传递给SQL查询。这是参数的定义和目的以及它们存在的原因。
Split是SSRS中的一个函数,这就是你在表达式引用中看到它的原因,但它不是SQL中的函数。您发布的代码是SQL语法,所以我打赌这是您用来获取数据集的SQL语句。因此,查询失败,因为SQL DB没有拆分功能。
您可以将此拆分功能添加到您的数据库,代码位于此处:Split String in SQL。您还可以在where子句中使用以下内容,以下是更新的SQL语句。
SELECT slsm_num, slsm_msid from Salesman where slsm_msid = SUBSTRING(@UserId, PATINDEX('%\%', @UserId), LEN(@UserId))
您可以将@UserId参数的值设置为User!UserID的表达式,而不是在select语句中指定它。
SSRS表达式示例的功能类似于代码尝试完成的功能,如果您在报表端需要相同的功能。您正在寻找的功能是InStr()。在报告方面,您可以使用以下内容:
=Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)
表达式示例可在此处找到:MSDN Expression examples。