Sunday, March 24, 2019

Create a Profit / Loss Statement for more than 30 columns

There are instances when users would want to run a comparative Income Statement for a span of multiple Periods / Months. Currently, the system will only allow users to add up to 30 columns in the Income Statement due to performance issues. The ability to expand the column limit is currently filed as Enhancement# 195728. The alternate solution is to create a Saved Search. The bandwidth in running Saved Searches over Reports is longer and should not time out.

To illustrate, assume that a user wants to create an Income Statement with the Amount column for the last 36 Periods / Months, i.e. 3 years. To create the Saved Search:

1. Navigate to Transactions>Management>Saved Searches>New
2. Select Transaction
3. On the Criteria tab add Posting is Yes, Account Type is Cost of Goods Sold / Income / Expense / Other Expense / Other Income, and Date is within relative from 36 months ago to 0 months ago
4. On the Results tab add Account with Summary Type = Group and the following Formula(Numeric) with Summary Type = Sum

  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),0,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),1,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),2,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),3,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),4,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),5,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),6,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),7,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),8,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),9,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),10,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),11,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),12,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),13,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),14,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),15,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),16,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),17,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),18,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),19,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),20,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),21,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),22,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),22,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),23,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),24,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),25,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),26,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),27,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),28,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),29,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),30,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),31,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),32,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),33,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),34,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),35,{quantity})
  • DECODE(TO_CHAR({today},'MM') - TO_CHAR({trandate},'MM') + 12*(TO_CHAR({today},'YYYY')-TO_CHAR({trandate},'YYYY')),36,{quantity})

5. Hit Save and Run
This Saved Search works (i.e. matches the Income Statement) when Home>Set Preferences>Reporting/Search>Report by Period is Never. In other words, the Saved Search is a comparative Profit / Loss or Income Statement based on transaction date and not Posting Period. A much more complicated Saved Search can be designed if users need to use Period primarily focused on converting the Period string to a numeric value (i.e. Jan 2013 = 1, Feb 2013 = 2, etc.). This Saved Seach can then be expanded to other accounts with the same business need.

No comments:

Post a Comment