Purpose:
The purpose of this document is to demonstrate how we can leverage the power of business intelligence through a simple SSRS line chart report.
Prerequisites:
- Visual Studio 2013
- Visual Studio 2013 tools.
- Reporting extension.
- Report Builder.
- Should be well-versed in Report Programming Model.
Business requirement:
Leverage business intelligence by analyzing sales trends for top item groups over the period of time.
Project overview:
Development:
We will be following the Report Programming Model to develop a precision design report.
1. Create an InMemory table, MakItemSalesHistoryTmp. This table will be used as a data set for the report in Visual Studio.
2. Create an AOT query, MakItemSalesHistory. This query will be used in the Data Provider class to fetch records for the report.
3. Create a data provider class, MakItemSalesHistoryDP. Bind the AOT query with it.
[ SRSReportQueryAttribute(queryStr(MakItemSalesHistory)) ] class MakItemSalesHistoryDP extends SRSReportDataProviderBase { MakItemSalesHistoryTmp makItemSalesHistoryTmp; }
[ SRSReportDataSetAttribute(tableStr(MakItemSalesHistoryTmp)) ] public MakItemSalesHistoryTmp getItemSalesHistoryTmp() { select makItemSalesHistoryTmp; return makItemSalesHistoryTmp; }
private void insertTmpTable(SalesLine _salesLine) { Qty qty; Date shipDate; InventItemGroupItem groupItem; qty = _salesLine.QtyOrdered; shipDate = _salesLine.ShippingDateConfirmed; groupItem = InventItemGroupItem::findByItemIdLegalEntity( _salesLine.ItemId, _salesLine.DataAreaId); ttsBegin; makItemSalesHistoryTmp.clear(); makItemSalesHistoryTmp.ItemId = _salesLine.ItemId; makItemSalesHistoryTmp.ItemGroupId = groupItem.ItemGroupId; makItemSalesHistoryTmp.Price = _salesLine.salesPrice; makItemSalesHistoryTmp.Amount = _salesLine.SalesPrice * Qty; makItemSalesHistoryTmp.Qty = qty; makItemSalesHistoryTmp.Year = year(shipDate); makItemSalesHistoryTmp.MonthOfYearId = mthOfYr(shipDate); makItemSalesHistoryTmp.Days = dayOfMth(shipDate); makItemSalesHistoryTmp.insert(); ttsCommit; }
[SysEntryPointAttribute(false)] public void processReport() { Query query; QueryRun queryRun; QueryBuildDataSource qbds; QueryBuildRange qbr; SalesLine salesLine; InventItemGroup ItemitemGroup; query = this.parmQuery(); qbds = query.dataSourceTable(tableNum(InventItemGroupItem)); qbds.name("InventItemGroupItem"); qbr = qbds.addRange(fieldNum(InventItemGroupItem, ItemGroupId)); qbr.value(strFmt('((%1.%2 == "Speakers") || (%1.%2 == "Television"))', qbds.name(), fieldStr(InventItemGroupItem, ItemGroupId))); queryRun = new queryRun(query); while (queryRun.next()) { salesLine = queryRun.get(tableNum(salesLine)); this.insertTmpTable(salesLine); } }
4. Create a controller class, MakItemSalesHistoryController. You can observe, how the report dialog has been suppressed in the controller.
class MakItemSalesHistoryController extends SrsReportRunController { }
static void main(Args _args) { MakItemSalesHistoryController controller; controller = new MakItemSalesHistoryController(); controller.parmReportName(ssrsReportStr(MakItemSalesHistory, LineChart)); controller.parmArgs(_args); controller.parmShowDialog(false); controller.startOperation(); }
5. In Visual Studio 2013
- Create a new Project
- Add new Report to the solution.
- Add new Dataset, MakItemSalesHistoryTmp, of type Report Data Provider.
- Choose MakItemSalesHistoryDP class in the Query.
- Add new precision design, LineChart, to the report Designs node.
6. Edit LineChart using Designer.
7. Insert a new Chart report item from the Toolbox.
8. Double click on the chart area to open the field editor, add the following fields as specified.
Field | Drop area |
Year, MonthOfYearId | Category |
ItemGroupId | Series |
Qty | Data |
9. Next, you can improve the aesthetics of the chart, as it pleases, by updating different chart properties available out of the box in Visual Studio.
10. Save, build and deploy the report.
11. Create an output menu item and bind it with the SSRS report.
12. Add menu item to Sales and marketing > Reports > Sales orders > Item sales history.
13. You should be able to see the report in the Report viewer.
