2016-08-16 128 views
0

我希望能够让企业手动输入USERID到参数框中或将其留空以让其恢复所有USERID。SSRS报告的所有参数

我为CUSTOMERID设置了另一个参数,它使用数据集来返回客户ID列表。由于USERID的数量不同,我不想使用相同的解决方案,而是让他们手动输入USERID或将其留空并将ALL全部退回。

SELECT 
    CUSTOMERID, 
    CASE 
    WHEN STATUSCODE = 200 THEN 'Successful Logon' 
    ELSE 'Unsuccessful Logon' 
    END as LogonStatus, 
    COUNT(*) COUNTOFACCOUNTS 

FROM 
    MA4EQNG.APPLICATIONLOG 
WHERE 
    CUSTOMERID in ('"+join(Parameters!CustomerID.Value, "','")+"') 
    AND (Cast(DATETIME as Date) >= '"& Format(Parameters!FromDate.Value, "yyyy-MM-dd") & "' 
    AND Cast(DATETIME as Date) <= '" & Format(Parameters!ToDate.Value, "yyyy-MM-dd") & "') 
    AND COMPONENTDESCRIPTION = '/eq/auth/v1/logon' 
    AND METHOD = 'POST' 

GROUP BY 
    CUSTOMERID, 
    CASE 
     WHEN STATUSCODE = 200 THEN 'Successful Logon' 
     ELSE 'Unsuccessful Logon' 
    END 

ORDER BY 
CUSTOMERID ASC 

请让我知道你是否需要别的东西。

+1

您可以检查参数'IS NULL'?所以像'WHERE(USERID = @UserID或@UserID IS NULL)' – NickyvV

+0

我尝试了以下并出现错误。我输入了以下代码 和(USERID = Parameters!UserID.Value OR Parameters!UserID.Value IS NULL) 我还在Visual的参数中启用了NULL值。 – JoelG

+0

你想在上述查询中使用参数?我认为你可以将我的代码添加到你的SQL中。 – NickyvV

回答

0

您可以将USERID参数设置为允许空白值,然后在主数据集的SQL脚本中使用IF条件。

尝试

IF LEN(@USERID)>0 
*put the sql script with UserId filter in where clause* 
ELSE 
*put the sql script WITHOUT UserId filter in where clause* 
+0

这没有奏效。我尝试将它添加到我描述的where子句中,并得到一个错误。 – JoelG

0

通常你只想脚本像这样的WHERE子句。

WHERE ISNULL(@CustomerID, '')= '' OR(CUSTOMERID在( ' “+参加(参数!CustomerID.Value,”', ' “)+”'))

及长我会创建一个函数,它接受一个分隔字符串,并将它们转换为行,然后您可以加入表值函数的结果。

How to split a comma-separated value to columns