使用文本框值作为来源的查找显示太多行 + SSRS
Lookup using textbox value as source showing too many rows + SSRS
我在 ssrs 中做了一个查找函数,其中源是 reportItem 引用。我想 return 我根据 reportItem 参考查找的 table 中的值。该报告正在检索正确的值,但我得到了重复的行,我想知道是否有办法消除它。我在 tablix 中的参数是基于票号的。
基础数据有 3 个事务,但当前正在 return编辑 9 行。
在 SSRS 中,我的查询是:
Select
ticketno, name, control, value
from ticket a
inner join details b on a.ticketno = b.ticketno
where control like 'LS%' and ticket = 'ED08'
return 结果包含 4 行事务
即:
Ticket
Name
Control
Value
ED08
Eng
LS1
A
ED08
Acct
LS2
B
ED08
Med
LS3
C
在 SSRS 中,我使用了 table 并对名称进行了硬编码,因为可能没有任何值。
我硬编码了 Eng、Acct、Med、Dent 的名字。
我在每个单独的行上输入了一个表达式
=lookup(ReportItems!textbox.Value,Fields!Name.Value,Fields!Value.Value, "UDF_Det")
但是,当我 运行 报告时,我得到了额外的行。
从 SQL 中的票中检索到的交易仅检索到 3 行,所以我预料到了。有没有办法过滤特定行的数据?
我看过这个 post 但是因为我没有做任何计算所以我不确定为什么我会得到重复的行。
我的设计是这样的:
输出如下所示:
实际上,现在我已经编辑了你的问题,我明白了问题所在。 :)
您可以只获取 Name
的列表并将其左连接到您现有的查询。
您也许可以从现有的 table 中获取列表(希望如此),或者您可以硬编码一个(尽可能避免)。
假设您需要的所有 Names
都在您的 ticket
table 中,您可以使用类似这样的东西...
SELECT DISTINCT [Name] FROM ticket
(如果名称来自另一个 table,只需更改查询以适应)
然后将您现有的查询加入到此,例如
SELECT n.[Name], t.ticketno, t.control, t.value
FROM (SELECT DISTINCT [Name] FROM ticket) n
LEFT JOIN (
Select ticketno, name, control, value
from ticket a
inner join details b on a.ticketno = b.ticketno
where control like 'LS%' and ticket = 'ED08'
) t
ON n.[Name] = t.[Name]
应该会给你类似的东西
Name
Ticket
Control
Value
Eng
ED08
LS1
A
Acct
ED08
LS2
B
Med
ED08
LS3
C
Dent
NULL
NULL
NULL
然后您可以在 table 的详细信息组中简单地使用一行来输出结果。
如果这没有帮助,post 来自您的数据库的一些示例数据 tables 并显示完整的报告设计,包括行组等
我在 ssrs 中做了一个查找函数,其中源是 reportItem 引用。我想 return 我根据 reportItem 参考查找的 table 中的值。该报告正在检索正确的值,但我得到了重复的行,我想知道是否有办法消除它。我在 tablix 中的参数是基于票号的。
基础数据有 3 个事务,但当前正在 return编辑 9 行。
在 SSRS 中,我的查询是:
Select
ticketno, name, control, value
from ticket a
inner join details b on a.ticketno = b.ticketno
where control like 'LS%' and ticket = 'ED08'
return 结果包含 4 行事务 即:
Ticket | Name | Control | Value |
---|---|---|---|
ED08 | Eng | LS1 | A |
ED08 | Acct | LS2 | B |
ED08 | Med | LS3 | C |
在 SSRS 中,我使用了 table 并对名称进行了硬编码,因为可能没有任何值。 我硬编码了 Eng、Acct、Med、Dent 的名字。
我在每个单独的行上输入了一个表达式
=lookup(ReportItems!textbox.Value,Fields!Name.Value,Fields!Value.Value, "UDF_Det")
但是,当我 运行 报告时,我得到了额外的行。
从 SQL 中的票中检索到的交易仅检索到 3 行,所以我预料到了。有没有办法过滤特定行的数据?
我看过这个 post
我的设计是这样的:
输出如下所示:
实际上,现在我已经编辑了你的问题,我明白了问题所在。 :)
您可以只获取 Name
的列表并将其左连接到您现有的查询。
您也许可以从现有的 table 中获取列表(希望如此),或者您可以硬编码一个(尽可能避免)。
假设您需要的所有 Names
都在您的 ticket
table 中,您可以使用类似这样的东西...
SELECT DISTINCT [Name] FROM ticket
(如果名称来自另一个 table,只需更改查询以适应) 然后将您现有的查询加入到此,例如
SELECT n.[Name], t.ticketno, t.control, t.value
FROM (SELECT DISTINCT [Name] FROM ticket) n
LEFT JOIN (
Select ticketno, name, control, value
from ticket a
inner join details b on a.ticketno = b.ticketno
where control like 'LS%' and ticket = 'ED08'
) t
ON n.[Name] = t.[Name]
应该会给你类似的东西
Name | Ticket | Control | Value |
---|---|---|---|
Eng | ED08 | LS1 | A |
Acct | ED08 | LS2 | B |
Med | ED08 | LS3 | C |
Dent | NULL | NULL | NULL |
然后您可以在 table 的详细信息组中简单地使用一行来输出结果。
如果这没有帮助,post 来自您的数据库的一些示例数据 tables 并显示完整的报告设计,包括行组等