У меня есть отчет SSRS 2012, который содержит подотчет в таблице.Я делаю это, чтобы предоставить копию подотчета для каждого из клиентов, выбранных в многозначном параметре @CustomerID основного отчета.
У меня есть набор данных «Клиенты», связанный с табликсом.После этого tablix передает поле с именем CustomerID параметру @CustomerID подотчета (в подотчете параметр @CustomerID не является многозначным).
Затем у меня есть 3 других многозначных параметра (@Assignedto, @OperationalArea и @SiteClass), которые мне нужно передать в подотчет.Я передаю их с помощью сопоставления параметров в свойствах вложенного отчета (например, Assignedto в вложенном отчете сопоставляется с параметрами! Assignedto.Value в основном отчете).
Моя проблема в том, что если у меня выбраны клиенты 1 и 2, а для трех параметров выбраны только те элементы, которые существуют для обоих клиентов, тогда подотчеты будут работать нормально.Однако, если я выбрал элемент в параметрах, который существует только для клиента 1, то вспомогательный отчет не будет выполняться для клиента 2 (даже если для клиента 2 также выбраны действительные позиции).Эта проблема возникает для всех трех многозначных параметров, которые передаются в подотчет.
Например:
- Клиенты 1 и 2 выбраны вместе с @Assignedto для выбора инженера1 и Инженер 2, которые оба являются допустимыми вариантами для Клиента 1 и Клиента 2. В этом случае будут отображаться подотчеты для Клиента 1 и 2.
- Заказчик 1 и 2 выбран вместе с выбором инженеров 1, 2, 3. Инженеры 1 и 2 действительны для обоих клиентов.Инженер 3 действителен только для клиента 1. В этом случае будет отображаться только подчиненный отчет для клиента 1, даже если есть данные для инженеров 1 и 2 для клиента 2. Я получаю сообщение об ошибке «Ошибка: подотчет не может бытьпоказано.
Когда я запускаю сам подотчет, он работает нормально, но значения для многозначных параметров определяются значением параметра @CustomerID (с использованием наборов данных), поэтомуЯ не могу выбрать значения вне допустимых значений для этого клиента.
Я запустил SQL для всех наборов данных в подотчете в SSMS, используя значения для параметров, которые находятся за пределами значений, существующих дляпокупатели.Все это работало нормально.
Я также пытался переключаться между использованием и неиспользованием функции соединения с параметрами набора данных в подотчете, но это ничего не делает.
Я также пытался передатьзначения многозначных параметров из основного отчета с использованием списка с разделителями-запятыми через запрос ниже, который ограничивает список действительными значениями для клиента.Это не решило проблему.
Я в растерянности, и любая помощь будет высоко ценится.
IF OBJECT_ID('tempdb..#Data_Sub') IS NOT NULL DROP TABLE #Data_Sub;
Select distinct
CustomerID
,[AssignedToUser]
,null as OperationalArea
,null as SiteClass
Into
#Data_Sub
from
[FAMSDB].[dbo].[Incidents_Full_PI] as IFPI
inner join
(
select
item
from
[FAMSDB].[dbo].SplitToTable
(@CustomerID,',')
) as CID on IFPI.CustomerID = CID.item
where
ReportedFaultCode in ('SPD','SPO','SRD','SRO','SEO','SED')
and CASE when [AssignedToUser] in (select item from
FAMSDB.dbo.SplitToTable(@Assignedto,',')) then 1
else 0
end = 1
Union
Select distinct
CustomerID
,null
,OperationalArea
,null
from
[FAMSDB].[dbo].[Incidents_Full_PI] as IFPI
inner join
(
select
item
from
[FAMSDB].[dbo].SplitToTable
(@CustomerID,',')
) as CID on IFPI.CustomerID = CID.item
where
ReportedFaultCode in ('SPD','SPO','SRD','SRO','SEO','SED')
and CASE when [OperationalArea] in (select item from
FAMSDB.dbo.SplitToTable(@OperationalArea,',')) then 1
else 0
end = 1
Union
Select distinct
CustomerID
,null
,null
,SiteClass
from
[FAMSDB].[dbo].[Incidents_Full_PI] as IFPI
inner join
(
select
item
from
[FAMSDB].[dbo].SplitToTable
(@CustomerID,',')
) as CID on IFPI.CustomerID = CID.item
where
ReportedFaultCode in ('SPD','SPO','SRD','SRO','SEO','SED')
and CASE when [SiteClass] in (select item from
FAMSDB.dbo.SplitToTable(@SiteClass,',')) then 1
else 0
end = 1
union
select
item
,case when 'Unassigned' in (select item from
FAMSDB.dbo.SplitToTable(@Assignedto,',')) then 'Unassigned'
else null
end
,case when 'Unassigned' in (select item from
FAMSDB.dbo.SplitToTable(@OperationalArea,',')) then 'Unassigned'
else null
end
,case when 'Unassigned' in (select item from
FAMSDB.dbo.SplitToTable(@SiteClass,',')) then 'Unassigned'
else null
end
from
[FAMSDB].[dbo].SplitToTable (@CustomerID,',')
union
select
item
,case when 'N/A' in (select item from
FAMSDB.dbo.SplitToTable(@Assignedto,',')) then 'N/A'
else null
end
,case when 'N/A' in (select item from
FAMSDB.dbo.SplitToTable(@OperationalArea,',')) then 'N/A'
else null
end
,case when 'N/A' in (select item from
FAMSDB.dbo.SplitToTable(@SiteClass,',')) then 'N/A'
else null
end
from
[FAMSDB].[dbo].SplitToTable (@CustomerID,',')
Select
CustomerID
,AssignedToUser
,OperationalArea
,SiteClass
From
(
Select distinct
CustomerID
,case when len((Select [AssignedToUser]+',' From(Select
Distinct CustomerID,[AssignedToUser] From #Data_Sub) as b Where b.CustomerID
= a.CustomerID For XML Path('')))=0 then null
else LEft((Select
[AssignedToUser]+','
From
(
Select Distinct
CustomerID
,[AssignedToUser]
From
#Data_Sub
) as b
Where
b.CustomerID = a.CustomerID
For XML Path(''))
,len((Select
[AssignedToUser]+','
From
(
Select Distinct
CustomerID
,[AssignedToUser]
From
#Data_Sub
) as b
Where
b.CustomerID = a.CustomerID
For XML Path('')))-1
) end as AssignedToUser
,case when len((Select [OperationalArea]+',' From(Select
Distinct CustomerID,[OperationalArea] From #Data_Sub) as b Where
b.CustomerID = a.CustomerID For XML Path('')))=0 then null
else left((Select
[OperationalArea]+','
From
(
Select Distinct
CustomerID
,[OperationalArea]
From
#Data_Sub
) as b
Where
b.CustomerID = a.CustomerID
For XML Path('')),
lEn((Select
[OperationalArea]+','
From
(
Select Distinct
CustomerID
,[OperationalArea]
From
#Data_Sub
) as b
Where
b.CustomerID = a.CustomerID
For XML Path('')))-1
) end as OperationalArea
,case when len((Select [SiteClass]+',' From(Select
Distinct CustomerID,[SiteClass] From #Data_Sub) as b Where b.CustomerID =
a.CustomerID For XML Path('')))=0 then null
else Left((Select
[SiteClass]+','
From
(
Select Distinct
CustomerID
,[SiteClass]
From
#Data_Sub
) as b
Where
b.CustomerID = a.CustomerID
For XML Path(''))
,len((Select
[SiteClass]+','
From
(
Select Distinct
CustomerID
,[SiteClass]
From
#Data_Sub
) as b
Where
b.CustomerID = a.CustomerID
For XML Path('')))-1
) end as SiteClass
From
#Data_Sub as a
) as ConcatSub
where
AssignedToUser is not null
and OperationalArea is not null
and SiteClass is not null
Редактировать: я не проверял подотчет, удаляя фильтр CustomerIDв наборе данных, который возвращает значения для многозначных параметров.Таким образом, теперь они могут иметь выбранные значения параметров, которые недопустимы для выбора клиента.Подотчет по-прежнему работает нормально.Поэтому проблема должна заключаться в том, как параметры передаются в подотчет.