Multi-value join
Hi,
There's something I need to do with the search APIs, and I'm not sure if it's possible.
I need to join a table on itself. My problem is, the two columns I need to use for the join are not of the same data type. One of them is a String and the other is a String array.
If it was a normal AttributeQualification, there would be no problem because it would have checked whether the value existed in the array. But obviously, the JoinQualification does not behave the same way. It gives me an error complaining that the value in the string column is not a valid number! I discovered that the value stored in the array field is only the length of the array and the values themselves are stored in another table.
I was thinking about doing a FreeFormQualification, but there's a part in the array query that I do not know how to get; this is the attributeid in the following query
"( select objectid from ODM_AVSTRINGARRAY where ODM_AVSTRINGARRAY.objectid = LET.id and ODM_AVSTRINGARRAY.attributeid = 244907 and ODM_AVSTRINGARRAY.VALUE = 'sig.gif' )"
Would you recommend the FreeFormQualification, or will it be to tied to the not necessarily stable infrastructure (I mean stable from one release to the other).
If not, is there any other solution?
Any help is appreciated.
Thanks
Hi,
It seems like no one can help me with this issue. Can anyone advice me on where else to ask this question. I'm not sure if that kind of question can be asked on Metalink.
Similar Messages
-
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 -
SSAS report action to pass multi-value list of dimention key values to a SSRS report parameter
This was originally posted on StackOverflow and suggested I try here as well.
I want to create a report action in an SSAS OLAP cube that generates a list of formatted values to pass into an SSRS report parameter that accepts a multi-valued parameter list. This would be applied at the
cell level in the SSAS action. I have found a solution that gets me most of the way:
How to Pass Multiple Values from an SSAS Report Drill Through Action to an SSRS Multi-Value Parameter, but not quite. The action does appear in Excel and works
if I run the action from a cell that is at or below the dimension attribute I am generating the list for, in this case,
Account Key.
Below is a link to a screen capture (unable to embed it due to lack of reputation) showing the action and dimension structure in Excel. The action works as long as I run it at the
Account Key level or below. I want to be able to run it at higher levels, such as
Account Major and still have it generate all then related Account Key values for the SSRS report parameter. Running it at the higher
Account Major level does not trigger the report to run.
Excel Action Screen Shot:
http://i.stack.imgur.com/QCGSp.png
Below is the MDX I am using to generate the value for the report parameter:
UrlEscapeFragment(
GENERATE(
DESCENDANTS(
[Account].[Account Key].CurrentMember,
[Account].[Account Key].[Account Key]
[Account].[Account Key].CURRENTMEMBER.Name,
"&rp:Account="
I am hoping that I can somehow modify the MDX above to make it return all the
Account Keys for any attribute of the Account dimension when ran from any measure cell, not just when ran at self and children of
Account Key in the pivot table.
Also, if it helps, I can execute the following MDX query on the cube and get the results I am looking for.
WITH MEMBER [Measures].[Account Key List] as
GENERATE(
DESCENDANTS([Account].[Account].CurrentMember, [Account].[Account].[Account]),
[Account].[Account].CURRENTMEMBER.NAME,
"&rp:Account=")
SELECT {[Measures].[Account Key List]} on 0,
([Account].[Account Company Number].[Account Company Number],[Account].[Account Major].[Account Major]
) on 1
FROM [Company 10 Action Demo]
Below are partial results:
10.116&rp:Account=10.116.010
10.117&rp:Account=10.117.010&rp:Account=10.117.020
10.120&rp:Account=10.120.005&rp:Account=10.120.006&rp:Account=10.120.010&rp:Account=10.120.020&rp:Account=10.120.030&rp:Account=10.120.040&rp:Account=10.120.050&rp:Account=10.120.060&rp:Account=10.120.380&rp:Account=10.120.999
10.123
Questions
Any ideas what I might need to do to get Account Key to be returned for any attribute of the
Account dimension?
Would I possibly have to alter my Account dimension in the cube to get this to work?
Thanks in advance.
Edit 1 - Adventure Works Cube Version
I was unable to get the suggested answer with the "Exists" function to work. To better demonstrate this issue, I have recreated it using the Adventure Works Cube.
I will focus on the Customer dimension, specifically the Customer and
Education attributes. I created a report action called Test Report Action. Below is the XML created for it in the cube.
<Action xsi:type="ReportAction" dwd:design-time-name="f35ad5ee-5167-4fb8-a0e0-0a74cc6e81c6">
<ID>Report Action 1</ID>
<Name>Test Report Action</Name>
<TargetType>Cells</TargetType>
<Target></Target>
<Type>Report</Type>
<ReportServer>SQLSERVER</ReportServer>
<Path>ReportServer?/Test Report</Path>
<ReportParameters>
<ReportParameter>
<Name>Test Customer Existing</Name>
<Value>UrlEscapeFragment(
GENERATE(
EXISTING DESCENDANTS(
[Customer].[Customer].CurrentMember,
[Customer].[Customer].[Customer]
[Customer].[Customer].CURRENTMEMBER.Name,
"&rp:Customer="
)</Value>
</ReportParameter>
</ReportParameters>
<ReportFormatParameters>
<ReportFormatParameter>
<Name>rs:Command</Name>
<Value>Render</Value>
</ReportFormatParameter>
<ReportFormatParameter>
<Name>rs:Renderer</Name>
<Value>HTML5</Value>
</ReportFormatParameter>
</ReportFormatParameters>
</Action>
Below are the steps to re-create the issue.
Connect to the cube in Excel
Add dimension Customer -> More Fields -> Customer
Add measure Internet Sales -> Internet Sales Amount
Right-click Internet Sales Amount cell, select "Additional Actions" -> "Test Report Action" and see customer values created for URL
When the action is ran at this point with Customer, I see the values created in the URL shown message box (since there is no SSRS report server at location specified).
Now the part I'm unable to resolve
Remove the Customer dimension and add Customer -> Demographic -> Education
Right-click Internet Sales Amount cell, select "Additional Actions" -> "Test Report Action"
Nothing happens. If I ran the action on the cell next to "Bachelors", I would want it to build up all the list of all the "Customers" that make up the "Bachelors" in the
Customer dimension as part of the report parameter. If no attributes where used in the cube from the
Customer dimension for that cell, then I would like it to return "All Customers", or something similar to show that all customers are included in the aggregations.
I am not too MDX savvy, thus far. I think I need to somehow join the
Customers to Internet Sales Amount in the Generate function portion. I have tried several different combinations of the
Customer dimension and Internet Sales Amount, along with various functions to see if I could get this to work with no success. I am hoping that someone more knowledgeable the me will have a solution. If you need more details,
please ask and I will provide them.Simon,
Thanks for you help with this. This morning I found a workaround. Below describes what that is.
What I ended up doing was getting a list of values from a degenerate dimension that I could use to pass to SSRS to get a list of transactions for a report. Below is how I did this, in relation to the Adventure Works cube using the degenerate dimension
Internet Order Details.
WITH MEMBER [Measures].[Order Param List] AS
GENERATE(
EXISTS([Internet Sales Order Details].[Sales Order Number].[Sales Order Number].Members, ,
"Internet Sales"),
[Internet Sales Order Details].[Sales Order Number].CurrentMember.Name,
"&rp:OrderNum=")
SELECT {[Measures].[Order Param List], [Measures].[Internet Sales Amount]} ON 0
,([Date].[Calendar].[Date]) ON 1
FROM [Adventure Works]
This will get a list of Sales Order Number in a text string, separated by "&rp:OrderNum=" for each measure of
Internet Sales. This would allow me to create an SSRS report to bring back detail information for each
Sales Order Number. Below are some sample results.
May 16, 2007 SO50493&rp:OrderNum=SO50494&rp:OrderNum=SO50495&rp:OrderNum=SO50496&rp:OrderNum=SO50497&rp:OrderNum=SO50498&rp:OrderNum=SO50499&rp:OrderNum=SO50500 $12,157.80
May 17, 2007 SO50501&rp:OrderNum=SO50502&rp:OrderNum=SO50503&rp:OrderNum=SO50504&rp:OrderNum=SO50505&rp:OrderNum=SO50506&rp:OrderNum=SO50507&rp:OrderNum=SO50508 $13,231.62
May 18, 2007 SO50509&rp:OrderNum=SO50510 $4,624.91
With this, I can then create a Report Action in SSRS with a Parameter Value of
UrlEscapeFragment(
GENERATE(
EXISTS([Internet Sales Order Details].[Sales Order Number].[Sales Order Number].Members, ,
"Internet Sales"),
[Internet Sales Order Details].[Sales Order Number].CurrentMember.Name,
"&rp:OrderNum=")
The way I was going about it before was flawed, as I was trying to get a list of the granular values from each dimension used to build the measure value and pass each one of those as separate parameters. I just needed to set something unique for each fact
measure transaction that represents the value and uses that in a query parameter for the SSRS report. -
Passing Multi-Value Parameter to a Stored Procedure
Has anyone experienced passing a Parameter (MultiValue) to a Stored Procedure? I am aware that Crystal Passes the Param as an Array. How would you go about handling this within a Stored Procedure???
Hi Daniel
Try as below:
1. Create a Crystal report, and add a multi-value parameter.
2. Since the multi-value parameter is treated as an array, create a formula that uses the JOIN function. Create a formula as below:
//Formula: @JoinFormula
Join ({?Multi-value parameter array},";")
====================
NOTE:
In the formula above, a semi-colon (";") is the delimiter.
====================
3. Within the main report, create a subreport based on the stored procedure, and include the parameter to be populated with the multi-value list.
4. Link the Join formula in the main report to the stored procedure parameter in the subreport.
Doing so passes a multi-value parameter to the stored procedure.
Hope this helps!!!!
Regards
Sourashree -
Parameter gets reset and Multi-value parameter doesn't work
Hi
Two Issues:
I've set the value of a Date parameter (Start Date) when moving from the home screen (Report 1) to the next screen (Report 2) as the first day of the current year (DateSerial(Year(Today),1,1). In report 2, if I try to change the Start Date to another date,
it gets reset to the first day of the year. I had the default value set as the first day of the year and even after removing it, the Start Date gets reset.
I've set a multi-value parameter (Area) in Report 1 that collects four integers. I pass Area to Report 2 (through Join (Parameters!Area.value,",")). I also used SPLIT (Join (Parameters!Area.value,","),",") to get the value.
Then, in the data set, I call this parameter as "Select A1,A2,A3,B1,B2,B3 FROM TEST_VIEW WHERE ID IN (?)". But this query throws an error that the query could not be executed. I ran the same query on the server side and it runs fine.
Note:
We cannot reference parameter names as @area for example because the Composite Server doesn't allow that.
Split and Join operate on strings but my parameters are of integer type. Is this an issue?
Please help.1. Are setting an expression for available values of parameter in report 2? Is the value you pass a valid among the set of values?
2. IN wont work with comma separated values. You need to parse the individual values out using a string parsing udf as a table and then join to that
so in your case you would be like
Select A1,A2,A3,B1,B2,B3 FROM TEST_VIEW t
INNER JOIN dbo.ParseValues (@Area,',')f
ON t.ID = f.Val
ParseValues UDF can be found in below link
http://visakhm.blogspot.in/2010/02/parsing-delimited-string.html
Please Mark This As Answer if it solved your issue
Please Vote This As Helpful if it helps to solve your issue
Visakh
My Wiki User Page
My MSDN Page
My Personal Blog
My Facebook Page -
I have a report(SSRS 2008) on top of a CUBE which have a subreport which needs to be opened in a new window, Passing the (MDX)parameters from URL, I have created a link which takes single value parameters and works fine, but when i tried to pass multi value MDX parameters it is not working can someone help me on this. Number is multivalue MDX parameter
="javascript:void window.open(" &"'"& Globals!ReportServerUrl &"/Pages/ReportViewer.aspx?"& Globals!ReportFolder &"/Report.rdl&Number="& Parameters!Number.Value &"&FromMonth="& Parameters!FromMonth.Value &"&FromYear="& Parameters!FromYear.Value &"&ToMonth="& Parameters!ToMonth.Value &"&ToYear="& Parameters!ToYear.Value &"','ReportWindow','left=370,top=180,width=575,height=350,status=no,menubar=no,scrollbars=no'" & ")"
Thanks in AdvanceHi Boyan, MDX is same between both the reports...my main report will show top 10 rows and when users wants to see more than ten rows he needs to click on the subreport link.
I found a way to pass multivalue parameter but the problem is i am passing a MDX parameter which will have & ([Division].[Division Name].&[USA]) before the value...so in the java script while passing the parameter value it is taking &value(&[USA]) as new parameter and throws a error message saying &USA not found.
="javascript:void window.open(" &"'"& Globals!ReportServerUrl &"/Pages/ReportViewer.aspx?"& Globals!ReportFolder &"/Report.rdl&Division="& Parameters!Division.Value &"&Number="& Parameters!Number.Value &"&FromMonth="& Parameters!FromMonth.Value &"&FromYear="& Parameters!FromYear.Value &"&ToMonth="& Parameters!ToMonth.Value &"&ToYear="& Parameters!ToYear.Value &"','ReportWindow','left=370,top=180,width=575,height=350,status=no,menubar=no,scrollbars=no,Location=yes'" & ")"
Here in the below link Division is a multi value parameter, after doing some research i found %2526% will replace &, but the problem is when passing the second parameter it is replacing &Division with %2526Division and asking me to enter division manually if i have selected more than one value.
="javascript:void window.open(" &"'"& Globals!ReportServerUrl &"/Pages/ReportViewer.aspx?"& Globals!ReportFolder &"/Report.rdl&Division="& replace(Join(Parameters!Division.Value,"&Division="), "&", "%2526") &"&Number="& Parameters!Number.Value &"&FromMonth="& Parameters!FromMonth.Value &"&FromYear="& Parameters!FromYear.Value &"&ToMonth="& Parameters!ToMonth.Value &"&ToYear="& Parameters!ToYear.Value &"','ReportWindow','left=370,top=180,width=575,height=350,status=no,menubar=no,scrollbars=no,Location=yes'" & ")"
Thanks. -
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 -
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,",") -
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 -
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 -
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 -
CR XI - Pass a Multi-value Parameter to a Stored Procedure
Hello,
Here is my problem !
My Main Report accept a Multi-value Parameter "myParameter".
I create a formula "lstParameter" (Join({?myParameter},',') linked to my SubReport (string static parameter based on a Stored Procedure which returns a RefCursor (ORACLE)).
When I launch the Main Report, he is blank...but if I open the subreport in the overview i can see the result...
it seems like the MainReport don't call the SubReport, or something like that...
I hope you can help me !
Thanks
Anthony
Edited by: anthony.44 on Jan 12, 2012 4:53 PM
Edited by: anthony.44 on Jan 13, 2012 9:51 AMhello,
I resolve my problem....just inside into the detail of the Master report a result of a query (ex: select sysdate from dual)...and the sub report is called correctly -
OpenDocument.aspx - pass multi value parameter when report type is actx
We are running Crystal Reports XI R2 against a business objects infoview server.
We have been successfully using the OpenDocuments method for opening crystal reports but have run into a snag. When using a multi-value parameter, we can only get it to work when the viewer is set to HTML. Setting to ActiveX prompts us to enter in the parameter values manually.
This address works (using sViewer=HTML):
http://vsx2af0x/businessobjects/enterprise115/infoview/scripts/opendocument.aspx?sType=rpt&sViewer=html&lsMpSiteIDs=[1235880],[1235891],[1235902],[1235913]&sPath=[Development][CGIS][Intranet Mapping][COS_Base]&sDocName=DetailedSite&sRefresh=Y
This address does not work (using sVIewer=actx):
http://vsx2af0x/businessobjects/enterprise115/infoview/scripts/opendocument.aspx?sType=rpt&sViewer=actx&lsMpSiteIDs=[1235880],[1235891],[1235902],[1235913]&sPath=[Development][CGIS][Intranet Mapping][COS_Base]&sDocName=DetailedSite&sRefresh=Y
Any thoughts on the problem?As I understand what you need is to use LookupSet function.
Suppose if your dataset is like this (for simplicity I'm showing only required fields)
PersonID Project Company
ID1 P1 C1
ID1 P2 C1
ID1 P3 C2
ID1 P4 C2
ID1 P5 C3
If you want to get the full project list for the person just send the PersonID alone and filter using it in the subreport. You can keep the project/company parameters optional in that case and put a default value. This would be the easiest thing.
Now if you want pass the project parameter also you need to pass it like this
=Join(LookupSet(Fields!Person.Value,Fields!Person.Value,Fields!Project.Value,"DatasetName"),",")
This would act like a self lookup and return you full list of projects for the person and then you can use this to set the parameter value in the subreport.
Please Mark This As Answer if it solved your issue
Please Vote This As Helpful if it helps to solve your issue
Visakh
My MSDN Page
My Personal Blog
My Facebook Page -
How to pass multi-value input parameter to SQL command
I'm having trouble following the threads related to passing multi-value parameters to a SQL command.
I need more details on the work-around that exists for using a dummy main report to GET the input parameters and pass them to a subreport parameter that uses the input parameters in its sql command WHERE clause.
So far the main report prompts user to enter badge numbers into a multi-value string type parameter field called badgeNumber.
The main report getRequesters command executes the following SQL:
SELECT requester FROM lawprod.requester WHERE lawprod.requester.requester IN '{?badgeNumber}'
order by requester
The main report also contains a formula called requesterList that concatenates the input parameters and separates the values with commas: (Join ({?badgeNumber}, ", ")
So if user enters badge numbers 1 and 2 and 3 the value of requesterList is 1, 2, 3
From the main report I've used the Insert Subreport command to choose an existing report, and used the link tab to link @requesterList to ?requester; where ?requester is a multi-value parameter that is used in the subreport's SQL query as shown below:
WHERE (lawprod.ictrans.update_date <= {?endDate} AND
lawprod.ictrans.update_date >= {?startDate} AND
lawprod.ictrans.doc_type = 'IS' AND
lawprod.ictrans.system_cd = 'RQ' AND
lawprod.mmdist.posting_type = 'O1')
AND
(lawprod.ictrans.company = lawprod.mmdist.company AND
lawprod.ictrans.system_cd = lawprod.mmdist.system_cd AND
lawprod.ictrans.location = lawprod.mmdist.location AND
lawprod.ictrans.doc_type = lawprod.mmdist.doc_type AND
lawprod.ictrans.document = lawprod.mmdist.doc_number AND
lawprod.ictrans.shipment_nbr = lawprod.mmdist.doc_nbr_num AND
lawprod.ictrans.line_nbr = lawprod.mmdist.line_nbr AND
lawprod.ictrans.component_seq = lawprod.mmdist.component_seq)
AND
(lawprod.ictrans.company = lawprod.reqline.company AND
lawprod.ictrans.document = lawprod.reqline.req_number_a AND
lawprod.ictrans.line_nbr = lawprod.reqline.line_nbr AND
lawprod.reqline.company = lawprod.reqheader.company AND
lawprod.reqline.req_number = lawprod.reqheader.req_number)
AND
(lawprod.reqheader.requester in '{?requester}')
Following execution of the main report, Crystal appears to prompt for three values as expected: badge numbers for the main report, and start and end dates needed by the subreport. I can't figure out why Crystal XI returns no data. Can anyone explain what I'm missing?
Edited by: Patricia Sims on Sep 21, 2009 9:30 PMThe reason no data is returned is that the multiple values are not (properly?) passed to the main report's SQL. The main report's SQL should be (MS SQL):
select 1 as dummy
This causes exactly one record to be returned, which will basically be ignored (except the fact that it will drive the subreport; any query that returns only 1 record will suffice...).
Change the concatenation of the selected values to be (basic syntax):
formula = "|" + join({?badgeNumber}, "|") + "|"
The leading and trailing vertical bars are important (otherwise a database value of 1 might match a selection of 123).
Pass the concatenated string as the parameter value to the subreport. In your subreport, select records on (basic syntax):
formula = (instr({?sr-badgeParam}, "|"+cstr({requester},"0") + "|") > 0)
(assumes is numeric in the database, and is integer; modify or eliminate cstr() if otherwise...)
Put your subreport on the detail format of the main report, and you're all set...
HTH,
Carl -
Using Calculated Field in Multi Value Field
In Siebel Application
Sales Order---> List
There is a field call "Sales Rep" which displays an "USERID" of Order Sales Team Mvg Applet.
But We want to display the Last Name and First Name (combined).We got the first and last name using calculated field (Active Full name).
When I try to get the full name, the system display the name based on the "Primary position", if I step out of the particular row and come back again
Is there any way to display the full name without step out any rows for Sales Rep fieldYour description is a little confusing. For performance reasons it is always best to set the use primary join on multi value links. This means that when multi value fields are displayed in applets they always show the primary by default. If you want to display something other than the primary what is your rational behind this and why not make the record you want to display the primary?
Message was edited by:
Richard@AXA
Maybe you are looking for
-
IPAD restores applications but not data or files associated with applications
1) Today Itunes prompted me to update the OS on the IPAD. 2) It warned me to back up IPAD before I did. I did 3) I updated software. 4) It returned with an error saying it could not install software and I must restore to facotry settings 5) I resoto
-
How to find out user exit for LI20
any one please tell me how can find user-exit for LI20 Regards, Venkat
-
How to find out the status of "Mark As Approved" in the workflow
Hi All, How can i change the field values for any workflow record once its set as "Mark As Approved".i.e, once the workflow record is set to "Mark As Approved" the value "abc" should be assigned automatically to the field "category". Can anybody
-
Can I use Adobe in my own website
Hi all, Since a few months I'm working on a project to create a javascript framework based on extended tool kit. My goal is to provide a lot of usables class to work with InDesign, Photoshop, Bridge ... I know that a framework called "Extendable" alr
-
Issue with Document Properties/Security
I used adobe 8 proffesional to create a pdf form that I want digitally signed. When I preview, I am able to add a digital signature and Document Properties/Security it indicates signature allowed. When I open the document in Adobe Reader. I cannot