Handling paginated reports with huge number of parameters - post

I am trying to build a Paginated report with many number of parameters [8] and with huge number values [100-1000] for each parameter. Because of the complexity in the UI, I intend to develop two reports.
Report [.pbix] where the user can select the parameters and values
The paginated report [.rdl] that's the actual result with pages of data.
The Report 1 will be calling the report 2, based on a generated URL. THis works for a limited number of parameters but since the list is huge, the reports are not generated because of the limitation on the URL length on the browser[chrome&IE]. I am looking for a solution that can work with an indefinite number of parameters. Trying to make this work with FORM and POST method so the parameters can be sent within the header itself.
Have looked into the https://community.powerbi.com/t5/Service/Paginated-Report-Using-URL-Parameters-and-Select-ALL/td-p/8... but the solution doesnt always work as the URL length is huge.
Is there a solution that can work with any number of parameters. preferably something that uses FORM/POST method. Open to any other suggestions - please let me know.
Regards,
Sasi.

Unfortunately I am sorry to inform you that according to Microsoft there are some strong limitations with transferring selected parameters when directing the user into Report Builder.
you can define no more than 10 filters conditions.
URL bytes length is very limited
For example, even if you use only one slicer, if the user selects 24 different values in that slicer it will break the URL toward Report Builder.
What is the exact Business Need? Either the business accept some strong limitations or you need to think of another implementation.
An example of possible limitation to propose the business is: Power BI passes only Year and Month to Report Builder, next, the user in Report Builder need to re-select the additional parameters.

Related

How do i trace multiple XML elements with same name & without any id?

I am trying to scrape a website for financials of Indian companies as a side project & put it in Google Sheets using XPATH
Link: https://ticker.finology.in/company/AFFLE
I am able to extract data from elements that have a specific id like cash, net debt, etc. however I am stuck with extracting data for labels like Sales Growth.
tried
Copying the full xpath from console, //*[#id="mainContent_updAddRatios"]/div[13]/p/span - this works, however, i am reliable on the index of the div (13) and that may change for different companies, hence i am unable to automate it.
Please assist with a scalable solution
PS: I am a Product Manager with basic coding expertise as I was a developer few years ago.
At some point you need to "hardcode" something unless you have some other means of mapping the content of the page to your spreadsheet. In your example you appear to be targeting "Sales Growth" percentage. If you are not comfortable hardcoding the index of the div (13), you could identify it by the id of the "Sales Growth" label which is mainContent_lblSalesGrowthorCasa.
For example, change your
//*[#id="mainContent_updAddRatios"]/div[13]/p/span
to:
//*[#id = "mainContent_updAddRatios"]/div[.//span/#id = "mainContent_lblSalesGrowthorCasa"]/p/span
which is selecting the div based on the div containing a span with id="mainContent_lblSalesGrowthorCasa". Ultimately, whether you "hardcode" the exact index of the div or "hardcode" the ids of the nodes, you are still embedding assumptions regarding the structure of page.
Thanks #david, that helped.
Two questions
What if the structure of the page would change? Example: If the website decided to remove the p tag then would my sheet fail? How do we avoid failure in such cases?
Also, since every id is unique, the probability of that getting changed is lesser than the index being changed. Correct me, if I am wrong?
What do we do when the elements don't have an id like Profit Growth, RoE, RoCE etc

Notice ''Too many URLs ''

I get notice in my google analytics panel:
Too many URLs
The number of unique URLs for owner review All site data exceeds the daily limit. Excess data is displayed in the summary row (left) in the reports.
Google Analytics summarizes data when too many rows in a table in one day. When you send too many unique URLs, surplus value summary is displayed in a single line reports the value (left) for the URL. This severely slows down your ability to perform detailed analysis of the URL.
Too many URLs are usually the result of a combination of a number of unique URL parameters. To avoid surpassing the limitations, the typical solution could be the exclusion of irrelevant parameters from URLs. For example, open the section Administator> Settings ownership review and use the setting Excluding query parameters in the URL to exclude parameters such as sessionid and vision. If your site supports a site search, use the Search Settings sites to track the parameters related to the search while at the same time removes from URLs
How this will affect on my website ?
I not understand why i get this error and how to fix this ?
I check this what google suggest:
Administator> Settings ownership review and use the setting Excluding query parameters in the URL to exclude parameters such as sessionid and vision.
Can anyone explain me how to use this for fix problem ?
Thanks.
It does not affect your website, is affects the GA reports only.
The url for any pageview is stored in the "page" dimension. Google Analytics can display at maximum 50 000 distinct values for this dimension for the selected timeframe. In your case there are more than 50 000 values, so any excess pages will be grouped together in a row labeled "other".
Now it may be that you have more than 50 000 distinct urls in your website, but Google thinks that this is unlikely, so it suggests to check if you are "artifically" inflating the number of distinct values for the page dimensions.
A bad but simple example: Imagine you allow your users to choose their own background color for your site, and that the choice of color was transmitted in an query parameter. So you might have e.g.
index.php?bgcolor=#cc0000
index.php?bgcolor=#ee5500
index.php?bgcolor=#000000
....
Due to the query parameter these urls would show up as three different pages, i.e. three different rows in the Google Analytics reports, despite the fact that in all cases the same content is displayed (albeit with different background colors).
The proper strategy in this case would be to go to the admin section, view settings, and in the "ignore url parameters" box insert the bgcolor parameter (and all other parameters that do not change the content that is display). Now the parameter will be stripped from the url before the data is processed, and the pageview will be aggregated into a single row with index.php as single value for the page dimension (of course you have to insert your own query parameter names).

Grand Total in Summary Band using Delphi Report Builder

I have two variables in the detail tab using Delphi report builder and the running totals are correct. It is getting its data from two sets of the client data sets within the Delphi code.
Now I need to get the grand total of the total that comes from the variables in the details band to calculate in the summary band. How would I go about doing this? Would I declare a global variable and set that? and if yes then how would I use that global variable with two different totals? Thanks in advance.
(I assume you mean Digital Metaphor's Report Builder - not sure if that's bundled with Delphi now or not...)
To create your grand totals:
Just create a summary band in the designer: Report->Summary, and put two DBCalc components in there. Assign their data fields to the fields you want to summarize as grand totals. This works because the DBCalc component is context aware - it knows what sort of band it lives in: If it's in a group footer, it aggregates for the group, if it's in the report summary section, it aggregates for the whole report.
Important: Consider if you need to summarize your subtotals, or directly aggregate all the data in the report. Depending on the data types and how you handle rounding, truncating, etc, there could be a difference between the two that causes you to come up with results that you aren't expecting.
BTW, I'm not sure why you're referring to variables - you should use DBCalc components for all your summations - they work automatically and are very easy to use, provided you put them in the correct band and feed them the correct data.
(All this is readily available in the Report Builder docs: Report Builder - Documentation | Developer's Guide, which is probably why this question was downvoted. You are supposed to do some preliminary research before posting a question here. )

how to restrict the number of table columns in bapi output

While querying BAPI, we are generally interested in only few columns of a table.
For example PO_ITEMS table (under BAPI_PO_GETITEMS) has 58 columns. While querying, I am interested in only 10 of those columns. But the BAPI response contains all the columns which is a
overhead.
In SQL world, we can always select which columns we want to retrieve. The query response contains only those columns, not all the columns.
I remember I have read somewhere that we can disable unwanted columns coming in response. But when I need it now, I am not able to find information about it.
Can anybody share a code snippet to achieve this? Or specific online resource/pointers would help?
Thanks
Depending on which technology you use to call the BAPI, you can sometimes restrict which parameters are transferred. For example, if you use the SAP Java Connector (JCo 3), you can use the method setActive of a parameter to restrict whether the parameter is transferred. However:
As far as I know, you can only enable or disable entire TABLES parameters or other parameters. You can't enable or disable individual columns.
As far as I know, the BAPI itself does not know about this setting - and even if it would know, few implementations would care.
Sometimes there are additional parameters that allow you selectively enable or disable fields, but that is part of the actual BAPI implementation and not some omnipresent basic technology.
this is not exact answer for your question.i hope it will help.I think we have no option to select certain number of column from a function module tables.but we can access particular row from that table like passing mandatory values from java side .....like this sample code here i did for function module(not table table).
JCoDestination destination = JCoDestinationManager.getDestination(DESTINATION_NAME);
JCoFunction jf=destination.getRepository().getFunction("ZUSER_DET");
jf.getImportParameterList().setValue("FIRST_NAME","username");
jf.execute(destination);
String jfex=jf.getExportParameterList().getString("some column name from return table");
System.out.println(jfex);
it will return a row of table value.you can manipulate whatever you want

how to retrieve colmodel and data on single request and speed up jqgrid load

jqGrid is powered by remote json data in ASP .NET MVC2 application.
On page load two requests are sent to server: one to retrieve whole html page with colmodel and second invoked by jqgrid to retrieve data.
colmodel is stored in database and depends on user rights and user configuration. Creating colmodel requires number of sql server calls which take a while.
Both request require building colmodel in server. For data retrieval colmodel is required to get correct number of columns to build select statement.
Currently this colmodel is built two times for every request. Also total number of recods is required to be returned which is slow on large data (causes whole result scan in PostgreSql server).
How to speed the things up ?
How to build colmodel only once and send it and data in same request?
I agree that extension of jqGrid to support the loading of some parts of colModel per one Ajax will be very helpful. For about a year I posted the feature request for example.
What you can do now:
If I correct understand your requirements you need to show the user the subset of the columns depend on the user's permissions. One can implement the requirement in one Ajax request. What you can do is: first don't send the "hidden" data or send there as empty string. Seconds you can send the list of columns, which should be hidden, to the client. In the case you can implement the variable number of columns in jqGrid. You can send the information inside of userData part of JSON response for example. To have better performance with many hidden columns I would recommend you to call showCol or hideCol inside of beforeProcessing and hide/show the columns on the empty grid. It will speed up the performance of showCol or hideCol dramatically. If it's needed you can include additional call of clearGridData.
You have to optimize the retrieval colModel. I don't understand why it should be slow. All depends from your implementation. In any way I am sure that one can make the retrieval really quickly.
To improve the performance of request of data from the database you can consider don't fill records field of the JSON response and set total to page + 1. It enebles the "Next" button of the pager. You should set total equal to page only if you returns less rows as the rows (number of rows per page). In the most cases it will be good criteria to detect the last page. You can additionally hide some field on the pager lake the "Last" button and the sp_1_... span which shows the total number of pages. You can do this by the usage of pgtext : "Page {0}" option or the usage of pginput: false to have no pager input at all. The viewrecords should be false (its default value). After all the customization you will don't need to calculate the total number of records and in the way improve performance of the database request in case of large data.

Resources