sql-server - 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' 要求将它们放在括号内。这是给其他来寻找答案的人的。
解决方案
推荐阅读
- reactjs - 在 Gatsby 中使用来自 scss 或 css 的样式不起作用
- javascript - JavaScript:将数组转换为没有键或字符串的对象
- arrays - 如何填充 Swift 数组以使其更大?
- amazon-web-services - bitbucket 管道中的颁发者证书问题
- javascript - Apollo Server 和 MySQL:如何直接从数据库中获取数据?
- deep-learning - PyTorch:迁移学习的混淆矩阵
- git - Git:如何在我的项目中设置一个与远程分支相同的文件夹?
- apache-kafka - 卡夫卡不删除旧记录
- r - 如何在 R Shiny 中摆脱此错误消息“closure”不是子集的
- javascript - 类型“AppComponent”上不存在属性函数