VS2005/SSR2005 Report Controlling Field Visibility By Code
Jan 23, 2007
VS2005/SSR2005 Reporting: How can one control an individual report fields visibility (toggle on/off) at run time, based on data values (of the same field or another field) in the report. Without user having to sit there and "Click".
I have a main report and wanted to embed a sub report in the main table. This is pretty easy enough.
The main report lists the suppliers we have. And the sub report lists any sub suppliers affialiated to those suppliers.
I have set the sub report visibility settings to hidden and is toggled by the suppliers ID.
The problem is that NOT ALL suppliers will have sub-suppliers, yet when you run the report the user gets presented with the option to toggle all suppliers' ID.
Is there any way to have a main report that only allows the user to click on a suppliers ID when that particular supplier has a sub supplier?
I am novice to SQL reporting services. I have created a report using SSRS. In this report I would like to show a column value as button and wants to execute vbscript code on click. Or at least execute vbscript code on click of that field (button is just an option!) The code will launch another application (exe file or else)
I am working on reports in SSRS 2008 (not R2)... There are some reports with parameters that are hidden when the report is accessed through normal URL using ReportViewer.asx..The thing is that these hidden parameters need to be visible when the report is accessed using SSRS Report Manager.
I have a field on a report where on occasion, will display 'PR'. We need to have this field hidden if that is the value of the field. I wrote an expression for visibility like: iif(Fields!ThisName.Value="'PR'", false, true), however it still diplays. Is there something else that I need to do here?
I run into a wirt asp.net sittuation, when coding my ASP.NET page using the traditional old way like this, it runs very fast: Dim thisSQL =" SELECT strAuthorName, strTitle, strContent, lngChapter, tblKiemHiepChapters.strReference FROM tblKiemHiepAuthors A " & _ " INNER JOIN tblKiemHiepTitles B ON A.ID=lngAuthorID " & _ " INNER JOIN tblKiemHiepChapters ON B.ID=lngTruyenID " & _ " AND tblKiemHiepChapters.ID="& e.CommandArgument Dim thisConnection As SqlConnection = new SqlConnection(ConfigurationSettings.AppSettings("DNS2")) Dim thisCommand As SqlCommand = New SqlCommand(thisSQL, thisConnection) thisConnection.Open() dim objReader As SqlDataReader = thisCommand.ExecuteReader() objReader.Read() if objReader.HasRows then if (objReader.Item("strTitle") Is DBNull.Value ) Then thisHeading = Replace(thisHeading, "#HEADING#", "" ) else ''''''''''' end if................ but when I used VISUAL STUDIO.NET way of binding datasouce like below: it runs so damn slow. do you guys know what the problem is? if you need to see the complete code please let me know. this happen when my ntext field that contains lots of text (the code post heredoes not necessary have the same functionality) <asp:SqlDataSource ID="GetContentByChapterID" runat="server" ConnectionString="<%$ ConnectionStrings:nangmoi_cnn_string %>"SelectCommand="SELECT [lngChapter], [strReference], [strContent] FROM [tblKiemHiepChapters] WHERE (ID = @ChapterID)"><SelectParameters><asp:SessionParameter DefaultValue=0 Name="ChapterID" SessionField="ChapterID" Type="Int32" /></SelectParameters> </asp:SqlDataSource>
I have three types of specific reports that i have to create with the input parameters (range) either
1: By date (rdl 1)
2.By Month (rdl 2)
3.By Year (rdl 3)
Is it possible ( or how do I ) to create just one report template ( one rdl) with the three sets of parameters ( hiding/invisible which ever two sets base on user selection) and the output of the report will display the desired type( either by year, month or date).
I ask this because its possible to create a drill down report from year down to date etc in report designer (vs 2005). Not sure if I can create one instead of three rdls and with the 'logic' built within that template.
Hello, I'm using Reporting Services to render a text (stored in sql as varchar(max)). The text is all plain text, with some lines having trailing spaces.
Source text file i've imported to SQL via SSIS: CLIENT: 10055 STATEMENT 2007 DATE:1002993 THIS IS THE OTHER STATEMENT COLUMN1 COLUMN2 COLUMN 3 TRY THIS
*Note the trailing spaces on the line before 'STATEMENT 2007'.
I've designed a report using the Report Project in VS2005 to retrieve this text via a stored procedure. When I test the report using the 'Preview' tab in the IDE, it looks good CLIENT: 10055 STATEMENT 2007 DATE:1002993 THIS IS THE OTHER STATEMENT COLUMN1 COLUMN2 COLUMN 3 TRY THIS
But when I deploy the report and run it using URL Access:
CLIENT: 10055 STATEMENT 2007 DATE:1002993
THIS IS THE OTHER STATEMENT
COLUMN1 COLUMN2 COLUMN 3 TRY THIS
On all lines with trailing spaces, they (the trailing spaces) have been removed. This is affecting my formatting of some reports and statements. We really want to use the report viewer as it has built in paging, print and export capabilities.
Why does it look okay in VS2005 but different in Report Viewer via URL Access and Report Manager?
Note: When I export as PDF, it looks okay.
The stored procedure I use to return the data is a CLR Hosted assembly as below:
Code Snippet Partial Public Class StoredProcedures <Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub GetPagedDocument(ByVal inText As SqlString) Dim dr As SqlDataReader Dim row As New SqlDataRecord(New SqlMetaData("RowText", SqlDbType.Text)) Dim cmd As New SqlCommand("select cast(doc as varchar(max)) as 'DOCTEXT' from testdoc WHERE id='" + inText + "'") Dim cn As New SqlConnection("context connection=true") cn.Open() cmd.Connection = cn SqlContext.Pipe.SendResultsStart(row) 'initialise the resultset to be returned dr = cmd.ExecuteReader 'If no records in result set, return. If Not dr.HasRows Then
row.SetString(0, "There is no document to display or you do not have permission to view the document.") SqlContext.Pipe.SendResultsRow(row) SqlContext.Pipe.SendResultsEnd() ' SqlContext.Pipe.Send("There is no document to display.") Return End If 'Read rows in the result set dr.Read()
'Get the entire text Dim docText As String = dr.Item("DOCTEXT") 'debug row.SetString(0, docText) SqlContext.Pipe.SendResultsRow(row) SqlContext.Pipe.SendResultsEnd() Return 'end debug
I have a report in which there is a field called "Returned Qty" and there is a parameter called Show Qty now I want this field returned Qty to only appear if this show Qty parameter is set to yes. Can Anyone suggest me how to do this?
I guess It could be done by using the properties option and writing some expression. I appreciate the response,
Hi all, I have a problem with a report I have created. It has around 52 columns and each column is shown or hidden based on a boolean parameter. Simple huh? I though so.
Each column has an expression similar to =IIF(Parameters!showfirstname.Value,False,True) for the Hidden field. This is not the hidden field for the 'cell' or 'header' but for the entire column.
The problem is, the report is correctly displayed as a pdf, tiff, excel file (possibly others), but all columns with an expression as the hidden value are not displayed in the xml or csv output regardless of the parameter value. This also applies if the expression is =IIF(True,False,True) or =IIF(1=1,False,True).
As soon as I change this field back to a simple 'True' or 'False' it displays correctly. I've tried playing around with setting the output options to values other than the default Auto setting to no avail.
There are numerous comments about this on newsgroups online going back to the first release of reporting services but none of them have solutions.
I want to control the visibility of the report bases on if certain columns have the data or not. Since our DB can accept EMPTY strings. I need to check for both NULLs and EMPTY STRINGS.
I have writen the following VB function
Public Function IsEmpty(ByVal value As Object) As Boolean If IsNothing(value) Then Return true Else If(value.ToString().Length = 0) Return true End If Return false End Function
In the "visibility" expression window I have the following
=(Code.IsEmpty(Fields!COLUMN1.Value)) and (Code.IsEmpty(Fields!COLUMN2)) and (Code.IsEmpty(Fields!COLUMN3))
Hi, Is there a way to set the visibility of a chart as can be done for a textbox or table or matrix? My requirement is that the chart should be visible only if certain data conditions are met.
Hi, I have just begun SSR2005 and need to record a simple total for a column. It is a count to be shown, however it should only be incremented if the columns value is greater than 0. The coulmn is a time value, in seconds, and can be from 0 to 600. Basically I only want count it if it is >0, and even though the value may be 45, I only want 1 adding to the total count displayed at the bottom., ie keep a count of the rows where column > 0.
I'm trying to write an expression for the "Hidden" property of a column in a table. The column is only populated with data if the group on my table is open. If the group is collapsed, then the column is empty. I'd like to make the column hidden if the group is collapsed. So I'm thinking it would be something like this:
But I can't find anyone who has written this anywhere.
I'm basically trying to make this report do the same thing a matrix does, but the matrix doesn't let me label the columns. I put textboxes above the matrix in line with the columns, but when I deploy the report to ReportManager, the textboxes get thrown all over the place and don't line up with the columns anymore.
So I guess if you can't answer the first question, an alternate question I have is how are you supposed to label the columns (row groups) in your matrix? They don't have headers, if I try to line textboxes up with them they get all messed up during deployment. They have that textbox up there in the top left corner that runs across the top of all of the row group columns, but if I put labels separated spaces in that textbox, the spaces get removed in rendering so the text is pushed all to the left and doesn't line up anymore.
Product version : SQL Reporting Service 2005 with SQL SP2
It's a report with 3 sub-reports in it, i want to display only one of the 3 sub-reports at a time depending on 1 or 2 parameters received by the parent report. These parameters are verified by an expression into the visibility tab of each sub-report. The two parameters are 2 lists with possibles values between 1 and 2 (not query based). I have verified these values and they are correctly received by report depending on the selection of each list.
SubReport2.expression =IIf(Parameters!Regroupement.Value = 2 AND Parameters!SautPage.Value = 1, True, False)
SubReport3.expression =IIf(Parameters!Regroupement.Value = 2 AND Parameters!SautPage.Value = 2, True, False)
So here are the posibilities :
when Regroupement.Value = 1 --> SubReport1 will be shown
when Regroupement.Value = 2 AND SautPage.Value = 1 --> SubReport2 will be shown
when Regroupement.Value = 2 AND SautPage.Value = 2 --> SubReport3 will be shown
Now why that doesn't work ? I always see the same report and it's not the right one displayed even i change the selection of my 2 lists for the parameters value.
I Have an SSRS report which shows questions and answers pulled from a view tables.I have 3 rows: Row 1 shows questions and answers 1 - 128, row 2 shows questions and answers 128 to 248 and row 3 shows 248 onwards.I only want the row with the correct questions and answers to show.So am using this query for example:
=IIf((Fields!vQuestions_Question_ID.Value < 128 Or Fields!vQuestions_Question_ID.Value > 247) AND (Fields!vQuestions_Response_value.Value < 128 Or Fields!vQuestions_Response_value.Value > 247), False, True)
which fails.If I only use= IIf(Fields!vQuestions_Question_ID.Value < 128 Or Fields!vQuestions_Question_ID.Value > 247, False, True) this works.What is the correct syntax for the multiple IIfs as i want both the criteria in the first query satisfied?
I have a matrix table with row groups of a date and addresses and also a column group which produces 3 columns and values with in these column.I have a "Total" column based on a Count of the column groups which gives a number.How do you hide all rows where the "Total" column is less then 1? There will be results which still needs the date and addresses groups.
Most of our reports need to be rendered directly to PDF. And since we have multi paged reports, we have implemented document map to have navigation. while exporting to the PDF, Users want the Bookmarks to be visible by default. However, this is not the case. The bookmarks tab in the Navigation tools of Acrobat is not expanded rather we need to manually click on it to see the bookmarks. This behavior is different from Crystal Reports XIr2 where the bookmarks are defaulted to be visible when opening a PDF exported by crystal.Is there any way to replicate this behavior in SSRS too?
I have searched many forums and found some cases of people also reporting slower rendering in RS than in Management Studio / Query Analyzer. However, none of the other solution suggestions seem to make a difference for me.
I'm a VS/VB developer and have got multiple reports built -- all using stored procedures on the backend -- that all take many times longer to run than if executed via Management Studio (SSMS). My simplest proc takes a couple of parameters (no defaults included) and does a simple select against one table with a few joins. Nothing complicated. It runs in 8 secs for 6867 rows via SSMS. Through RS (running locally through Visual Studio 2005 at this point) it takes around 25-28 secs. Yet, when I'm in the report on the DATA tab (not the PREVIEW tab) the run takes the expected 8 secs ?!?!
All reports are behaving this way.
I am not using cursors. I have no default values on parameters. I have added the "WITH RECOMPILE" to the proc statement. I have "SET NOCOUNT ON" as the first line of the proc. I hate to say this, but I even connected the proc to Crystal Reports to see how it behaved. It ran in the expected 8 secs.
I've seen some mention by someone that perhaps this is a known issue of RS that it reads the proc twice. Any truth to this?
Also a couple posts have traced and demonstrated that the report is generating significantly more data "reads" via RS than through SSMS.
We're a shop that is considering a switch from Crystal to RS, but we do everything through stored procedures. I need to clear up this issue before I can go forward recommending a switch. I'm including a copy of a typical proc below for review... What am I missing? What's the deal here with RS?
IF OBJECT_ID('dbo.rpt_InactiveAccounts') IS NOT NULL
DROP PROCEDURE dbo.rpt_InactiveAccounts
GO
CREATE PROCEDURE dbo.rpt_InactiveAccounts
(@pRunDate datetime
,@pSalesperson varchar(5000)
,@pIncludeOpen char(1)
)
WITH RECOMPILE
AS
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
-- CREATE/SETUP TEMP TABLE FOR USE IN PARSING MULTI-VALUED STRING INPUTS
DECLARE @NumberPivot TABLE (NumberID INT PRIMARY KEY)
DECLARE @intLoopCounter INT
SELECT @intLoopCounter =0
WHILE @intLoopCounter <=4999 BEGIN
INSERT INTO @NumberPivot
VALUES (@intLoopCounter)
SELECT @intLoopCounter = @intLoopCounter +1
END
-- CREATE TEMP TABLES TO HOLD PARSED VALUES FROM MULTI-VALUE STRING INPUT PARAMETERS
DECLARE @SalespersonTable TABLE
(tmpSalesperson varchar(30))
-- PARSE OUT @pSALESPERSON PARAMETER AND STORE VALUES IN TEMP TABLE
Table 1: AddressBook Fields --> User Name, Address, CountryCode
Table 2: Country Fields --> Country Code, Country Name
Step 1 : I have created a Cube with these two tables using SSAS.
Step 2 : I have created a report in SSRS showing Address list.
The Column in the report are User Name, Address, Country Name
But I have no idea, how to convert this Country Code to Country name.
I am generating the report using the Layout tab. ( Data | Layout | Preview ) Report1.rdl [Design]
Anyone help me to solve this issue. Because, in our project most of the transaction tables have Code and Code description in master table. I need to convert all code into corresponding description in all my reports.
Does anyone have a successful prescribed sequence for installing VS2005 and Business Intelligence Reports Projects on a Vista Business workstation to be used to create reports for a server?
I've looked through everything I can find here and I don't seem to see a clear solution without a lot of trial and error.
Fact is, I've not been successful getting just the reports to install on a plain XP box. Of course, the report creation looks fine on the server but I don't want to work directly on the server.
How do I get data on my linked report based on my grouped subtotal and grand total from the main report. The subtotal and grand total are calculated columns.
I have a 3 columns in my matrix in the SSRS summary report. Actn_COAST, ActnCITY and NumbOfAccts.
The following is code for my summary report. The results are shown below.
SELECT Distinct ActnCITY, Count(ACCT) as NumbOfAccts, CASE WHEN ActnCITY in ('NY', 'OH', IN, 'NJ', 'SC', 'NC') THEN 'EAST COAST' WHEN ActnCITY IN ('CA'. 'NV', 'UT', 'WA', 'OR') THEN 'WEST COAST' ELSE 'OTHER' END AS Actn_COAST
FROM tbl1 where ACTNDATE between @STARTDT and @EndDT
Code for my detail report contains the following SQL
SELECT * FROM tbl1 where ACTNDATE between @STARTDT and @EndDT AND @ActnCITY = ActnCITY
I have linked my report based on the NumbOfAccts column. I am able to get data if I click any of the NumbOfAccts values related to the state I want. However when I am not sure how to make the subtotal and grand total work. I want when I click on the subtotal of either coast, I should be able to see records of that coast e.g., if I select 37 I should be able to see all the records in East Coast. If I click on the Grand Total, I only want data related to those 2 coasts.
I've created dsv that contain all fields from table database. in the smdl I've remove some fileds due to security. All fields in the smdl do not contain drill.
Issue: When I created calculated field in the report builder the field has a link. When I clicked the drill I saw all the record data including field that not in the smdl.
Questions:
1) Can I remove the link from the calculated fields?
2) Can I prevent from users drill to fields that not in the smdl?
I have a concated code from excel when I have to pick some values for db update, the problem is when one field is empty, this field is date type and I don't now how can I validate if UserDate_02 field is null or not, I get it from a cell in excel and later when I get all the code I update the db, this is the line :
UPDATE ITEMS SET UserField_01='AA',UserDate_01='01/28/2014',UserYesNo_01=1,UserDate_02=''WHERE LotNumber='134034143017297'and ItemCode='G22221'
OK, I use asp.net membership and have created a new table that links together related users by use of the uniqueidentifier field as a foreign key. However, it is possible to link to a not-yet existent user (by their email) so that when that user creates an account and gets a guid, it will be updated into my table of related users and finalise the link. Trouble is, I'm trying to stop people adding the same "pending user" multiple times, so in my BLL logic I look for the entered email address for the current user and I want to check on the foreign key (the GUID field) so that I can tell the user that they've already added this user, but they haven't signed up yet (if they haven't got a foreign user key with a guid in it, they haven't signed up yet). However, when I check the foreign key guid value (shows as null in sql enterprise manager) for null values, it never goes down the "true" logic channel... what I mean is that I've debugged it, hovered over the item I've read (it says it is system.dbnull, which it is) and yet when I do "isDBNull(myGUID.Value)" it never equates to true! Why not?
My report has multiple datasets, and I want to access the fields of a particular dataset from custom code. The problem is that the name of the dataset to use is only calculated during the execution of the custom code.
Allow me to illustrate:
public function Test(data as DataSets, fieldName as string)dim datasetName as string = CalculateDatasetName()dim ds as Dataset = data(datasetName)' now here I want to get the fieldName out of the dataset.' in the report, I would do something like ' First(Fields!fieldName.Value, datasetName)' but in custom code, this obviously doesn't work.end function
I've been looking for a way to accomplish this, but it seems you cannot get data from a dataset through custom code (there is only the commandtext property). Also it is not possible to pass the Fields collection as a parameter, as I do not know the dataset name when in the report designer.
I hope my problem description is clear. Does anyone know how to solve this issue?
I have windows application (Basically a accounting system). I want to use either SQL authenticaion, or Windows authentication for my users of the application (Basically each db user will have their own account in Users for that db, so I can have sql control the access).
All access to the db is via stored procedures, but I want to have a set schema for each user type:
Supervisor Manager Data Entry etc.
All with a predefined access to the proper stored procedures(So far fairly simple).
In addition to this I want to be able to set the specifics of that user in my .net application via a interface (so a user by default will have the pre-defined schema, when a supervisor opens this interface, they can add/remove access to other stored procedures)
Here's the issue. Is this the proper methodology to achieve this, because it's quite of bit of programming work. I don't want to do it then need to re-due everything.
Also should I use Windows Authentication, or SQL, or have a completly seperate table in the DB where I do manual authentication then have the .net application restrict the access?
Any help or comments on this approach will be helpful. Also ifanyone has found any articles or information similiar to what I am trying to accomplish, please point me in the correct direction.
I have a sequence problem in a package and I'm unable to figure it out: I have a control flow with some elements in this specified order: a script task -> Execute SQL task -> Data Flow. The script task is responsible for setting a value on a package variable; this same variable will then be used to decide if the Data Flow is disabled or not (there's an expression on the DataFlow). However, it looks like the variable is being tested before the script actually writes it, how can I guarantee that the DataFlow's expression is evaluated only after the script task has ended? Also, I have tried putting each component inside their own sequence container and I get the same result