如果我尝试 运行 在线报告,报告服务错误

Reporting services error if I try to run report online

我有一份 Reporting Services 报告,在我的本地电脑上可以使用。但是如果我尝试在 Internet Explorer 上 运行 它,我会收到以下错误消息:

Errore durante l'elaborazione del report. (rsProcessingAborted)
Query execution failed for dataset 'chartArea_monthly'. (rsErrorExecutingCommand)
Per ulteriori informazioni su questo errore, navigare al server di report nel server locale oppure abilitare gli errori remoti.

我发现错误出在填充我的图表的查询中。查询是这样的:

--Modified by Somosree Banerjee (IBM) for SRQ00409010 on 11-15-2011
-- NOTE: it is strongly recommended to use MS SQL Server Management studio (copy + paste) to edit this query
--CREATED ON Michele Castriotta
use iMELReporting
DECLARE @TemporaryTable TABLE 
                        (
                        Mese NVARCHAR(2),
                        Year NVARCHAR(100),
                        Value DECIMAL(12,5),
                        Target1 DECIMAL(12,5),
                        Target2 DECIMAL(12,5),
                        Target3 DECIMAL(12,5),
                        Target4 DECIMAL(12,5),
                        Target DECIMAL(12,5)
                        )

-- Get PO start and end time and the linkupID
DECLARE @DATA_START AS DATETIME
DECLARE @DATA_END AS DATETIME

DECLARE @Date as DATETIME
SET @Date = '2015-2-1'
DECLARE @ProductionLine AS NVARCHAR(100)
SET @ProductionLine = 'COMBINER001'

--THE USER SELECT A DATE, I SET THE DATA IN THE FIRST DAY OF 3 mounth before this data
--THE CURRENT MONTH IS NOT CALCULATED
SET @DATA_START = DATEADD(MONTH,DATEDIFF(MONTH,0,DATEADD(MM,-3,@Date)),0)
--THE USER SELECT A DATE, I SET THE DATA IN THE FIRST DAY OF 1 mounth before this data
--THE CURRENT MONTH IS NOT CALCULATED
SET @DATA_END = DATEADD(MONTH, 1, DATEADD(MONTH,DATEDIFF(MONTH,0,DATEADD(MM,-1,@Date)),0) - DAY(DATEADD(MONTH,DATEDIFF(MONTH,0,DATEADD(MM,-1,@Date)),0)) + 1) -1
SET @DATA_END =DATEADD(second,86399,@DATA_END) 
--THE USER SELECT A DATE, I SET THE DATA IN THE LAST DAY OF WEEK

--SELECT @DATA_START,@DATA_END


INSERT INTO @TemporaryTable (Mese,Year,Value,Target1,Target2,Target3,Target4,Target)
SELECT 
    --DATENAME(MONTH,MONTH(k.Data)),
    MONTH(k.Data),
    YEAR(k.Data),
    AVG(k.Value) * 100,
    t.Red,
    t.Yellow,
    t.Lime,
    t.CornflowerBlue,
    target
FROM 
    KPI_Value k LEFT JOIN [iMELReporting].[dbo].[Target] t
    ON (k.Machine = t.Machine AND k.KPI = t.KPI)
WHERE
    k.KPI = 3 AND
    k.Machine = @ProductionLine AND
    k.Data BETWEEN @DATA_START AND @DATA_END
    AND t.DataStart <= k.Data AND t.DataEnd >= k.Data 
GROUP BY 
    --DATENAME(mONTH,MONTH(k.Data)),
    MONTH(k.Data),
    YEAR(k.Data),
    t.Red,
    t.Yellow,
    t.Lime,
    t.CornflowerBlue,
    t.target
ORDER BY 
    YEAR(k.Data),
    MONTH(k.Data)


SELECT [dbo].[AF_GetNameOfMonth] (Mese),Year,Value,Target1,Target2,Target3,Target4,Target FROM @TemporaryTable

问题出在最后SELECT如果我尝试删除这个命令

SELECT [dbo].[AF_GetNameOfMonth] (Mese),Year,Value,Target1,Target2,Target3,Target4,Target FROM @TemporaryTable

并插入:

SELECT Mese,Year,Value,Target1,Target2,Target3,Target4,Target FROM @TemporaryTable

我没有任何问题。所以这是我的函数代码:

USE [iMELReporting]
GO
/****** Object:  UserDefinedFunction [dbo].[AF_GetNameOfMonth]    Script Date: 01/16/2015 09:32:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO



ALTER FUNCTION [dbo].[AF_GetNameOfMonth](@Month [INT])
RETURNS NVARCHAR(100)
AS 
    BEGIN
        DECLARE @monthName as NVARCHAR(100);
        SELECT @monthName =
        CASE @Month
            WHEN 1 then 'January'  
            WHEN 2 then 'February' 
            WHEN 3 then 'March'
            WHEN 4 then 'April' 
            WHEN 5 then 'May' 
            WHEN 6 then 'June'
            WHEN 7 then 'July' 
            WHEN 8 then 'August' 
            WHEN 9 then 'September' 
            WHEN 10 then  'October'
            WHEN 11 then 'November' 
            WHEN 12 then 'December' 
        END
        RETURN @monthName

    END

如果我尝试在我的本地电脑上 运行 这个原始报告它有效,但是如果我尝试 运行 它在线我有那个错误,如果我也删除了我的 SP 的功能在线报告有效。请问我的错误在哪里?

您需要检查联机报表服务器是否可以访问当数据库无法填充结果集时产生此错误的函数。检查被在线报告击中的数据库,查看那里是否存在该函数,并且 SSRS 工具所在的用户 运行 有权访问该函数

这是人们 运行 遇到的非常常见的问题。我以前在处理 SSRS 报告时多次遇到这个问题。

当您 运行 在本地计算机上报告时,它会使用安装在您计算机上的数据库(当然,您在配置报告时 select 数据库)。但是当您在 LIVE 服务器上部署此报告时,您会忘记更改数据库配置。反过来,当报表服务器调用报表时,该报表会尝试连接在设计时配置的数据库。由于该数据库在 LIVE 服务器上不可用,因此您的报告无法执行。

在 LIVE 服务器上,您可能有一个同名的数据库,但以下两点在本地计算机和 LIVE 计算机之间有所不同。

  1. 用户数据库凭据
  2. 数据库IP

所以,为了避免这个问题,请确保在上线之前,更改报告中的这些内容。

您需要检查用户是否有权限执行函数。如果没有权限执行一些数据库对象(如存储过程或函数),就会发生这种情况。