首页 > 解决方案 > SQL 报表生成器:添加下拉选项

问题描述

我在其他地方的 SO 上找到了这个问题,但答案包括与我无关的部分,所以我必须用我的具体情况问这个问题。

我只需要在我的下拉菜单中添加一个选项。这是我仅用于销售人员的 SQL 查询(调试模式):

declare @user varchar(30)
set @user = 'DOMAIN\ppelzel'

select SalesPerson_Name
from Salesperson
where salesperson_id =  case
    when  @user in ('DOMAIN\Brandyj',
'DOMAIN\jwilson','DOMAIN\KRoberts',
'DOMAIN\ppelzel','DOMAIN\bmurray')then salesperson_id
    else  SUBSTRING(@user,14,20)
    end 
order by 1

在此处输入图像描述 根据我之前提到的另一个这样的问题,它说不要使用 WHERE 子句。但是,我必须使用 WHERE 子句,因为我需要它来确定登录的人是否与数据集中的内容匹配,那么这是他们将看到的唯一名称,除了少数需要查看的“管理员”用户之外每个人。

对于这些相同的管理员用户,我需要添加一个选项来选择所有销售人员。我尝试简单地使用“允许多个值”,但它不喜欢这样并给我一个错误:Incorrect syntax near ','.即使我在我的 sp.salesperson_name = @salesperson 查询中取出 WHERE 子句。无论如何,为此报告添加“全部”选项的最佳行动方案是什么?

编辑:我刚刚意识到我可能需要为上下文添加主数据集查询:

SELECT sp.SalesPerson_Name
    ,c.Calendar_Month_Name
    ,sum(isnull(sales_qty, 0)) AS 'total gallons'
    ,sum(isnull(Ext_Retail_Base, 0) + isnull(Ext_Retail_Freight, 0)) - sum(isnull(Ext_Cost_Base, 0) + isnull(Ext_Cost_Freight, 0)) 'Sales GM'
    ,(sum(isnull(Ext_Retail_Base, 0) + isnull(Ext_Retail_Freight, 0)) - sum(isnull(Ext_Cost_Base, 0) + isnull(Ext_Cost_Freight, 0))) / sum(isnull(sales_qty, 0)) 'cpg'
FROM Fuel_Wholesale_Sales_Fact fwsf
JOIN calendar c ON fwsf.Calendar_key = c.calendar_key
JOIN Salesperson sp ON sp.SalesPerson_Key = fwsf.Salesperson_Key
JOIN Customer cu ON fwsf.Customer_Key = cu.Customer_Key
WHERE  sp.SalesPerson_Name = @SalesPerson
    AND c.Day_Date BETWEEN @Start
        AND @End
    and isnull(fwsf.sales_qty,0) != 0
GROUP BY sp.SalesPerson_Name, c.Calendar_Month_Name

更新 1:我尝试使用 STRING_SPLIT 函数,但即使使用 Microsoft 网站上的简单示例(https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql ?view=sql-server-2016)导致我收到错误消息:Invalid object name 'STRING_SPLIT'.我正在运行 SQL 2016。想法?

弄清楚了。兼容性级别问题。我的数据库设置为 110。我可能需要问一些问题,如果有理由将其设置在此而不是默认的 130。


更新2:我终于整理出了我需要的东西。我只是在参数属性中使用了“允许多个值”选项。它以前不起作用,因为我愚蠢地没有使用 IN 运算符,也没有用括号括起参数。

所以我有以下内容:select salesperson where id = @salesperson

当我需要的是:select salesperson where id in (@salesperson)因为 Report Builder 将传递参数值字符串作为 'Bob'、'Mary'、'John' 要求将它们放在括号内。这是给其他来寻找答案的人的。

标签: sql-serverreportbuilder3.0

解决方案


推荐阅读