The value of the BackgroundColor property...

by Martin 28. January 2011 10:44
Ibland vill man skriva uttryck för egenskapen Bakgrundsfärg (BackgroundColor). Om värdet är under noll ska bakgrunden vara röd, annars den vanliga färgen (Transparent eller No Color beroende på version). Man skriver då nedanstående uttryck: {code:vb.net} =iif(Fields!NetValue.Value < 0, "Red", "Transparent") {code:vb.net} Sannolikt får du då ungefär följande varning: {{ [rsInvalidColor] The value of the BackgroundColor property for the textbox ‘textbox14’ is "Transparent", which is not a valid BackgroundColor. }} Lösningen är att istället för _"Transparent"_ eller _"No Color"_ ange _Nothing_ istället. Alltså {code:vb.net} =iif(Fields!NetValue.Value < 0, "Red", Nothing) {code:vb.net} Lycka till!

Hur man använder "in" i filter för t ex ett dataset

by Martin 29. June 2010 11:02
Om man använt sig av filter på sina dataset så har man förmodligen även sett att man under _operator_ kan välja _in_. Jag har aldrig lyckats få till hur de funkar men nu tog jag tag i saken och kom fram till att det kan vara ganska användbart. Hemligheten är att under _Value_ skriva ett uttryck som returnerar en array. Smidigt nog sker detta automatiskt om man har en parameter där man tillåter flera värden (_Allow multi values_). Man kan då ange värden enligt följande: [image:http://www.martinfranson.se/image.axd?picture=2010%2f6%2fFilterDataset.png] I _Expression_ har jag alltså hänvisat till ett fält i mitt dataset och i _Value_ till parametern _ObjectFilter_. Vill man skriva dessa "normalt" så blir då det under _Expression_: {{ =Fields!Kurs.Value }} och under _Value_: {{ =Parameters!ObjectFilter.Value }} Om man inte har en parameter utan vill använda sig av en kommaseparerad sträng bör det gå lika bra genom att skriva något i stil med följande under _Value_: {{ ="Kurs1,Kurs2,Kurs3".Split(,) }} Detta eftersom funktionen *Split* returnerar en array.

Hämta klientdatorns namn eller ip-adress

by Martin 21. June 2010 10:01
Ibland vore det smidigt att kunna skriva ut på en rapport från vilken dator en användare skapade den, t ex om användaren Lisa exekverade rapporten från hennes arbetsstation kallad CorpComp1. Det finns ingen inbyggd funktion för detta i Reporting Services. Däremot finns ju alltid möjligheten att nyttja Custom Code. Följande kod skulle kunna användas: {code:vb.net} Public Function GetClientIP() As String Dim result as String result = System.Web.HttpContext.Current.Request.ServerVariables("REMOTE_ADDR") return result End Function Public Function GetClientHostName() As String Dim result as String result = System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables("remote_addr")).HostName return result End Function {code:vb.net} Där du då vill skriva ut användarens datornamn skriver du följande uttryck (expression) {{ =Code.GetClientHostName() }} Vill du istället skriva ut IP-adressen så görs det med följande uttryck (expression) {{ =Code.GetClientIP() }}

Subrapporter och snabshots

by Martin 15. June 2010 13:05
Vill man ha en sammanställning av rapporter i en huvudrapport och sedan få bra prestanda känns det ju lockande att använda sig av snapshots. Vid försök så går rapporten utmärkt att köra i Report Designern (Visual Studio) men vid deploy till Report Server får man bara felet *Error: Subreport could not be shown* Anledningen till detta är helt enkelt att subrapporter inte kan visa rapporter som exekveras som snapshots. Lösningen är att göra så rapporten kör live hela tiden. _Källa: [url:http://connect.microsoft.com/SQLServer/feedb...|http://connect.microsoft.com/SQLServer/feedback/details/196067/reporting-services-subreports-and-snapshots]_

Hindra Reporting Services från att automatiskt ändra MDX-frågor

by Martin 2. June 2010 11:38
Om man i Reporting Services har ett MDX-dataset med en parameter så skapar Reporting Services automatiskt upp ett dataset för den parametern. Om det inte syns från början så kan man alltid visa det genom att höger-klicka på datakällan och välja _Show hidden datasets_. Det i sig är en ganska trevlig funktion. Vad som INTE är så roligt är att om jag har ändrat mitt dataset som genererades, t ex filtrerat bort vissa parametervärden, och sedan ändrar den första MDX-en, då skapas parameterdatasetet om och tar bort min filtrering. Som tur är går det hindra Reporting Services från detta. Hemligheten är att ändra i RDL-filen. Högerklicka på rapporten och välj _View code_. Sök upp slutet av Query-taggen och ändra enligt nedanstående: Ändra {code:xml} {code:xml} till {code:xml} true {code:xml}