A következő címkéjű bejegyzések mutatása: SSRS. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: SSRS. Összes bejegyzés megjelenítése

2017. június 12., hétfő

SSRS Riport nyomtatásakor mező elrejtése

Gyakorta felmerül az igény arra, hogy egy vagy több elemet (felirat, link, stb.) nem szeretnénk, hogy megjelenjen az SSRS riportok nyomtatásakor vagy exportáláskor. Ebbe a kategóriába tartozik szinte az összes interaktív vezérlő. Jó példa egy "Tovább a kapcsolódó elemekre" link, ami egy subreportot tölt be, viszont PDF-ben már csak zavaró tényezőnek számít a felirat.

Az SSRS-ben elérhető egy globális változó (RenderFormat.IsInteractive), ami megmondja, hogy éppen interaktív módban van-e betöltve az adott riport. Erre a tulajdonságra kell beállítani az elrejteni kívánt elemek láthatóságát:  =(Globals!RenderFormat.IsInteractive = False)


2016. április 1., péntek

SSRS-ben #Error a számított érték helyén

Megesett, hogy egy riporton szerettem volna megjeleníteni egy kifejezéssel előállított értéket, de a riporton csak egy #Error jelent meg a helyén. A naplófájlban lévő hibaüzenet sem volt túl beszédes:

ERROR: Throwing Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: , Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: The specified operation is not valid. ;

Ilyen hibánál általában az a baja, hogy eltérő típusú adatokat szeretnénk aggregálni. Esetemben egy Sum(IIF( exp, érték1, érték2)) okozta a gondot, ahol bizonyos csillagállás mellett nem egyezett meg a két érték típusa, mert két különböző számtípusú volt.

2016. február 29., hétfő

Hibakeresés SSRS-ben

A napokban több feladatom is volt SSRS használatával és megosztanám néhány problémás eset tanulságát.

1) Textbox helye nem frissül
Egy újabb riport elkészítése során egy már létezőből indultam ki, jelentős részét átmásolva, felhasználva. Az egyik helyen két textboxot próbáltam egymás alá igazítani, de bármennyire is növeltem a távolságot a kettő között, a generált képen mindig egy sornyira volt a két szöveg. Ekkor fedeztem fel, hogy a textboxnak van egy olyan tulajdonsága, hogy CanShrink, ami pont azt csinálja, hogy csökkentheti a magasságát, ha kevesebbet igényel a szöveg. Ez a tulajdonság, alapértelmezetten ki van kapcsolva, de esetemben, mivel másolt kóddal dolgoztam, engedélyezve volt. Végül én is bekapcsolva hagytam, mert jól jött ez a funkció, de ettől függetlenül nem árt tudni róla, hogy létezik és magyarázatot adhat arra, hogy miért nem pont úgy néz ki a generált kép, mint ahogyan a tervezőnézetben.


2) Subreportok beágyazása
A másik esetben a lényeg az volt, hogy két riportot kellett volna előállítani úgy, hogy az egyik a másikhöz felolvasott adatok egy részével paraméterezve működött. Úgy álltam neki, hogy egy container reportra felhelyeztem két subreportot és külön-külön behivatkoztam a már létező, kész és működő riportokat. 

Hibakeresés - subreport
Ekkor jött az első hibaüzenet, ami nem volt túl beszédes: Error: The subreport could not been shown.
Az SSRS saját logja már legalább azt megmondta, hogy az egyik subreporttal van baja:
[rsWarningExecutingSubreport] Warnings occurred while executing the subreport ‘Subreport1’. [rsNone] One or more parameters required to run the report have not been specified. [rsNone] One or more parameters were not specified for the subreport, 'Subreport1', located at: /Child. \\blahblahblah\Parent.rdl

A naplófájl alapértelmezetten itt található:
C:\Program Files\Microsoft SQL Server\MSRS[X].MSSQLSERVER\Reporting Service\LogFiles

A hibaüzenet alapján átvizsgáltam a paramétereket, leellenőrizve, hogy megfelelő típusút adok mindenhova illetve, hogy nincs-e elírás. Mivel ezen téren nem találtam hibát, konstans értékeket kötöttem be, mivel ezzel ki behatárolhattam, hogy a beállítandó értékek hibáznak-e vagy máshol lehet a hiba. A tesztelésnél így is jött a hibaüzenet. Ezt követően a subreportot módosítottam úgy, hogy minden paraméterének adtam alapértelmezettet értéket, és a parentben semmit sem adtam át.

Ekkor belefutottam abba, amiről már korábban is írtam, hogy ha megváltoztatom egy paraméter tulajdonságát, akkor azt csak úgy nem lehet frissíteni egy redeploy alkalmával. Ezt követően a Visual Studio report preview-ja is cache-elt, amit könnyedén elintéztem, erre már van egy toolom, amiről itt írtam.

Mivel a riport probléma nélkül betöltődött az alapértelmezett értékkel, így egyesével elkezdtem beállítani konstans értékekkel a paramétereket a parentből a subreportnak és figyeltem, hogy mikor romlik el. Egy olyan paraméternél akadt meg, ami a subreporton text típusú, egy másik paraméter alapján egy datasetből vette az értékkészletét, ráadásul integert. Pusztán annyira szolgált ez a text paraméter, hogy egy szöveget felolvassunk az adatbázisból az egyik paraméter alapján. Az lett a megoldás, hogy felszámoltam ezt a text paramétert és a datasetből közvetlenül használtam a riporton a szöveget.

Hibakeresés - fejléc/lábléc
Miután végre sikeresen betöltődött mindkét riport, akkor jött a felismerés, hogy nem látszik a fejléc/lábléc a subreportról. Az MSDN szerint tervezetten nem jelenik meg egy subreport ezen része a parenten. 

Léteznek különböző ilyen-olyan megkerülő módszerek arra, hogy mégiscsak látszódjanak, de eléggé gányolásnak tűnnek számomra, szemben azzal, mintha csak fel kellene tenni két subreportot egy containter parentre, bepipálni, hogy látszódjanak és máris megfelelően beágyazná őket a subreporthoz tartozó oldalakon.
  1. A child legyen felbontva 3 subreportra: header, body, footer, és mindegyik a child body részébe legyen beillesztve. Így emiatt a parent teljes értékűen meg fogja jeleníteni azokat is, már a lefejlesztése sem kis idő és pénz és utána a karbantartás költsége is az egekben fog járni, nem beszélve a potenciálisan behozott hibalehetőségekről.
  2. A child fejléc/lábléc eleme legyen külön hozzáadva a parentben is, majd pedig az oldalszám függvényében legyen állítva a láthatósága. Ehhez valamennyire részletes leírás itt található. Önmagában egyszerűnek tűnhet, viszont arra nem találtam semmi megoldást, hogy dinamikusan hogyan lehetne kezelni az oldalszámokat és azok alapján az egyes fejlécek láthatóságát.
Összegzés
Végeredményben arra jutottam, hogy C# kódból egymás után hívom a két riport generálását úgy, hogy kódban előre felolvasom a közös adatokat és azzal paraméterezem őket, ezzel csökkentve a redundáns adatmozgatást.



Szerintetek létezik valamilyen használható megoldás arra, hogy több subreportot beágyazva egy containerbe meg lehessen jeleníteni a saját fejléc/lábléc részeiket? Másként szólva lehetséges teljes értékű merge funkciót kicsikarni a reporting services-ből?

2016. február 3., szerda

SSRS local cache és a Visual Studio

Az SSRS riportok fejlesztése során meglehetősen idegesítő funkció, hogy az előnézetben megjelenített adatok cache-elve vannak ahelyett, hogy frissen felolvasná a rendszer minden egyes lekérdezésnél. Az explicit frissítés sem mindig tölti újra az adatokat.

A legjobb módszer, ha töröljük a riporthoz tartozó .data fájlt, ami a [riport-neve].rdl mellett található. Szerencsére van automatizálható módszer is az állandó kézi törlés helyett.

Visual Studio-ban a Tools > External Tools menüpontot használva meg lehet hívni külső alkalmazásokat is megfelelően felparaméterezve. Ezen a felületen be lehet állítani, hogy gombnyomásra megerősítés kérése nélkül töröljön minden cache fájlt a Solution minden almappáján belül. Célszerű bepipálni a "Use Output window"-t, mivel így azt fogja használni kimenetnek a CMD shell, azaz például a törölt fájlok listája is, illetve az esetleges hibaüzenetek is láthatók lesznek.




Ezt követően, amikor a későbbiekben szeretnénk üríteni a cache-t, akkor a Tools > Clear Report Data Cache menüpontot kell kiválasztani.


2015. december 17., csütörtök

SSRS - hiányzó nullozható paraméter

Amikor már nem először deploy-olunk egy riportot, akkor a már létező paraméterek beállításai nem frissülnek. Stackoverflow magyarázatok szerint cache probléma, míg az MSDN szerint (egy hasonló reporting service-re hivatkozva) alapján az van a háttérben, hogy a Report Manager oldalon esetlegesen eszközölt módosításokat nem akarja a rendszer felülírni.

Abban viszont egyet értenek, hogy trükközve, de megoldható a probléma:

Módszer 1:
A Report Manager oldalon módosítjuk a paraméter beállításait

Módszer 2:
Töröljük a kitett riportot és tegyük ki ismét.

Módszer 3:
- nevezzük át a paramétert, és állítsuk be a kívánt dolgokat
- deploy
- nevezzük vissza
- deploy