REDSHIFT ODBC 连接上的 SSRS 数据集参数
SSRS Dataset Parameter on an REDSHIFT ODBC Connection
我目前正在尝试 运行 通过 SSRS 通过 ODBC 报告红移。
我预计查询会 运行 因为 SQL 有效但是看起来 SSRS 将参数名称传递给 SQL 查询返回到 Redshift 而不是参数值与 id 预期相同,请考虑以下查询。
SELECT x.Col_1, y.Col_2, x.Col_3, x.Col_4
From x_table as x
JOIN Y_table as y on x.Col_4 = y.Col_4
WHERE x.Col_4 = @Col_4
AND x.col_3 >= @From and x.col_3 < @To
AND x.col_2 >= @From and x.col_2 < @To
在 SSRS 中,当我尝试刷新字段列表时出现以下错误,
错误 [42702] [Amazon][Amazon Redshift] (30) 尝试执行查询时发生错误:[SQL状态 42702] 错误:列引用“From”不明确
此查询使用参数查询数据库以return仅根据特定客户和分类字段查询数据的子集我无法将过滤器移出报告。
故障排除步骤
- 当 运行在 redshift 上执行此查询并删除参数时,它工作正常。
- 当 运行 在 SQL 服务器上使用参数运行此查询时,它工作正常。
- 当 运行使用 ?作为参数名称,它仅适用于第一个参数。
- 当运行使用列定义以外的参数执行此查询时,它仍然失败并出现类似错误
研究这似乎是 ODBC 数据源的一个常见问题,但在不使用多个参数的情况下,大多数人似乎只使用 ?但这仅适用于单个参数。
我发现了两个类似的堆栈溢出问题,但都没有帮助我解决这个问题。
- SSRS parameters basics with ODBC Connection
- Passing Parameter from SSRS dataset to Snowflake
我怀疑 ODBC 数据集需要某种转义或类似方式,以便 SSRS 可以用值替换参数名称,但我无法在任何地方找到这个记录,因为如果使用 ?因为参数名称有效,所以肯定只是使用某种转义的问题。
以防万一其他人遇到这个问题,我最终通过使用链接服务器和 OPENQUERY 解决了这个问题,这实际上是一个非常理想的解决方案,因为它可以让您在需要时将 PGSQL 写入报告从技术上讲,您甚至可以对 SQL 服务器数据进行后续连接。
DECLARE @OPENQUERY nvarchar(4000), @PGSQL nvarchar(4000), @LinkedServer nvarchar(4000)
SET @LinkedServer = 'Redshift'
SET @OPENQUERY = 'SELECT * FROM OPENQUERY('+ @LinkedServer + ','''
SET @PGSQL = 'SELECT x.Col_1, y.Col_2, x.Col_3, x.Col_4
From x_table as x
JOIN Y_table as y on x.Col_4 = y.Col_4
WHERE x.Col_4 = '''''+ @Col_4 +'''''
AND x.col_3 >= '''''+ @From +''''' and x.col_3 < '''''+ @To +'''''
AND x.col_2 >= '''''+ @From+ ''''' and x.col_2 < '''''+ @To +''''''
EXEC (@OPENQUERY+@PGSQL)
我目前正在尝试 运行 通过 SSRS 通过 ODBC 报告红移。
我预计查询会 运行 因为 SQL 有效但是看起来 SSRS 将参数名称传递给 SQL 查询返回到 Redshift 而不是参数值与 id 预期相同,请考虑以下查询。
SELECT x.Col_1, y.Col_2, x.Col_3, x.Col_4
From x_table as x
JOIN Y_table as y on x.Col_4 = y.Col_4
WHERE x.Col_4 = @Col_4
AND x.col_3 >= @From and x.col_3 < @To
AND x.col_2 >= @From and x.col_2 < @To
在 SSRS 中,当我尝试刷新字段列表时出现以下错误,
错误 [42702] [Amazon][Amazon Redshift] (30) 尝试执行查询时发生错误:[SQL状态 42702] 错误:列引用“From”不明确
此查询使用参数查询数据库以return仅根据特定客户和分类字段查询数据的子集我无法将过滤器移出报告。
故障排除步骤
- 当 运行在 redshift 上执行此查询并删除参数时,它工作正常。
- 当 运行 在 SQL 服务器上使用参数运行此查询时,它工作正常。
- 当 运行使用 ?作为参数名称,它仅适用于第一个参数。
- 当运行使用列定义以外的参数执行此查询时,它仍然失败并出现类似错误
研究这似乎是 ODBC 数据源的一个常见问题,但在不使用多个参数的情况下,大多数人似乎只使用 ?但这仅适用于单个参数。
我发现了两个类似的堆栈溢出问题,但都没有帮助我解决这个问题。
- SSRS parameters basics with ODBC Connection
- Passing Parameter from SSRS dataset to Snowflake
我怀疑 ODBC 数据集需要某种转义或类似方式,以便 SSRS 可以用值替换参数名称,但我无法在任何地方找到这个记录,因为如果使用 ?因为参数名称有效,所以肯定只是使用某种转义的问题。
以防万一其他人遇到这个问题,我最终通过使用链接服务器和 OPENQUERY 解决了这个问题,这实际上是一个非常理想的解决方案,因为它可以让您在需要时将 PGSQL 写入报告从技术上讲,您甚至可以对 SQL 服务器数据进行后续连接。
DECLARE @OPENQUERY nvarchar(4000), @PGSQL nvarchar(4000), @LinkedServer nvarchar(4000)
SET @LinkedServer = 'Redshift'
SET @OPENQUERY = 'SELECT * FROM OPENQUERY('+ @LinkedServer + ','''
SET @PGSQL = 'SELECT x.Col_1, y.Col_2, x.Col_3, x.Col_4
From x_table as x
JOIN Y_table as y on x.Col_4 = y.Col_4
WHERE x.Col_4 = '''''+ @Col_4 +'''''
AND x.col_3 >= '''''+ @From +''''' and x.col_3 < '''''+ @To +'''''
AND x.col_2 >= '''''+ @From+ ''''' and x.col_2 < '''''+ @To +''''''
EXEC (@OPENQUERY+@PGSQL)