【发布时间】:2018-02-23 22:23:23
【问题描述】:
我有一份包含 6 个参数的报告。所有参数都必须是可选的,并且 3 必须是多值的。可选参数之一是下拉菜单,其余参数在文本框中手动键入。 当有多个 @VendorNum 值和一个 @FullJA 值时,下面的 Where 子句有效,但无论 @VendorNum 计数如何,都会因多个 @FullJA 值而失败。
参数: @VendorNum - 由用户手动键入(空格分隔) - 可选,可以是多值 @FullJA - 由用户手动键入(空格分隔) - 可选,可以是多值 @BU - 可选,可以是多值 - 当@JA 被填充时,它会自动填充,如果@JA 没有被填充,它是一个全部被选中的下拉列表。 @JA3 - 由用户键入 - 可选,单值 @StartDate 和 @EndDate - 可选的单个值
select * from some_table
WHERE
/*FULL JA*/
(
SUBSTRING(VendorNum, PATINDEX('%[^0]%', VendorNum + '.'), LEN(VendorNum)
) IN (@VendorNum)
AND LEFT(JA, 7) IN (@FullJA)
AND BU IN(@BU)
AND @JA3 IS NULL
)
OR
/*DATE RANGE*/
(
SUBSTRING(VendorNum, PATINDEX('%[^0]%', VendorNum + '.'), LEN(VendorNum)
) IN (@VendorNum)
AND LEN(ISNULL(CONVERT(VARCHAR(20), Cleared_When), '0')) >= @ClearedOnly
AND ad.Audit_Publish_Date >= ISNULL(@StartDate, '2015-01-01')
AND ad.Audit_Publish_Date <= ISNULL(@EndDate, '2025-12-31')
AND BU IN (@BU)
AND @FullJA IS NULL
AND @JA3 IS NULL
)
/*BUS UNIT AND JA3*/
OR (
SUBSTRING(VendorNum, PATINDEX('%[^0]%', VendorNum + '.'), LEN(VendorNum)
) IN (@VendorNum)
AND BU IN (@BU)
AND ad.Audit_Publish_Date >= ISNULL(@StartDate, '2015-01-01')
AND ad.Audit_Publish_Date <= ISNULL(@EndDate, '2025-12-31')
AND LEFT(JA, 3) = (@JA3)
AND @FullJA IS NULL
)
/*BUS UNIT ONLY*/
OR (
SUBSTRING(VendorNum, PATINDEX('%[^0]%', VendorNum + '.'), LEN(VendorNum)
) IN (@VendorNum)
AND BU IN (@BU)
AND ad.Audit_Publish_Date >= ISNULL(@StartDate, '2015-01-01')
AND ad.Audit_Publish_Date <= ISNULL(@EndDate, '2025-12-31')
AND @JA3 IS NULL
AND @FullJA IS NULL
)
@FullJA 和 @VendorNum 的数据集参数值都是 =IIF(InStr(Parameters!FullJA.Value," ")>0,SPLIT(Parameters!FullJA.Value," "),Parameters!FullJA.Value) 并且所有参数都设置为非多值,允许为空。
任何帮助将不胜感激。我已经为这个项目写了 200 多份报告,而这是唯一一份真正让我着迷的报告!
谢谢!
【问题讨论】:
-
我最终为这些值创建了一个表,并按照您的指示填充了它们。我将它们全部存储在一个表中,然后在存储过程中使用别名从每一列中获取正确的值。
标签: reporting-services ssrs-2008 ssrs-2008-r2 optional-parameters