SSRS multi value parameter expansion invalidates query syntax
These results from from running a demo solution and profiling the server.
--- here is the text of the query saved in the report's design ---
select *
from test_ssl
where [who] in(case when @P1 = 'all' then [who] else @P1 end)
and [recid] in(case when @P2 = 'all' then [recid] else @P2 end)
Executing the report works when @P1 = ‘all’, @P2 = ‘all’
---------------------------------------- as executed at the server ---------------------------
(@P1 nvarchar(3),@P2 nvarchar(3))
select *
from test_ssl
where [who] in(case when @P1 = 'all' then [who] else @P1 end)
and [recid] in(case when @P2 = 'all' then [recid] else @P2 end)
Executing the report fails when @P1 = (‘kid’,’adult’) & @P2 = ‘all’
An error has occurred during report processing. (rsProcessingAborted)
Query execution failed for dataset 'DataSet1'. (rsErrorExecutingCommand)
For more information about this error navigate to the report server on the local server machine, or enable remote errors
---------------------------------------- as executed at the server ---------------------------
exec sp_executesql
N'select *
from test_ssl
where [who] in(case when N''kid'',N''adult'' = ''all'' then [who] else
N''kid'',N''adult'' end)
and [recid] in(case when @P2 = ''all'' then [recid] else @P2 end)
', N'@P2 nvarchar(3)', @P2=N'all'
SSRS expanded @P1 into its values then substituted @P1 with 'kid','adult' in the query's text, then sent the text to SQL server using sp_executesql().
This substitution invalidates the SQL syntax. The report fails.
For me to implement this simple example with only 2 parameters in separate queries in the report where @P1 &/ @P2 can each separately be {= 'all', or 1 value, or more than 1 value} will take 4 separate queries.
Query1: IF @P1 = all, @P2 = all BEGIN ... query text 1 ... END
Query2: IF @P1 != all, @P2 = all BEGIN ... query text 2 ... END
Query3: IF @P1 = all, @P2 != all BEGIN ... query text 3 ... END
and
Query4: IF @P1 != all, @P2 != all BEGIN ... query text 3 ... END
Each query will have to have a unique WHERE clause.
In my actual work problem some reports take 8 parameters that will be either 'all', 1 value, or multiple values.
This means that the report will have to have 64 queries each with its own unique WHERE clause and each query wrapped with its own IF @P..... = 'all' BEGIN ... query text ... END
Who knows what to do about this issue?
Hello!
Hi Stevesl,
I have tested on my local environment and the query is invalid.
As
Jan Pieter Posthuma mentioned that you can just add filter as below in the query, when you set the "Allow multiple values" in the parameter, you will got the "Select All" in the dropdown list, so there is no need to add "all"
again.
select * from test_ssl
where [who] in(@P1) and [recid] in(@P2)
You can also add filter in the dataset, details information below for your reference:
By default we can add many filters and the default logic between these filter is "And" and if you want to add some "Or" filters you can reference to the blog below:
FAQ: How do I implement OR logic or complicated logics for filters in a SSRS report?
Details information about filter in SSRS :
Add a Filter to a Dataset (Report Builder and SSRS)
Because you have a lot of parameters and you can consider add the cascading parameters:
Add Cascading Parameters to a Report (Report Builder and SSRS)
If you still have any problem, please feel free to ask.
Regards
Vicky Liu
Vicky Liu
TechNet Community Support
Similar Messages
-
Hey,
I created a report in Reporting Services where I added multi-value parameter
( Filter). When I run my report, and try to select more than one parameter, I get an error: Incorrect syntax near ','
then i put in parameter expression : join(Parameters!Filter.Value,",")
and add : dbo.ufnSplit before calling parameter in query :
>>> set @valwhere = 'table.field IN (select * from dbo.ufnSplit(' + @Filter + ' , '',''))'
but i still have errors : incorrect syntax near 'text' which is the second value of the picklist of the parameter,
Please Any idea ?
Thanks !!I have sometimes had to collate as default with the SQL query
currently I've just using
CompanyName in
(selectitemfromdbo.fnSplit(@function,','))
In the SSRS report text box I have Join(Parameters!Company.Value,",") -
Use one value of multi value parameter in dataset query
I have a parameter @Period that is populated with posting periods from our financial system (e.g. 201301, 201302, 201303, etc.). It is set as a multi value parameter to allow users to choose multiple posting periods. This parameter
is used in my main dataset. If the user chooses 201301 and 201302, I want to choose the greatest value chosen and use it in a where clause such that MyPostPeriod <= @Period. Since @Period is a multivalue, the ><= won't work.
I read that SSRS just passes this as a comma separated value (201301,201302). How do I find the greatest value in the list and how do I use that in my where clause?
the user is selecting projects with activity during the posting period but then I want to grab all costs and invoices since the project was created. They choose to see activity in 201301 and 201302 but I need to get all invoices and costs <= 201302.
The only option I have been able to come up with is to have two parameters - one for start period and one for end period. Any better solutions? I'm not using stored procedures.
Milissa HartwellHi Milissa,
Based on your description, you want to get the Maximum value from a multi-value parameter. We can insert the selected values into a temp table and get the Maximum values. Suppose we have main dataset (DataSet1) include Period field, and a parameter Period
in the report. Please refer to the following steps:
Create another dataset named DataSet2 using the query below.
CREATE TABLE #Max (COL1 INT)
INSERT INTO #Max Values(1)
SELECT * FROM #Max
Double click DataSet2, change the dataset using the expression below:
="CREATE TABLE #Max (COL1 INT)" &
"INSERT INTO #Max VALUES (" & Join(Parameters! Period.Value,"),(") &")" &
"SELECT TOP 1 * FROM #Max ORDER BY COL1 DESC"
Create a parameter (Max) set the Data Type to “Integer”, and get the available values and default values from the DataSet2 COL1. Then, set the visibility to “Hidden”.
Double click the DataSet1, click Filters in the left pane. Fill with following values:
Expression: [Period]
Operator: <=
Value: [@Max]
Please refer to the following screenshot:
Regards,
Alisa Tang
Alisa Tang
TechNet Community Support -
How to increase the width of the drop down list box in SSRS multi value parameter
Hi,
I am using SSRS 2012. I have a parameter, which accepts multi value.
The width of the drop down list box is very small, and the user need to scroll to the right to view the complete view of the content in the list box. But, if I don't use multi value then the length is good. Kindly suggest how to I increase the width
of the list box when it set to multi value parameter.
Thanks in advance,
Mahalengam ArumugamHi Mahalengam,
After testing the issue in my local environment, I can reproduce it. When the values for a single parameter are too long, the drop-down list of the parameter will automatically enlarge to an appropriate size. While the values for a multiple parameter are
too long, we need to scroll to the right to view the complete view of the content in the list box in SSRS 2008. But in SSRS 2008R2 and SSRS 2012, we can directly drag the black control at the bottom of the list box to control the size.
The following screenshot is for your reference:
If there are any other questions, please feel free to ask.
Thanks,
Katherine Xiong
Katherine Xiong
TechNet Community Support
Hi Katherine,
Thanks for your reply. I understood we need to drag the list box to a maximum size to view the contents.
But, this seems an additional task, i know this is a limitation in the current version of SSRS and hope it will be resolved in the next versions.
Thanks for your efforts,
Mahalengam Arumugam -
Hello Forum Members,
I have a Multi Valued Parameter as text field.
Input field Sale_Month is of the type Nvarchar in the Database and has 2014.01,2014.02,2014.05 etc.
I can multi select the values but when I run the report only values from first check box are retrieved though I have data for all.
Please advise me.
Sqlquery9Go to tablix properties, under Filter tab make sure that the Sale_Month filter expression has "IN" operator. Also make sure that the value expression has =Parameter!Sale_Month.Value
Regards, RSingh -
Stored Proc with SSRS multi value parameter gives " Must Declare scalar Varaiable @StateID
Hi All,
I have one stored proc with @fromDate , @Todate and multivalue input
parameter@StateID of type integer.
When I run below stored proc via SSRS by selecting multiple values thru multiValue parameter into @StateID...it gives error saying "Must Declare scalar variable @StateID"
Not sure what is wrong with the input parameters.
ID is Integer type in all the 3 tables - dbo.EastCities, dbo.WestCities , dbo.Country
I need help fixing this "Must Declare scalar variable @StateID" error
This is the UDF split() I am using..
Function:
CREATE FUNCTION dbo.SplitStateID
( @List VARCHAR(MAX))
RETURNS TABLE
AS
RETURN
( SELECT DISTINCT [Value] = CONVERT(INT, LTRIM(RTRIM(CONVERT( VARCHAR(12),SUBSTRING(@List, Number, CHARINDEX(',', @List + ',', Number) - Number))))
FROM dbo.Numbers
WHERE Number <= CONVERT(INT, LEN(@List))AND SUBSTRING(',' + @List, Number, 1) = ',' );
GO
SELECT [Value] FROM dbo.SplitStateID('10,30,50');
Also, I have created dbo.Numbers table which is used in udf..
reference url -- >
http://sqlblog.com/blogs/aaron_bertrand/archive/2009/08/01/processing-a-list-of-integers-my-approach.aspx
SET NOCOUNT ON;
DECLARE @UpperLimit INT;
SET @UpperLimit = 10000;
WITH n AS(
SELECT rn = ROW_NUMBER() OVER (ORDER BY s1.[object_id])
FROM sys.objects AS s1
CROSS JOIN sys.objects AS s2
CROSS JOIN sys.objects AS s3)
SELECT [Number] = rn - 1
INTO dbo.Numbers FROM n
WHERE rn <= @UpperLimit + 1;
CREATE UNIQUE CLUSTERED INDEX n ON dbo.Numbers([Number]);
Stored procedure:
Create Procedure dbo.CountrySelection
( @FromDate Date, @ToDate Date, @StateID Int)
AS
BEGIN
set nocount on;
SELECT * INTO #EastCities
FROM (
SELECT ID,Description from dbo.EastCities
Where ID IN (SELECT Value from dbo.SplitStateID(@StateID))
) AS A
SELECT * INTO #WestCities
FROM (
SELECT ID,Description from dbo.WestCities
Where ID IN (SELECT Value from dbo.SplitStateID(@StateID))
) AS B
SELECT * INTO #Country
FROM (
SELECT ID , Description, State,Country From dbo.Country
) AS C
SELECT EC.ID AS East, WC.ID AS West , EC.Description AS EastDesc, WC.Description AS WestDesc, CT.State, CT.Country
FROM #Country CT
LEFT JOIN #EastCities EC ON CT.ID=EC.ID
LEFT JOIN #WestCities WC ON CT.ID=WC.ID
DROP TABLE #EastCities
DROP TABLE #WestCities
DROP TABLE #Country
END
Above 3 temp tables are joined by #Country.ID key
It works fine when single value is passed in @StateID
Exec dbo.CountrySelection '01/01/2010','02/01/2010',10
It fails when multi value passed into @StateID
Exec dbo.CountrySelection '01/01/2010','02/01/2010','10,30,40'
SSRS error log shows "Must declare scalar variable @StateID"
Need help in fixing this issue.
Thanks,
RH
sqlVisakh,
I changed @StateID date type to varchar(max) and still I get this error.
System.Data.SqlClient.SqlException: Must declare the scalar variable "@StateID".
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
I am running this SO in SSRS quert Type =Text
Actually sp created on db2 database and due to some limitations I am running(via SSRS) this from different db1 database data source within the same db server. When I run this sp from SSRS query designer(edit query designer button) and pass
multivalue parameters to @StateID as 10 , 20 it works and gives expected resultset.
Thanks,
RH
sql -
CASE Statement in Where Condition with Multi Valued parameter in SSRS
Hi All,
I am little confused while using CASE statement in Where condition in SSRS. Below is my scenario:
SELECT
Logic here
WHERE
Date IN (@Date)AND
(CASE
WHEN NAME LIKE 'ABC%' THEN 'GROUP1'
WHEN ID IN ('123456', '823423','74233784') THEN 'GROUP2'
WHEN ABC_ID IS NULL THEN 'GROUP3'
ELSE 'GROUP4'
END ) IN (@GROUP)
So above query uses WHERE condition with CASE statement from @GROUP parameter. I want to pass this parameter as multi- valued parameter and hence I have used CASE statement IN (@GROUP).
For @Date one dataset will pass the available and default values and
for @GROUP parameters, another dataset will pass the available and default values.
But this is not working as expected. Please suggest me where I am making mistake in the query.
Maruthu | http://sharepoint-works.blogspot.comHi Maruthu,
According to your description, I create a sample report in my local environment. It works as I expected. In your scenario, if the selected values from the Date parameter contains some of the Date field values, the selected values from the GROUP parameter
contains some of GROUPS (‘GROUP1’,’GROUP2’,’GROUP3’,’GROUP4’) and the corresponding when statement is executed , then the dataset returns the corresponding values.
In order to trouble shoot this issue, could you tell us what results are you get and what’s your desired results? If possible, you can post the sample data with sample dataset, then we can make further analysis and help you out.
Thanks,
Katherine Xiong
Katherine Xiong
TechNet Community Support -
SSRS : Reporting Services - Multi-Value Parameter Issue
Hi,
This problem is been around the blogs and forums for while now but may be it's not answered to the fullest. I couldn't get any satisfactory or completed solution on the issue so far, any clues/help will be highly appreciated.
My scenario is very simple :-
I am using SQL Server 2005 and SSRS. I need to develop a report which has a parameter value called Customer Name. The users should be able to select multiple customers from the list and sometimes Select All also. I tried the following :-
Created two data sets : Second dataset is just to populate the Customer Name
Created a Report Parameter and mapped with the query parameter where it says "Where CName in (@Parameter1)"
Nothing seems to be working although I tried to apply all the existing half-way solutions currently available in the forums. May be I am not getting to the right solution.
Here is what's happening :-
When used '?' like "where CName = ?" then it's working fine for the single value. {Multi value query cannot be used with ?}
But for multiple values when used @Parameter1 like "where CName in (@Parameter1)" it's giving the following error
Cannot add multi value query parameter '@Parameter1' for data set 'Dataset1' because it is not supported by the data extension.
However if commented this line it's pulling all the values whether or not selected from the parameter list.
This is the basic thing which I was not able to get the desired result, in addition I was looking to get the Customer Name parameter selected with a partial entry as we use LIKE. Example :- If the user enters 'St' in the text box the list should show all the names starting from those two letters
Starter
Steve
Steven
Stevenson etc.
I am not sure whether I'll will be able to get to this extent or not but until the multi value parameter, I am desperate to get the solution. So any sort of help/advise is highly appreciated.
Regards,Hi,
This problem is been around the blogs and forums for while now but may be it's not answered to the fullest. I couldn't get any satisfactory or completed solution on the issue so far, any clues/help will be highly appreciated.
My scenario is very simple :-
I am using SQL Server 2005 and SSRS. I need to develop a report which has a parameter value called Customer Name. The users should be able to select multiple customers from the list and sometimes Select All also. I tried the following :-
Created two data sets : Second dataset is just to populate the Customer Name
Created a Report Parameter and mapped with the query parameter where it says "Where CName in (@Parameter1)"
Nothing seems to be working although I tried to apply all the existing half-way solutions currently available in the forums. May be I am not getting to the right solution.
Here is what's happening :-
When used '?' like "where CName = ?" then it's working fine for the single value. {Multi value query cannot be used with ?}
But for multiple values when used @Parameter1 like "where CName in (@Parameter1)" it's giving the following error
Cannot add multi value query parameter '@Parameter1' for data set 'Dataset1' because it is not supported by the data extension.
However if commented this line it's pulling all the values whether or not selected from the parameter list.
This is the basic thing which I was not able to get the desired result, in addition I was looking to get the Customer Name parameter selected with a partial entry as we use LIKE. Example :- If the user enters 'St' in the text box the list should show all the names starting from those two letters
Starter
Steve
Steven
Stevenson etc.
I am not sure whether I'll will be able to get to this extent or not but until the multi value parameter, I am desperate to get the solution. So any sort of help/advise is highly appreciated.
Regards,
you speak spanish -
Need to display the first 5 values of a Multi value parameter in SSRS report
Hi All,
I have SSRS report with multi value parameter. I need to display the parameter selection values in a text box. I've more than 50 records in the multi value parameter list. I've included the code to display "All" if I choose "select
all" option otherwise it will show the selected values. But, I need to change the logic. I have to show only the 1st 5 records if I choose more than 5 records.
How can I implement this?
I have used the below code
=iif(
Parameters!Country.Count = Count(Fields!Country.Value,
"Country")
,"All"
,iif(Parameters!Country.Count>5
,"Display the 1st 5 values"
,Join(Parameters!Country.Value,",")
Regards,
JulieHi Julie,
Per my understanding that you want to always show the first values from the param country to a textbox when you have select more then five values from the dropdown list, if you checked "select all", textbox will display "All", if
you select <=5 amount of values. it will display the selected values, right?
I have tested on my local environment and that you can create an hide parameter(Param2) to display just the first five values from the Country and when you select more then five values from country you will get the Join(Parameters!Param2.Value,",")
to display.
Details information below for your reference:
Create an new DataSet2 which the Param2 will get the values from:
SELECT TOP (5) Country
FROM tablename
Create an new param2 and hide this parameter, Set the "Available values" and "Default values" by select the "Get the values from a query"(DataSet2)
You can also Specify first five value for the "Available values" and "Default values", thus you will not need to follow the step1 to create the dataset2
Modify the expression you have provided as below:
=iif(Parameters!Country.Count = Count(Fields!Country.Value, "DataSet1"),"All" ,iif(Parameters!Country.Count>5 ,Join(Parameters!Param2.Value,","),Join(Parameters!Country.Value,",")))
Preview like below
If you still have any problem, please feel free to ask.
Thanks,
Vicky Liu
If you have any feedback on our support, please click
here.
Vicky Liu
TechNet Community Support -
How to make multi value parameter optional in SSRS
I HAVE REPORT IN SSRS 2005.
I have @strjournal as multi value parameter. Allow blank is checked. Parameter values r assigned through query.
select jornalno,jornalno as descr from tran_table
union select 'NULL','NULL'
So for @strjournal, valuefield = jornalno , label field = descr
my main query i am giving,
select .... from myTable where (TRANKEY IN (@strjournal) AND @strjournal<> 'NULL' ) OR (TRANKEY LIKE '%' AND @strjournal = 'NULL')
If i select 'NULL' its giving me correct result (returning all records as condition is like '%')
if i select only 1 journalno (not 'NULL') also giving me correct result (i.e. only 1 record for which jornalno is selected)
if i select more than 1 jornalnos then its giving me error "an expression of non boolean type specified in a context where condition is expected , near ',' "
Any help ??
h2007I have report in SSRS 2005 with multi value parameter.
@strjournal is multi value parameter. Allow blank is checked. Values r assigned by below query
select journalno,journalno as descr from tranTable
union
select 'NULL','BLANK'
so for @strjournal, value field = journalno and label field = descr
My main query is,
select ---- from mainTable where
(TRANKEY IN (@strjournal) AND @strjournal<> 'NULL' ) OR (TRANKEY LIKE '%' AND @strjournal = 'NULL')
if i select 'NULL' gives me correct result (returns all rows as condition is like '%')
if i select only 1 journalno (not 'NULL') also gives me correct result (returns only 1 record for which journalno is selected)
if i select more than 1 journal nos gives me error, An expression of non-boolean type specified in a
context where a condition is expected, near ','
if i select more than 1 values (though i have selected it as multi-value) its giving me error.
if i just give condition,
select ---- from mainTable where (TRANKEY IN (@strjournal))
then i can select multiple
h2007 -
How to set the default selection to "Select All" in a Multi valued parameter in SSRS 2008?
Hello Everyone,
How to set the default selection to "Select All" in a Multi valued parameter in SSRS 2008?
Regards
Gautam S
RegardsYou need to specify "Default Values" in the report parameter property. Choose similar option used in the "Available Values" option, this will allow the parameter to check "Select All".
Regards, RSingh -
How to design SSRS report to filter multi-value parameter?
I developed an RDL which takes a multivalue parameter and I want to set a visibility expression or filter based on this parameter. This parameter uses an "All" value equal to '660E4583-7F29-4D37-8038-5096AE6A1A7F'.
I want to make the main tablix visible if this parameter is set to this uniqueidentifier and invisible otherwise. How can I achieve this either in the tsql dataset or on the report side? I have tried numerous workarounds, but none have worked so far! I've tried
different expressions and datatypes.
Before I tried If/Else statements in the tsql dataset, but most recently I instead added flags to the tsql dataset for each condition and am trying to make this tablix only include the records with the flag matching the parameters chosen. But even this is not
working for me.
Here is sample data:
create table #dummydata
parameter varchar(max),
b varchar(max)
insert #dummydata values('660E4583-7F29-4D37-8038-5096AE6A1A7F','record 1'),('660E4583-7F29-4D37-8038-5096AE6A1vcd','record 2'),('660E4583-7F29-4D37-8038-5096AE6A1v52','record 3')
select * from #dummydata
And my filter expression in the RDL for this tablix is:
=iif(Parameters!Modifier.Value(0)="660E4583-7F29-4D37-8038-5096AE6A1A7F",1,0)
With datatype = integer and value = 1 However, this tablix is invisible with the above even when I choose "All" for the parameter value = default value. How can I make this tablix visible?
Ryan DHi Ryan D,
After testing the scenario in my local environment, everything goes well. As per my understanding, I think this issue can be caused by the Available values in the Modifier parameter. Could you tell us the Available values of Modifier parameter in your scenario?
The following scenario in my test is for your reference:
I create a dataset with the sample data you posted.
Add a multi-value parameter named Modifier in the report.
Specify the following values in the Available Values of the parameter (please note that the value “All” should be located in the first place, because we use Parameters!Modifier.Value(0) in the filter):
Label: All Value: ="660E4583-7F29-4D37-8038-5096AE6A1A7F"
Label: A Value: ="1"
Label: B Value: ="2"
Label: C Value: ="3"
Drag a table to the design surface, insert parameter and b fields in the table.
Use the same expression as you said to add a filter in the tablix.
We can refer to the following screenshot:
If there are any other questions, please feel free to ask.
Thanks,
Katherine Xiong
Katherine Xiong
TechNet Community Support -
Display Blank Tablix when using multi value parameter in SSRS 2008 R2
I have a main report which contains tablix1 and tablix2. Tablix1 is using DataSet1 and Tablix2 is using DataSet2. I have a multi value parameter set up with 71 items to choose from. My company owns 71 convenience stores and what I am doing is comparing sales
for a hard coded date in DataSet1 versus a hard coded date in DataSet2, sales for the same date 1 year ago. Pretty simple, works great when both datasets return data. However, we have a store that we opened up about 4 months ago. The data is displayed
in Tablix1, but since the store did not exist 1 year ago, there is no data for Tablix2. I have tried the "No Row Message" and Repeating Column and Row Headers, etc. When I choose all stores that existed last year, the report runs great. When I choose
a store that existed last year and our new store (#39) that did not, the report messes up. The below image, you can see Tablix1 is good, but Tablix2 should be blank and only show the column headers. Instead it moved Store #40's Tablix1 beside it. If I
run the report and just select store #39, Tablix1 runs as it should and Tablix2 shows The column headers and a blank row. It disappears as soon as I select multiple values.
When you click the next page button, you will see Store 40's Tablix2 where it's Tablix1 should be and then a blank space where Tablix2 should be.Hi BassMan75,
According to your description, there is a main report with subreport, since the store did not exist one year ago, there is no data for the subreport. You want to show tablix grid even through there is no data in subreport, right?
Report data comes from datasets, if there is no corresponding value in the dataset, only column headers will be displayed in the report, we could not set the rows to blank, so we can’t achieve your goal directly. As a workaround, we can put one text box
in the report with the message: No data for the store. In this way, if there is no data meets search condition, the message will be displayed in the report. Please refer to the following steps:
Click and select the tablix.
In Properties window, in No Rows section, in NoRowsMessage text box, type No data for the store.
If you have any more questions, please feel free to ask.
Thanks,
Wendy Fu
Wendy Fu
TechNet Community Support -
Reporting Services Multi Value Parameter
I have an SSRS 2005 report that I want to enable for multi value. However, I always run into the issue with the way it passes multiple values. How exactly do I get a multi-value parameter setup and working on both the report AND SQL side?
I used the MS example of checking the multi checkbox for the parameter and then using a WHERE Column IN (@MultiParam), but this doesn't work. When you select one item, or is it multiple I can't remember, it fails. I really appreciate the help!
Nathon Dalton
Software Developer
Systems Administrator
Network Administrator
Blog: http://nathondalton.wordpress.comHere's a sample of the SQL stored procedure that I use to get the dataset:
Create
proc [dbo].[spStoredProcName]
@supervisor
varchar(max)
as
begin
create
table #tempSups
Supervisor
varchar(62)
declare
@i
int
select
@i = 0
select
@i =
charindex(',',@supervisor
begin
if @i
<> 0
while @i
>0
begin
insert
into #tempSups
values
(ltrim(rtrim(left(@supervisor,
@i-1))))
select @supervisor
=
right(@supervisor,
len(@supervisor)
- @i)
select @i
=
charindex(',',
@supervisor)
end
end
insert
into #tempSups
values
(ltrim(rtrim(@supervisor)))
From there, simply join your query to the temp table -
Multi value parameter sniffing
DECLARE
@w1_p int,
@w2_p int,
@month_p int,
@usdTHISweek_p float,
@usdLASTweek_p float,
@MASS_KIB_p nvarchar(max),
@branch_eq_ccode_p nvarchar(max)
set @w1_p=@w1
set @w2_p=@w2
set @month_p=@month
set @usdTHISweek_p=@usdTHISweek
set @usdLASTweek_p=@usdLASTweek
set @MASS_KIB_p=@MASS_KIB
set @branch_eq_ccode_p=@branch_eq_ccode
select a.* from
(SELECT
case when cat.NAME='MASS' then 'MASS' else 'КИБ' end as mass_kib,
cb.NAME_GEN as oper_typeGEN,
cb.NAME as oper_type,
case when br.name is null then 'не определен' else br.name end as BRANCH_EQ_CCODE,
case when cat.NAME is null then 'Прочие' else cat.NAME end as 'segm',
t.END_PRD_ID,
sum(case when END_PRD_ID=@w1_p then t.FACT_WEEK else 0 end) as 'w1',
sum(case when END_PRD_ID=@w2_p then t.FACT_WEEK else 0 end) as 'w2',
sum(case when END_PRD_ID=@w1_p then t.FACT_MONTH else 0 end) as 'this week_month',
sum(case when END_PRD_ID=@w1_p then t.PLAN_MONTH else 0 end) as 'plan_month',
null as 'month_fact',null as 'month_plan',null as 'month_endprdid',
sum(case when END_PRD_ID=@w1_p then t.FACT_YEAR else 0 end) as 'fact_year',
sum(case when END_PRD_ID=@w1_p then t.PLAN_YEAR else 0 end) as 'plan_year'
FROM [ODS_REPLICA].[stg].[CBClient_week] t
inner join (select * from hnd.OLI_CBMEASID where RB_flag=1) cb on t.CB_MEAS_ID=cb.CB_MEAS_ID and t.BUSINESSTYPE_UK=cb.BUSINESSTYPE_UK
left join stg.client cl on t.CLT_PIN_CD=cl.k_client and t.EN_BRANCH_ID=cl.branch_id
left join hnd.OLI_BRANCH br on t.BRANCH_EQ_CCODE=br.BRANCH_EQ_CCODE
left join hnd.OLI_CAT cat on cl.CAT=cat.CAT
where END_PRD_ID=@w1_p and end_prd_id=@w2_p
group by t.END_PRD_ID,cb.NAME,cb.NAME_GEN,cat.NAME,br.name
union all
SELECT
case when cat.NAME='MASS' then 'MASS' else 'КИБ' end as mass_kib,
cb.NAME_GEN as oper_typeGEN,
cb.NAME as oper_type,
case when br.name is null then 'не определен' else br.name end as BRANCH_EQ_CCODE,
case when cat.NAME is null then 'Прочие' else cat.NAME end as 'segm',
null,
null,null,null,null,
sum(t.FACT_MONTH),
sum(t.PLAN_MONTH),
t.END_PRD_ID,null,null
FROM [ODS_REPLICA].[stg].CBClient_month_since2012 t
inner join (select * from hnd.OLI_CBMEASID where RB_flag=1) cb on t.CB_MEAS_ID=cb.CB_MEAS_ID and t.BUSINESSTYPE_UK=cb.BUSINESSTYPE_UK
left join stg.client cl on t.CLT_PIN_CD=cl.k_client and t.EN_BRANCH_ID=cl.branch_id
left join hnd.OLI_CAT cat on cl.CAT=cat.CAT
left join hnd.OLI_BRANCH br on t.BRANCH_EQ_CCODE=br.BRANCH_EQ_CCODE
where END_PRD_ID=@month_p
group by t.END_PRD_ID,cb.NAME,cb.NAME_GEN,cat.NAME,br.NAME
)a
where a.branch_eq_ccode in (@branch_eq_ccode_p) and a.MASS_KIB in(@MASS_KIB_p)
Hi! I`m having great trouble sniffing multi-value parameter.
The problem is that the query runs in SSMS about 5 seconds and in SSRS about 1 minute.
My multi valued parameters are below. I added fx (="'" + JOIN(Parameters!MASS_KIB.Value, "','") + "'") in the parameters options for the dataset, but the results of the query are blank.
I feel like i`m wrong with all the sp_exec and N'....stuff.
Please help me with that.
Oleg
@branch_eq_ccode_p,@MASS_KIB_pAs I understand the filter condition is not correct.
you need to make it as below for multi parameter to work correctly
CREATE TABLE #branchcodes
BranchCode varchar(50)
INSERT #branchcodes
SELECT Val
FROM dbo.ParseValues(@branch_eq_ccode_p,',')
CREATE TABLE #MASSKIBs
MASSKIB varchar(50)
INSERT #MASSKIBs
SELECT Val
FROM dbo.ParseValues(@MASS_KIB_p,',')
SELECT ...
FROM ..
INNER JOIN #branchcodes bc
ON bc.BranchCode = ac.branch_eq_ccode
INNER JOIN #MASSKIBs mk
ON mk.MASSKIB = a.MASS_KIB
Also see ParseValues here
http://visakhm.blogspot.in/2010/02/parsing-delimited-string.html
Please Mark This As Answer if it helps to solve the issue Visakh ---------------------------- http://visakhm.blogspot.com/ https://www.facebook.com/VmBlogs
Maybe you are looking for
-
How can I find out the status of my podcast feed submission?
I submitted a podcast feed for approval 2 1/2 weeks ago. I've yet to get an approval. I got the acknowledgement email. I followed up a week ago; and they asked me to send my feed to them again for reference. Nothing. As many podcasts as they have, it
-
Will deleting a column at logical schema delete the same at physical level by DDL Sync?
Will deleting a column at logical schema delete the same at physical level by DDL Sync?
-
How to bypass the login popup in AutoVue20 integrated to DMS (UCM, SP)
Hi, Can anybody please help me, if I need to make any changes at AutoVue 20 side or DMS (UCM or SP) side to avoid the login credentials popup appearing again and again whenever I try to view any document with AutoVue. I know it's a security feature b
-
Trouble converting powerpoint files with png images to pdf-Can someone help?
Hello all, In my line of work, I create and modify large sized posters that are created in powerpoint. I would have the files print ready by converting them to pdf. I usually have little to no issues executing this. However, I have been dealing with
-
Hi all, i am a newbie to xml. I am making an API call to create a user like this method.setQueryString(params); client.executeMethod(method); To check the response what the api call has returned I do this byte[] responseBody = method.getResponseBody(