不久前,我从一家第三方供应商那里请求了一份SSRS报告,该报告生成了一份PDF,其中每个用户的数据除以三个月(最终可能有60-100个用户(。
我们要求满足几个条件,程序员最终得到了13个数据集,35个表达式,其中一些包括一个"=code.store…";(我不知道这意味着什么(和查找。
程序员没有满足我们的一个要求:如果在部门中找到值,则确保行将项的名称更改为硬编码的通用值。例如";华硕ROG Zephyrus G14";属于笔记本电脑部门,则该值变为"0";笔记本电脑";。只有一个部门有这种情况。
当我问原因时,程序员告诉我这是不可能的。它只能检查固定值,而不能检查部门本身,他需要对每个项目id进行硬编码才能更改名称。
所以,我想出了这个,并把它呈现给程序员:
MySQL
select C.intInventoryItem as InventoryValues from TblInventoryManagerItems inner join (
select intDepartment, intInventoryItem from
TblInventoryManagerItemDepartmentLinks where intDepartment = @department) as C
on TblInventoryManagerItems.intInventoryItem = C.intInventoryItem
group by C.intInventoryItem
然后在SSRS上
(Lookup(Fields!intInventoryID.Value,Fields!InventoryValues.Value,Fields!InventoryValues.Value,"Department") <> Nothing)
当我向程序员展示这个工作证明时(以一种非常礼貌、非侮辱性的方式,几乎让自己在电子邮件中看起来很愚蠢(,他说这会导致巨大的性能问题,如果我们需要这样的解决方案,那将需要花钱,并且需要一个月的时间才能交付。
因为我一开始就被欺骗了,所以第二个答案变得非常可疑,我们仍然没有得到我们最初要求的东西。
数据集为1列14行。尽管每行都会检查14行,但它仍然运行得很快,我认为与原始报告在时间上没有差异。然而,MySQL和SSRS并不是我的主要编程语言,因此我更愿意咨询这方面的专家。
TL;DR-我如何在SSRS中测量一个报告与另一个报告的执行时间?(类似于Python中的time.clock(((;此外,添加1个1列14行的数据集,然后查找是否会导致巨大的性能问题?
首先,让我们清理SQL。
select C.intInventoryItem as InventoryValues
from ...
group by C.intInventoryItem
也许你的意思是
SELECT DISTINCT C.intInventoryItem as InventoryValues
from ...
似乎不需要包含intDepartment
:
SELECT intDepartment, intInventoryItem
您可能可以在没有子查询的情况下使用JOIN。
也许这就足够了?
SELECT DISTINCT intInventoryItem
FROM TblInventoryManagerItems AS mi
JOIN TblInventoryManagerItemDepartmentLinks AS dl USING(intInventoryItem)
WHERE dl.intDepartment = @department
索引:
dl: INDEX(intDepartment, intInventoryItem)
mi: INDEX(intInventoryItem)
请考虑缩短表名和列名。