SSRS 查询获取标量变量错误而不是在 Visual Studio 中使用参数
SSRS Query gets scalar variable error instead of using parameter in Visual Studio
我在 SSRS 不使用报告中已声明的参数时遇到问题。在报告中,我已经有两个查询都使用@Period 来确定用户请求的月份。然而,在第三份报告中,它不断提出一个标量变量错误,并希望我声明 @Period,当然,除非我指定 int 值,否则它会带来一个完全不正确的数字,因为它是对所有内容的总和,而不是设定的周期。
我已经检查了代码,甚至从工作代码中复制粘贴了@Period,以查看是否有隐藏的 space 或阻止它使用正确参数的东西,但它仍然看不到它.下面是 visual studio 中报告数据 window 的屏幕截图和我正在使用的代码。我只是不明白为什么它不能使用@Period。
Declare @Year As int
--Declare @Period As int = 9
--Sets up the year for this financial year
If @Period Between 5 and 12
Begin
Set @Year = Year(Getdate()) + 1
End
Else
Set @Year = YEAR(Getdate())
--Sets the Declared Period to the correct number for Clients
if @Period = 5
Begin
Set @Period = 1
End
ELSE if @Period = 6
Begin
Set @Period = 2
End
Else if @Period = 7
Begin
Set @Period = 3
End
Else if @Period = 8
Begin
Set @Period = 4
End
Else if @Period = 9
Begin
Set @Period = 5
End
Else if @Period = 10
Begin
Set @Period = 6
End
Else if @Period = 11
Begin
Set @Period = 7
End
Else if @Period = 12
Begin
Set @Period = 8
End
Else if @Period = 1
Begin
Set @Period = 9
End
Else if @Period = 2
Begin
Set @Period = 10
End
Else if @Period = 3
Begin
Set @Period = 11
End
Else
Set @Period = 12
--This Sorts all the clients into their sectors
SELECT A.GROUP_NAME,B.CLIENT_DIWOR
INTO #TMPCLIENT
FROM CLIENT_GROUP A
JOIN CLIENT_GRP_MEMBER B on A.DIWOR = B.CLIENT_GRP_DIWOR
WHERE GROUP_TYPE = 'THEME'
GROUP BY A.GROUP_NAME,B.CLIENT_DIWOR
--This sets the figures according to Current year and period range
SELECT A.MATTER_ALPHA_NAME,B.FEES_PRD As Fees,A.CLIENT_DIWOR,D.GROUP_NAME
INTO #Fees
FROM MATTER A
JOIN ON_MAT_FE_PERF B on A.MATTER_DIWOR = B.MATTER_DIWOR
JOIN PM_YEAR C on B.FINYEARDIWOR = C.DIWOR
LEFT JOIN #TMPCLIENT D on D.CLIENT_DIWOR = A.CLIENT_DIWOR
WHERE C.YEARDESC = @Year and B.PERIOD between 1 and @Period and B.FEES_PRD <> 0 and D.GROUP_NAME
is
not NULL
order by MATTER_ALPHA_NAME
--This sets Previous year and period
Set @Year = SUM(@Year-1)
SELECT A.MATTER_ALPHA_NAME,B.FEES_PRD As Fees,A.CLIENT_DIWOR,D.GROUP_NAME
INTO #PFees
FROM MATTER A
JOIN ON_MAT_FE_PERF B on A.MATTER_DIWOR = B.MATTER_DIWOR
JOIN PM_YEAR C on B.FINYEARDIWOR = C.DIWOR
LEFT JOIN #TMPCLIENT D on D.CLIENT_DIWOR = A.CLIENT_DIWOR
WHERE C.YEARDESC = @Year and B.PERIOD between 1 and @Period and B.FEES_PRD <> 0 and D.GROUP_NAME
is not NULL
order by MATTER_ALPHA_NAME
Select TOP 20
MATTER_ALPHA_NAME,SUM(Fees) As Fees,GROUP_NAME
Into #Charities
FROM #Fees
WHERE GROUP_NAME = 'Charities (Sector)'
GROUP By MATTER_ALPHA_NAME,GROUP_NAME
ORDER BY Fees Desc
Select TOP 20
MATTER_ALPHA_NAME,SUM(Fees) As Fees,GROUP_NAME
Into #PCharities
FROM #PFees
WHERE GROUP_NAME = 'Charities (Sector)'
GROUP By MATTER_ALPHA_NAME,GROUP_NAME
ORDER BY Fees Desc
SELECT ROUND(SUM(Fees),-3) As Fees
Into #TmpCharC
FROM #Charities
SELECT ROUND(SUM(Fees),-3) As Fees
Into #TmpCharP
FROM #PCharities
Create Table #Main (Charity int,PCharity int)
insert into #Main (Charity,PCharity)
Select A.Fees,B.Fees
from #TmpCharC A
CROSS JOIN #TmpCharP B
Select * From #Main
所以在进一步挖掘之后我发现了问题。
在数据集属性和参数内部,由于某些随机原因,未包含图片中的参数名称。添加这个解决了这个问题。
感谢 Zoher Peled 提供的模块化算法技巧
我在 SSRS 不使用报告中已声明的参数时遇到问题。在报告中,我已经有两个查询都使用@Period 来确定用户请求的月份。然而,在第三份报告中,它不断提出一个标量变量错误,并希望我声明 @Period,当然,除非我指定 int 值,否则它会带来一个完全不正确的数字,因为它是对所有内容的总和,而不是设定的周期。
我已经检查了代码,甚至从工作代码中复制粘贴了@Period,以查看是否有隐藏的 space 或阻止它使用正确参数的东西,但它仍然看不到它.下面是 visual studio 中报告数据 window 的屏幕截图和我正在使用的代码。我只是不明白为什么它不能使用@Period。
Declare @Year As int
--Declare @Period As int = 9
--Sets up the year for this financial year
If @Period Between 5 and 12
Begin
Set @Year = Year(Getdate()) + 1
End
Else
Set @Year = YEAR(Getdate())
--Sets the Declared Period to the correct number for Clients
if @Period = 5
Begin
Set @Period = 1
End
ELSE if @Period = 6
Begin
Set @Period = 2
End
Else if @Period = 7
Begin
Set @Period = 3
End
Else if @Period = 8
Begin
Set @Period = 4
End
Else if @Period = 9
Begin
Set @Period = 5
End
Else if @Period = 10
Begin
Set @Period = 6
End
Else if @Period = 11
Begin
Set @Period = 7
End
Else if @Period = 12
Begin
Set @Period = 8
End
Else if @Period = 1
Begin
Set @Period = 9
End
Else if @Period = 2
Begin
Set @Period = 10
End
Else if @Period = 3
Begin
Set @Period = 11
End
Else
Set @Period = 12
--This Sorts all the clients into their sectors
SELECT A.GROUP_NAME,B.CLIENT_DIWOR
INTO #TMPCLIENT
FROM CLIENT_GROUP A
JOIN CLIENT_GRP_MEMBER B on A.DIWOR = B.CLIENT_GRP_DIWOR
WHERE GROUP_TYPE = 'THEME'
GROUP BY A.GROUP_NAME,B.CLIENT_DIWOR
--This sets the figures according to Current year and period range
SELECT A.MATTER_ALPHA_NAME,B.FEES_PRD As Fees,A.CLIENT_DIWOR,D.GROUP_NAME
INTO #Fees
FROM MATTER A
JOIN ON_MAT_FE_PERF B on A.MATTER_DIWOR = B.MATTER_DIWOR
JOIN PM_YEAR C on B.FINYEARDIWOR = C.DIWOR
LEFT JOIN #TMPCLIENT D on D.CLIENT_DIWOR = A.CLIENT_DIWOR
WHERE C.YEARDESC = @Year and B.PERIOD between 1 and @Period and B.FEES_PRD <> 0 and D.GROUP_NAME
is
not NULL
order by MATTER_ALPHA_NAME
--This sets Previous year and period
Set @Year = SUM(@Year-1)
SELECT A.MATTER_ALPHA_NAME,B.FEES_PRD As Fees,A.CLIENT_DIWOR,D.GROUP_NAME
INTO #PFees
FROM MATTER A
JOIN ON_MAT_FE_PERF B on A.MATTER_DIWOR = B.MATTER_DIWOR
JOIN PM_YEAR C on B.FINYEARDIWOR = C.DIWOR
LEFT JOIN #TMPCLIENT D on D.CLIENT_DIWOR = A.CLIENT_DIWOR
WHERE C.YEARDESC = @Year and B.PERIOD between 1 and @Period and B.FEES_PRD <> 0 and D.GROUP_NAME
is not NULL
order by MATTER_ALPHA_NAME
Select TOP 20
MATTER_ALPHA_NAME,SUM(Fees) As Fees,GROUP_NAME
Into #Charities
FROM #Fees
WHERE GROUP_NAME = 'Charities (Sector)'
GROUP By MATTER_ALPHA_NAME,GROUP_NAME
ORDER BY Fees Desc
Select TOP 20
MATTER_ALPHA_NAME,SUM(Fees) As Fees,GROUP_NAME
Into #PCharities
FROM #PFees
WHERE GROUP_NAME = 'Charities (Sector)'
GROUP By MATTER_ALPHA_NAME,GROUP_NAME
ORDER BY Fees Desc
SELECT ROUND(SUM(Fees),-3) As Fees
Into #TmpCharC
FROM #Charities
SELECT ROUND(SUM(Fees),-3) As Fees
Into #TmpCharP
FROM #PCharities
Create Table #Main (Charity int,PCharity int)
insert into #Main (Charity,PCharity)
Select A.Fees,B.Fees
from #TmpCharC A
CROSS JOIN #TmpCharP B
Select * From #Main
所以在进一步挖掘之后我发现了问题。
在数据集属性和参数内部,由于某些随机原因,未包含图片中的参数名称。添加这个解决了这个问题。
感谢 Zoher Peled 提供的模块化算法技巧