Jump to content
We've recently updated our Privacy Statement, available here ×

mpenningroth

Members
  • Posts

    56
  • Joined

  • Last visited

 Content Type 

Profiles

Forum

Events

Featured Visualizations

Knowledge Base

Documentation (PDF Downloads)

Blog

Documentation (Test Area)

Documentation

Dr. Jaspersoft Webinar Series

Downloads

Everything posted by mpenningroth

  1. Hi, Our company is using the buildomatic scripts to build the main war. We then have some other scripts that deal with some of our modifications especially in the area of context.xml , web.xml, database creation, database loading, and importing resources. For development I have been using netbeans 6.9 and just opening the maven projects. There are a couple of poms that will not open because they reference some buildomatic properties. i just hard coded those if I needed to work with that project. Also I do not use netbeans to launch the webapp, I just launch my tomcta with debug settings and the attach the debugger to the running tomcat.
  2. Here is how we do this in a <textField> element <hyperlinkReferenceExpression><![CDATA["flow.html?_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/O2C_Order_Detail&title=Order Detail&hidden_CompanyID="+$P{CompanyID}+"&hidden_FiscalVariant="+$P{FiscalVariant}+"&hidden_Year="+$P{Year}+"&hidden_Period="+$P{Period}+"&hidden_CustomerCode="+$P{CustomerCode}+"&hidden_Order="+$F{[Order].[Order]}]]></hyperlinkReferenceExpression> <hyperlinkTooltipExpression><![CDATA["Click to go to Order Detail report."]]></hyperlinkTooltipExpression>
  3. I cut the code below from one of our reports that use a 3d chart. The first hyperlink is for the background . We used sub-datasets to link individual graph items to another object (dashboard in our case, but you could also link to a report). Other hyperlinks then are available for the individual items on the chart. (In this case the chart data is mapped to the field $F{[Fiscal Period].[Fiscal Period]} , when the user clicks on the bar for the specific fiscal period, the hyperlink sends the paramater for that fiscal period to the dashboard Hope this gives you some ideas... (Oh be careful in iReport, if you save a report with tooltips and load them to the server, the tooltips get lost.... Code: <stackedBar3DChart> <chart isShowLegend="false" hyperlinkType="Reference" hyperlinkTarget="Blank" > <reportElement x="0" y="145" width="211" height="102" key="element-15"/> <box></box> <hyperlinkReferenceExpression><![CDATA["flow.html?_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Ratio_Calculation&title=Cash Flow Ratio Calculation Summary&hidden_CompanyID="+$P{CompanyID}+"&hidden_Year="+$P{Year} +"&hidden_Period="+$P{Period}]]></hyperlinkReferenceExpression> <hyperlinkTooltipExpression><![CDATA["Click to go to the Cash Flow Ratio Calculation Summary dashboard."]]></hyperlinkTooltipExpression> </chart> <categoryDataset> <dataset > <datasetRun subDataset="Fixed Charge Coverage Ratio"> <parametersMapExpression><![CDATA[new java.util.HashMap($P{REPORT_PARAMETERS_MAP})]]></parametersMapExpression> <datasetParameter name="CompanyID"> <datasetParameterExpression><![CDATA[$P{CompanyID}]]></datasetParameterExpression> </datasetParameter> <datasetParameter name="Year"> <datasetParameterExpression><![CDATA[$P{Year}]]></datasetParameterExpression> </datasetParameter> <datasetParameter name="Period"> <datasetParameterExpression><![CDATA[$P{Period}]]></datasetParameterExpression> </datasetParameter> </datasetRun> </dataset> <categorySeries> <seriesExpression><![CDATA["bad"]]></seriesExpression> <categoryExpression><![CDATA[$F{[Fiscal Period].[Fiscal Period]}]]></categoryExpression> <valueExpression><![CDATA[com.cincom.bi.Chart.bad( $F{[Measures].[Ratio, Fixed Charge Coverage]}, $F{[Measures].[Min, Ratio Fixed Charge Coverage]}, $F{[Measures].[Max, Ratio Fixed Charge Coverage]}, $F{[Measures].[Divide, Ratio Fixed Charge Coverage]})]]></valueExpression> <itemHyperlink hyperlinkType="Reference" hyperlinkTarget="Blank"> <hyperlinkReferenceExpression><![CDATA["flow.html?_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Ratio_Calculation&title=Cash Flow Ratio Calculation Summary&hidden_CompanyID="+$P{CompanyID}+"&hidden_Year="+$F{[Measures].[Year]} +"&hidden_Period="+$F{[Fiscal Period].[Fiscal Period]}]]></hyperlinkReferenceExpression> <hyperlinkTooltipExpression><![CDATA[msg("Fixed Charge Coverage Ratio for fiscal year " + $F{[Measures].[Year]} + ", period "+$F{[Fiscal Period].[Fiscal Period]}+ " is {0}",$F{[Measures].[Ratio, Fixed Charge Coverage]}.setScale(2,2)) +". Click to go to the Cash Flow Ratio Calculation Summary dashboard."]]></hyperlinkTooltipExpression> </itemHyperlink> </categorySeries> <categorySeries> <seriesExpression><![CDATA["ok"]]></seriesExpression> <categoryExpression><![CDATA[$F{[Fiscal Period].[Fiscal Period]}]]></categoryExpression> <valueExpression><![CDATA[com.cincom.bi.Chart.ok( $F{[Measures].[Ratio, Fixed Charge Coverage]}, $F{[Measures].[Min, Ratio Fixed Charge Coverage]}, $F{[Measures].[Max, Ratio Fixed Charge Coverage]}, $F{[Measures].[Divide, Ratio Fixed Charge Coverage]})]]></valueExpression> <itemHyperlink hyperlinkType="Reference" hyperlinkTarget="Blank"> <hyperlinkReferenceExpression><![CDATA["flow.html?_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Ratio_Calculation&title=Cash Flow Ratio Calculation Summary&hidden_CompanyID="+$P{CompanyID}+"&hidden_Year="+$F{[Measures].[Year]} +"&hidden_Period="+$F{[Fiscal Period].[Fiscal Period]}]]></hyperlinkReferenceExpression> <hyperlinkTooltipExpression><![CDATA[msg("Fixed Charge Coverage Ratio for fiscal year " + $F{[Measures].[Year]} + ", period "+$F{[Fiscal Period].[Fiscal Period]}+ " is {0}",$F{[Measures].[Ratio, Fixed Charge Coverage]}.setScale(2,2)) +". Click to go to the Cash Flow Ratio Calculation Summary dashboard."]]></hyperlinkTooltipExpression> </itemHyperlink> </categorySeries> <categorySeries> <seriesExpression><![CDATA["exceeds expectations"]]></seriesExpression> <categoryExpression><![CDATA[$F{[Fiscal Period].[Fiscal Period]}]]></categoryExpression> <valueExpression><![CDATA[com.cincom.bi.Chart.exceeds( $F{[Measures].[Ratio, Fixed Charge Coverage]}, $F{[Measures].[Min, Ratio Fixed Charge Coverage]}, $F{[Measures].[Max, Ratio Fixed Charge Coverage]}, $F{[Measures].[Divide, Ratio Fixed Charge Coverage]})]]></valueExpression> <itemHyperlink hyperlinkType="Reference" hyperlinkTarget="Blank"> <hyperlinkReferenceExpression><![CDATA["flow.html?_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Ratio_Calculation&title=Cash Flow Ratio Calculation Summary&hidden_CompanyID="+$P{CompanyID}+"&hidden_Year="+$F{[Measures].[Year]} +"&hidden_Period="+$F{[Fiscal Period].[Fiscal Period]}]]></hyperlinkReferenceExpression> <hyperlinkTooltipExpression><![CDATA[msg("Fixed Charge Coverage Ratio for fiscal year " + $F{[Measures].[Year]} + ", period "+$F{[Fiscal Period].[Fiscal Period]}+ " is {0}",$F{[Measures].[Ratio, Fixed Charge Coverage]}.setScale(2,2)) +". Click to go to the Cash Flow Ratio Calculation Summary dashboard."]]></hyperlinkTooltipExpression> </itemHyperlink> </categorySeries> <categorySeries> <seriesExpression><![CDATA["Default"]]></seriesExpression> <categoryExpression><![CDATA[$F{[Fiscal Period].[Fiscal Period]}]]></categoryExpression> <valueExpression><![CDATA[com.cincom.bi.Chart.def( $F{[Measures].[Ratio, Fixed Charge Coverage]}, $F{[Measures].[Min, Ratio Fixed Charge Coverage]}, $F{[Measures].[Max, Ratio Fixed Charge Coverage]}, $F{[Measures].[Divide, Ratio Fixed Charge Coverage]})]]></valueExpression> <itemHyperlink hyperlinkType="Reference" hyperlinkTarget="Blank"> <hyperlinkReferenceExpression><![CDATA["flow.html?_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Ratio_Calculation&title=Cash Flow Ratio Calculation Summary&hidden_CompanyID="+$P{CompanyID}+"&hidden_Year="+$F{[Measures].[Year]} +"&hidden_Period="+$F{[Fiscal Period].[Fiscal Period]}]]></hyperlinkReferenceExpression> <hyperlinkTooltipExpression><![CDATA[msg("Fixed Charge Coverage Ratio for fiscal year " + $F{[Measures].[Year]} + ", period "+$F{[Fiscal Period].[Fiscal Period]}+ " is {0}",$F{[Measures].[Ratio, Fixed Charge Coverage]}.setScale(2,2)) +". Click to go to the Cash Flow Ratio Calculation Summary dashboard."]]></hyperlinkTooltipExpression> </itemHyperlink> </categorySeries> </categoryDataset> <bar3DPlot > <plot backcolor="#CCCCCC" > <seriesColor seriesOrder="0" color="#BB2200"/> <seriesColor seriesOrder="1" color="#EEEE00"/> <seriesColor seriesOrder="2" color="#66EE00"/> <seriesColor seriesOrder="3" color="#0033FF"/></plot> <categoryAxisFormat> <axisFormat > <labelFont> <font fontName="Verdana" pdfFontName="Helvetica" size="8" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" isPdfEmbedded="false" pdfEncoding="Cp1252"/> </labelFont> <tickLabelFont> <font fontName="Verdana" pdfFontName="Helvetica" size="8" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" isPdfEmbedded="false" pdfEncoding="Cp1252"/> </tickLabelFont> </axisFormat> </categoryAxisFormat> <valueAxisFormat> <axisFormat > <labelFont> <font fontName="Verdana" pdfFontName="Helvetica" size="9" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" isPdfEmbedded="false" pdfEncoding="Cp1252"/> </labelFont> <tickLabelFont> <font fontName="Verdana" pdfFontName="Helvetica" size="9" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" isPdfEmbedded="false" pdfEncoding="Cp1252"/> </tickLabelFont> </axisFormat> </valueAxisFormat> </bar3DPlot> </stackedBar3DChart>
  4. Dashboards don't support tabs, but you can add a menu to the main header and link sub menu items to dashboards, reports and/or analysis view if you want. Take a look at WEB-INF/class/JI-Menu.xml we modified that for particular role to add a drop down menu that allows easy navigation to a variery of dashboards. I think we also tweaked a style sheet to to show headings for links with now actions since the menus system only easily supports on level of sub-menus. See the xml sample below, the menu "CBI Financials" will only show up for users in the ROLE_CBI_FINANCIALS role. As mentioned, we changed the style sheet so that a menu item with no url displays with a dufferent color. This allows us to group items together under a heading. This sample just shows launcing dashboards, but you can put any url you want. (Reports, analysis views, docs, external links, etc) Hope this helps Code: <!-- Menu items for CBI Financials --> <!-- Links to dashboards and analysis views --> <menu-item name="CBI Financials"> <roles> <role>ROLE_CBI_FINANCIALS</role> </roles> <sub-items> <menu-item name="Cash Flow"> <roles> <role>ROLE_CBI_FINANCIALS</role> </roles> </menu-item> <menu-item name=" Dashboard" url="/flow.html" servletParams="_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Dashboard"> <roles> <role>ROLE_CBI_FINANCIALS</role> </roles> </menu-item> <menu-item name=" Account Detail" url="/flow.html" servletParams="_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Account_Detail"> <roles> <role>ROLE_CBI_FINANCIALS</role> </roles> </menu-item> <menu-item name=" Stmt Summary" url="/flow.html" servletParams="_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Statement_Summary"> <roles> <role>ROLE_CBI_FINANCIALS</role> </roles> </menu-item>
  5. I recommend that you get and study the iReport plugin code. It uses webservices to get the jrxml and also to execute reports (on the server). If you want to execute the report locally, you should be able to get the jrxml from the server but I am not sure how you would deal with the datasource connections etc. Does the job have to be run locally? Your cron job could execute the reports on the server and get the ouput and store it somewhere on the client machine. iReport has some samples of this. We have modified the server to add a web server function that will flush the cache. We have also added an OUTPUT_NONE type for a report so that the results are ignored. We then use these to to seed the mondrian cache after we run an incremental etl job that updates our data warehouse. The following code is a simple job that can be used to run a number of report units (or all report units under a specific folder). Note thes use some additions we made as noted above, but the webservice code may be of use... Code:package com.cincom.cbiserveradmin;import com.jaspersoft.jasperserver.irplugin.JServer;import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.*;import java.util.ArrayList;import java.util.ListIterator;import java.util.List;/** * * @author mpenningroth */public class SeedMondrianCache { static String userName = "****"; static String pw = "******"; static String url = "http://localhost:8080/CincomBIServer"; static String service = "/services/repository"; static boolean flushIt = false; static ArrayList<String> resourceList = new ArrayList<String>(); static ArrayList<ResourceDescriptor> reportList = new ArrayList<ResourceDescriptor>(); static JServer server = new JServer(); static ResourceDescriptor rd = new ResourceDescriptor(); static long totalTime = 0; static long startTime = 0; static long endTime = 0; static long reportTime; static Argument arg = new Argument(Argument.RUN_OUTPUT_FORMAT,Argument.RUN_OUTPUT_FORMAT_NONE); static ArrayList argList = new ArrayList(); static java.util.HashMap pm = new java.util.HashMap(); static boolean verbose = false; static void runReport(ResourceDescriptor theRes) { try { if (theRes.getWsType().equals(ResourceDescriptor.TYPE_REPORTUNIT)) { startTime = System.currentTimeMillis(); if (verbose) { System.out.println("running report: "+theRes.getUriString()); } server.getWSClient().runReport(theRes, pm, argList); endTime = System.currentTimeMillis(); reportTime = endTime - startTime; totalTime += reportTime; if (verbose) { System.out.println(theRes.getUriString()+" execute time:"+reportTime); } } } catch (Exception e) { e.printStackTrace(); return; } } static void runReports(ResourceDescriptor theRes) { try { if (theRes.getWsType().equals(ResourceDescriptor.TYPE_FOLDER)) { if (verbose) { System.out.println("processing folder: "+theRes.getUriString()); } List resList = server.getWSClient().list(theRes); if (resList != null && resList.size() >0) { ListIterator li = resList.listIterator(); while (li.hasNext()) { rd = (ResourceDescriptor)li.next(); if (rd.getWsType().equals(ResourceDescriptor.TYPE_FOLDER)) { runReports(rd); } else if (rd.getWsType().equals(ResourceDescriptor.TYPE_REPORTUNIT)) { runReport(rd); } } } } } catch (Exception e) { e.printStackTrace(); return; } } public static void main(String[] args) { // defaults if (args.length > 0) { for (int argIx = 0; argIx < args.length; argIx++) { if (args[argIx].equals("-user")) { userName = args[++argIx]; } else if (args[argIx].equals("-pw")) { pw = args[++argIx]; } else if (args[argIx].equals("-url")) { url = args[++argIx]; } else if (args[argIx].equals("-flush")) { flushIt = true; } else if (args[argIx].equals("-verbose")) { verbose = true; } else { String theArg = args[argIx]; if (theArg.indexOf(" ") >0) { String[] resArray=theArg.split(" "); for (int i=0;i<resArray.length;i++) { if (resArray[i].length()>0) { resourceList.add(resArray[i]); } } } else { resourceList.add(args[argIx]); } } } } else { System.out.println("usage: com.cincom.cbiserveradmin.SeedMondrianCache [options] <resource>+>"); System.out.println("\t where [options] are 0 or more of the following:"); System.out.println("\t\t -user <username> default is ****"); System.out.println("\t\t -pw <password> default is ****"); System.out.println("\t\t -url <server url> default is http://localhost:8080/CincomBIServer"); System.out.println("\t\t -flush means to flush the cache first"); System.out.println("\t\t -verbose means to send messages to System console"); System.out.println("\t where <resource> are 1 or more resources seperated by blank(s) to execute. These should be ReportUnits"); System.out.println("\t or folders. If folder then all reports in the folder (and child folders)will be executed."); return; } argList.add(arg); if (verbose) { System.out.println("user: "+userName); System.out.println("url: "+url); System.out.println("flushIt: "+flushIt); System.out.println("resource count:"+resourceList.size()); for (int i=0;i<resourceList.size();i++) { System.out.println("resource["+i+"]: "+resourceList.get(i)); } } if (flushIt || resourceList.size()>0) { server.setUsername(userName); server.setPassword(pw); server.setUrl(url+"/services/repository"); if (flushIt) try { if (verbose) { System.out.println("flushing analysis cache"); } server.getWSClient().flushAnalysisCache(rd); } catch (Exception e) { e.printStackTrace(); return; } for (ListIterator<String> si=resourceList.listIterator(); si.hasNext();) { rd.setUriString(si.next()); try { ResourceDescriptor theRes = server.getWSClient().get(rd, null); if (theRes.getWsType().equals(ResourceDescriptor.TYPE_FOLDER)) { runReports(theRes); } else if (theRes.getWsType().equals(ResourceDescriptor.TYPE_REPORTUNIT)) { runReport(theRes); } } catch (Exception e) { e.printStackTrace(); return; } } if (verbose) { System.out.println("total time: "+totalTime); } } }}
  6. I am really not sure what you need. I am using tomcat 5.5 on windows. I copied the startup.bat file in the tomcat\bin directory to startup_debug.bat. I then modified the line that read call "%EXECUTABLE%" start %CMD_LINE_ARGS% to be: call "%EXECUTABLE%" jpda run %CMD_LINE_ARGS% I setup netbeans projects for the various jaspeserver jar files I wanted to debug. I found it easier to copy all the jars from the jasperserver/WEB-INF/lib folder to one place so that I could use those jars for the compile dependencies. Once you build the jar you want to debug, replace the newly built jar with the one in your web-inf/lib folder. (jasperserver-war-3.1.0.jar for example) . Then bring up tomcat using the startup_debug.bat file . This will launch tomcat with hooks for debugging. Then in netbeans, you can use the debug menu item to attach the debugger to the running tomcat. I am sure you can do something similar in eclipse. Set you breakpoints and just use the browser or whatever client you want that hits the jasperserver webapp. Hope this helps.
  7. If you have an export from the export tool you can use the import. It should update the permissions
  8. You may try to add the jdbc driver jar file to the common/lib directory for tomcat. You may also need to add a resource reference in the web.xml file to the jndi resource.
  9. I just bring my app server up with debug settings and use the ide to attach the debugger to the app server. I have been using netbeans and that works ok for the most part. There are a couple of jars that I have to resort to maven build because I havent taken the time to integrate aspectj into the build.
  10. I have a dashboard that displays several reports. This works fine when I deploy on tomcat, but when I deploy on websphere all the report frames are displaying as if theye were in a main report. Each frame shows the jasperserver main menu bar, image etc. It is really ugly.) Any clues how I can solve this ? I experimented with adding the decorate=no to the url but had no luck.
  11. You are quite welcome. Yes I have also noticed that you need to recycle your app server in order to see changes to XMLA definitions exposed. Maybe a change listener would be in order. I have not used Simba ODBO in quite a while and I no longer have a license. You should give the Jaspersoft ODBO Connect a try if you can. Regards, Mark
  12. Could you export your xmla definition resource and your connection resource that it references. Here is one that works for me with my datasource. This is the defeinition that exposes the CBI_Financials catalog to XMLA <?xml version="1.0" encoding="UTF-8"?> <mondrianXmlaDefinition> <folder>/CBI_Financials/OLAP_Connections</folder> <name>CBI_Financials_XMLA_DEFINITION</name> <version>0</version> <label>CBI_Financials_XMLA_DEFINITION</label> <description>Exposes The CBI_Financials Schema to XMLA Clients</description> <creationDate>2009-10-13T16:25:15.299-04:00</creationDate> <catalog>CBI_Financials</catalog> <mondrianConnection> <uri>/CBI_Financials/OLAP_Connections/CBI_Financials_Mondrian_Connection</uri> </mondrianConnection> </mondrianXmlaDefinition> The catalog name (CBI_Financials in this example) will then become the datasource that is used in an xmla connection. It will look like "Provider=Mondrian;DataSource=CBI_Financials" Hope this helps!
  13. JS cannot support all ODBO Drivers because some ODBO drivere are specific to an analysis engine. (SSAS for Microsoft for example, there are many more.) Some ODBO drivers are written to use XMLA protocol. (Simba, Jaspersoft ODBO Connect, and others), these in theory should work with any analysis engine that support XMLA, BUT not all XMLA implementations are equal. Microsoft for example has extended the XMLA spec with additions for SSAS. I have used JS ODBO Connect to access SSAS, Pentaho, and of course Jasperserver. (BTW If the analysis server comes with an ODBO driver, I would use that one first.) In your previous post on this subject, you were asked if you have ever gotten an XMLA client to connect to your JS, and I believe there were some issues. You will have no chance of getting any XMLA based ODBO driver to access JS until this is configure properly. I recommend you use Wharehouse Explorer as an XMLA client to ensure that all your xmla definitions are working before you try an ODBO driver. You can get that here: http://sourceforge.net/projects/whex/ I have seen problems using an XMLA connection with jpivot analysis views, so I usually I am not sure whether or not JS Pro comes with ODBO Connect. Do you have a support agreement with Jaspersoft? If so you may want to get some help at least with the xmla configuration.
  14. I have a set of report units that use the olap query executor that I would like to run when tomcat starts up. I want to do this so that the analysis cache will be seeded. I have modified the web services to add a flushCache and runReport operation that I am able to use on a system that is up and running, but I would like to seed the analysis cache at tomcat startup. I was wondering where in the server initialization logic I could do this. I am willing to change code but I am not sure where the change should be made. Any ideas? Thanks!
  15. There is nothing special about that folder. You can place the resources in any folder you choose. I think the only "special" folder other than the root is the location for adhoc report templates
  16. The professional version of jasperserver you can store different parameter values for the same report end give the report a new name. so the weekly report, monthly report, quarterly report could all use the same jrxml but submit different saved parameter values. Another approach would be to write your own parameter defualt value routine. i believe there is a sample of this using user profile attribues as a source for the default parameters.
  17. What ODBO driver are you using? (Simba or JasperSoft) What ODBO Client are you attempting to use? Do you have an .odc file for the client connection? Check the file for the connection information. Here is a snippet of one of mine for Jaspersoft ODBO <xml id=msodc><odc:OfficeDataConnection xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns="http://www.w3.org/TR/REC-html40"> <odc:Connection odc:Type="OLEDB"> <odc:ConnectionString>Provider=Jaspersoft ODBO Connect.1;User ID=cincombiadmin;Data Source=http://localhost:8080/CincomBIServer/xmla;Extended Properties="Provider=Mondrian;DataSource=ARMart;";Initial Catalog=ARMart;Initial Catalog=ARMart</odc:ConnectionString> <odc:CommandType>Cube</odc:CommandType> <odc:CommandText>AR</odc:CommandText> </odc:Connection> </odc:OfficeDataConnection> </xml> Have you tried to use a non ODBO client to connect to your XMLA server? (jpivot or Whex ?)
  18. More research has shown that reports on a dashboard that has input controls were being executed twice. I looked at the code in the addhoc/scripts/dashboardRuntime.js file and had suspicions that it had something to do with the fact that the loaded function called the initFrameSource multiple times. I commented out the last call and it seemed to resolve my issue. Code: function loaded() { var permissionDenied = false; if (isPrintWindow()) { restoreParams(); } else { //don`t update params if we are a nested dashboard because it causes a recursion in FF try { var parentIFrameId = window.frameElement ? window.frameElement.getAttribute('id') : null; var isNestedWithinAnotherDashboard = parentIFrameId && (parentIFrameId.indexOf(CONTENT_FRAME_PREFIX) == 0); initFrameSource(!isNestedWithinAnotherDashboard); } catch (err) { //window is in an iframe but error getting iframe Id //assume this is permission denied which means iframe is in a different domain //therefore its ok to update params (no recursion) permissionDenied = true; initFrameSource(true); } if (!permissionDenied) { // mpenningroth 15-Jan-2010 // I don't really understand this code, but by not calling initFrameSource yet again // we get rid of the issue of executing the reports more than once if there // are input controls on the dashboard. (I commented out next line) // initFrameSource(!isNestedWithinAnotherDashboard); } }
  19. Default fetch size may or may not be supported based on the specific jdbc driver in use. That will affect the amount of data rows that can be communicated between the database server and client. Many database vendors do this at a lower client/server interface settings rather than jdbc. As for not getting results til all data is fetched, that makes sense for all but the simplest of reports. How would you do the group bands and summary bands without fetching all the data first.
  20. When I run the inner dashboard (the one that contains the single report with no parameters), the report is executed once. When I run the dashboard that contains the inner dashboard, the report gets executed twice. I found a way to get around this by modifying the dashboardRuntime.jsp to not set the thisUrlContext when the dashFrameResourceType property of the frame is a dashboard. Unfortunately my case is not that simple. I have a dashboard that contains a report. The report has a hyperlink that launches a dashboard that contains three other reports. When I click on the hyperlink, the underlying dashboard is displayed in a new window but each of the reports is executed twice. This is causing performance problems. I modified some of the jasperserver code to log some info and I also decorated the description from the log. I have attached the file
  21. I have a dashboard that contains a dashboard. When I display the dashboard, the reports contained in the inner dashboard get executed twice. Is there any way to only execute the report from the inner dashboard? In my specific case, I have a dashboard that contains a report that has hyperlinks. The hyperlink launches a dashboard that contains one or more reports. When I click on the hyperlink, I observer that each report in the launched dashboard is getting executed twice. (Once for the init and once on initial display?). I simulated the issue with the sample by creating a dashboard named DB1 that contains the Employee List sample report. I then created another dashboard named DB2 that only contains DB1. When I run DB2 I see the EmployeeList report get executed twice. I think it should only execute once. Any ideas?
  22. I didn't try using the defaultExpression. I think the problem is that the needsInput is being used incorrectly at dashboard initialization. It is correctly determining that input controls should be displayed, but the "true" result is being interpretted in the main flow as an error. I think there needs to be a different action than "checkParams" for the initialization of the dashboard. Ideally you would only get an error if a mandatory parameter does not have a value and it cannot be prompted for. BTW I have also been modifying the dashboard frame code so that if there are controls that map to url parameter values (with the hidden_ prefix), I show the value in the control. Not sure what the meaning of hidden_ is when there is a control, but i couldn't use the parameter value without the prefix. Mark
  23. You may be able to use the web services for the scheduler to delete the scheduled report right before the etl runs (or as part of the etl) and then use web service to add the scheduled report back after etl is complete
  24. I am using JasperAnalysisPro 3.1. I created a simple report with iReport that has a single string parameter named X. I gave X a default value of "Default X". I added the report to the Server and it runs fine when I invoke it from the repository. I added an input control for X and the report unit is set to always prompt. When I run the report, it displays a box for parameter input (which is initialized to Default X). The input control is not flagged as Mandatory. I then created a dashboard and added this report to it. The system complained with a misleading message: "The report is missing default values for at least one mandatory parameter" There are no mandatory parameters, and the one parameter I have has a default value. I added the input control to the dashboard and I get the same message but the control correctly displays the default value. I played with the "visible" flag and the "always prompt" flag and never got what I wanted. What I want is for the dashboard to display the controls with the default values and run the report. The user could then change the control, press subit and run again. I attempted to change the needsInput method in ReportParametersAction (see below) method with what is in the comments. This stopped the error message but the dashboard always ran with the default value even if I modified the control and hit submit. Note in the code below I replaced the initial return (!wrappers.isEmpty()); with the commented block. Any ideas? Thanks, Mark Code: protected boolean needsInput(RequestContext context, List wrappers) { // mpenningroth 11-DEC-2009 // I think it is weird to get an error that reads: // "The report is missing default values for at least one mandatory parameter" // For a report that has default values for the parms. // Furthermore, the test I did did not have any mandatory parms // This is an attempt to loop through the wrappers and only return true // if the wrapper has no value. May need to add a special check for what state we are // in. return (!wrappers.isEmpty());// if (wrappers.isEmpty())// return false;// else {// Iterator wi = wrappers.iterator();// while (wi.hasNext()) {// RuntimeInputControlWrapper w = (RuntimeInputControlWrapper)wi.next();// if (w.getValue() == null)// return true;// }// return false;// } }
  25. A Mondrian connection will allow you to communicate with analysis cubes on this server. An XMLA connection will allow you to access remote XMLA servers. (Can also be on the same server, but mondrian connection would perform better I think.) The remote servers could be other types of analytic engines that support XMLA (like MSAS etc.)
×
×
  • Create New...