Patent ID: 12254289

DETAILED DESCRIPTION

FIG.1illustrates an operating environment10for automatically and dynamically generating custom applications for execution in multidimensional database environments. The operating environment10may include a user device12, a target platform14, and an application builder server16. Each of these systems may communicate with one another via one or more private and/or public networks18, such as the Internet.

The user device12may be a computing device that enables users to access remote systems, such as the target platform14or the application builder server16, over the one or more networks18. For instance, the user device12may be a laptop, desktop, thin client terminal, mobile device, or tablet. The user device12may include a web browser or one or more apps for connecting with the remote systems over the one or more networks18.

The target platform14may be a computing platform on which a custom application is desired to be deployed and executed. The target platform14may be a multidimensional database environment, and may include a combination of hardware and/or software configured for maintaining multidimensional databases in connection with various applications. In one example, the target platform14may be configured to provide organizational and analytical services to a wide range of operational aspects of an enterprise using one or more multidimensional databases. The target platform14may be hosted locally by the user of the target platform14, such as at the enterprise served by the target platform14. Alternatively, the target platform14may be provided as a cloud service to which multiple enterprise users are able to subscribe and access over the Internet.

In some examples, the target platform14may include a master data management (MDM) server20configured to implement an MDM system22for an enterprise, and may include an enterprise performance management (EPM) server24configured to implement an EPM system26for an enterprise. In alternative examples, the MDM system22and EPM system26for an enterprise may be hosted on separate target platforms14.

The MDM system22may be configured to implement and maintain a master data source28that stores master data30for an enterprise. The master data30may generally indicate the assets, liabilities, accounts, and structure of the enterprise and the relationships between these various items. For instance, the master data30may indicate a hierarchy of products, accounts, customers, lines of business, reporting time periods, and so on of the enterprise. The master data30may also indicate the hierarchal structure of one or more multidimensional databases32of the enterprise, described in more detail below. Portions of the stored master data30may concern and be affected by various business units and applications across the enterprise. The MDM system22may be communicatively coupled to these business units and applications, and may be configured to update the master data30as operations across the enterprise result in changes to the master data30to ensure the timeliness, accuracy and completeness of the master data30.

The EPM system26may be configured to implement one or more multidimensional databases32for an enterprise, which may also be referred to as cubes, and may be configured to leverage the multidimensional databases32for planning, budgeting, forecasting, and reporting business performance of the enterprise. Each multidimensional database32may be conceptualized as a multi-dimensional matrix (e.g., three or more dimensions) with each dimension representing the highest consolidation level of the multidimensional database32. Exemplary dimensions of a multidimensional database32for an enterprise may include an accounts dimension, products dimension, locations dimension, customers dimension, sales channels dimension, periods dimension, and currencies dimension, to name a few.

Each dimension may include a plurality of members, each of which may also include a plurality of members. Each dimension may thus be organized as a hierarchical tree structure with the dimension itself serving as the root node and a parent node to one or more members, each of which may either be a leaf node or be a parent node to one or more other members, and so on. For instance, the accounts dimension may include and be a parent node to a volume member, a per unit price member, a premium member, and a military discount member. The products dimension may include and be a parent node to a member for each product line of the enterprise, which in turn may include and be a parent node to a member for each product of the product line. A given combination of members each from a different dimension of a multidimensional database32may represent an intersection of those members within the multidimensional database32, and may point to a data value in the multidimensional database32that corresponds to the combination.

The members under a parent node of a dimension may be referred to as descendants of the parent node, and the members above a given member (and the root node) of a dimension may be referred to as ancestors of the given member. The members one level under a parent node of a dimension may be referred to as the children of that parent node, and the multidimensional database32may store computation logic defining how the children of a parent node relate to the parent node (e.g., summation, subtraction, mathematical formula).

The different levels of consolidation within a dimension may be considered as distinct generations of the dimension, with the root node of the dimension belonging to generation one of the dimension, and each subsequent level of members belonging to a different iteratively numbered generation of the dimension. More specifically, each member a same distance from the root node of the dimension may be part of a same generation of the dimension, with the generations having incrementally increasing numbers as the distance between the members of the generation from the root node increases. For instance, referring to the products dimension described above, generation one may include the products dimension, generation two may include the product line members, and generation three may include the products of each product line member.

The complex structure and vast amount of data supported by multidimensional databases32enables organizing and processing data to a scale that extends well beyond what is practically possible by the human mind or using pen and paper. Correspondingly, computer-executable applications may be developed and executed against multidimensional databases32for querying and processing data therefrom to derive useful information. When the target platform14is serving an enterprise, for example, such applications may be employed for the purposes of planning, budgeting, forecasting, and reporting business performance at different levels of granularity. For instance, an application may be developed that is configured, upon execution on the target platform14, to generate and display a comprehensive view of net sales revenue of the enterprise that is broken down by one or more members of one or more dimensions of the multidimensional databases32(e.g., by product, entity, customer, sales channel, period, and so on).

Because of significant variations from industry to industry and even between enterprises within the same industry, applications often need to be customized to the specific structure of the enterprise and of the multidimensional databases32of the enterprise. To provide such customization, an enterprise may hire a developer that spends considerable time (e.g., multiple days) manually analyzing the enterprise's structure, identifying computation logic related to the desired target outputs of the application relative to the structure of the enterprise's multidimensional databases32, and writing separate computer code for each desired target output that is configured upon execution to query and process data from the multidimensional databases32to generate the target outputs. Given the technical complexity, vast amount of data content, and uniqueness of multidimensional databases32across different enterprises, developing and deploying such applications in this manner is a relatively lengthy process that may result in inefficient applications with low precision and high rates of error.

For instance, the chart of accounts that are used by an automotive manufacturing company may differ significantly from that of a pharmaceutical company, both of which may desire an application configured to query and process data from its multidimensional databases32to derive a net sales revenue with a specified granularity level. The calculation of net sales revenue for the automotive manufacturing company may depend on the volume of vehicles sold, price per vehicle, seasonal discounts applied during certain months of the year, and cost of promotions such as 0% interest financing. Conversely, the calculation of net sales revenue for a pharmaceutical company may depend on sales volume, licensing fee/royalty revenues, rebates for commercial, employer-sponsored or self-insured health plans, and regulatory price adjustments. The drivers and computation logic for determining net sales revenue for each of these enterprises may thus widely vary.

The granularity of data for each desired target output also adds to the complexity of the above problem. Data granularity is a nuanced and layered challenge for both computers and humans alike. Multidimensional databases32for a given enterprise may have ten to fifteen dimensions each with a hierarchy of thousands of members based on the complexity of the enterprise. Manually analyzing such relationships to determine appropriate source data and computation logic for providing desired target outputs is cumbersome, imprecise, and often error prone.

For instance, continuing with the above examples, the volume of vehicles sold by an automotive manufacturing company may be further defined in its multidimensional databases32by legal entity, name plate (e.g., vehicle make and model), transaction currency, sales channel (e.g., retail vs. fleet), customer, and whether the customer is an external entity (e.g., a car dealership) or represents an internal transfer of assets (e.g., plant in Singapore shipping a finished product to a plant in Canada for sale in the Canadian market). The latter may be relevant to whether sales are double counted. Conversely, the volume of sales by a pharmaceutical company may be further defined in its multidimensional databases32by sale location, entity that recognizes the sale as revenue, hospital system that prescribed the drug resulting in the sale, rebate rate corresponding to the sale, and any additional discounts that were applied to the sale per the contract with the pharmacy benefits manager (PBM).

The granularity of data may also vary between accounts of an enterprise's chart of accounts. For instance, the head count of manufacturing labor may be further broken down by entity/location but not by product. Because labor may work on multiple products, it may not be possible to track a per person cost by each individual product manufactured at a plant. As a further example, sales volume may be further broken down by product name but not by cost center (e.g., Information Technology, Services General, Accounting, and Manufacturing).

The above examples highlight the complexities and technical difficulties of developing applications for querying and deriving target outputs from the multidimensional databases32of various enterprises. The application builder server16overcomes these technical difficulties by providing a streamlined custom application generation solution for multidimensional database environments. Specifically, the application builder server16is configured to implement an algorithm that facilitates automatically generating custom, stable, and resource-efficient applications for querying an enterprise's unique multidimensional databases32and accurately providing target outputs desired by the enterprise. Compared with the manual process described above, the application builder server16is typically able to generate and deploy application packages for multidimensional database environments in about fifteen minutes or less, with such application packages often including 50%-80% less code than applications previously developed for multidimensional database environments. The application packages developed by the application builder server16thus consume fewer resources of the target platform14and query and process data from the multidimensional databases32with increased speed and efficiency. The operating environment10, or more particularly the application builder server16, thus greatly enhances the technical field of databases.

The application builder server16may host an application creation engine34configured to generate the custom applications for querying and deriving target outputs from an enterprise's multidimensional databases32. The application creation engine34may include a discovery module36, a decision module38, and a deployment module40. These modules may be defined by distinct sets of computer program instructions executing on a processor of the application builder server16, and may be configured to implement an algorithm for automatically generating resource-efficient custom applications for various enterprises across various industries. The modules may be configured to cooperate with one another, with various databases, and various external systems, such as the user device12, the MDM system22, and the EPM system26, to facilitate creation of the dynamic machine written applications.

The discovery module36may be configured to discover an application definition42defining various configuration parameters for a requested custom application, including dimensions, user inputs, dashboards, and computation logic for the custom application, and store the application definition for machine driven analysis and decisions. For example, the discovery module36may be configured to discover the application definition42based on user inputs44received from a user via the user device12and/or master data30retrieved from the master data source28.

For example, the application definition42may indicate several target outputs to be produced by the custom application from data stored in the multidimensional databases32, influencers for each of the target outputs that impact calculation of the target output, computation logic for each target output that defines a relationship between the influencers for the target output and the target output, and granularity data for each target output.

Each target output may indicate a data item (e.g., an account) to be calculated and output by the custom application based on data retrieved from the multidimensional databases32, such as in a form that allows the data item to be viewed and digested by the user at different levels of granularity (e.g., by product, sales channel, month). For instance, the custom application may be configured to output a multidimensional data cube similar to the multidimensional databases32for each target output. The target outputs may thus define a left hand side (LHS) of equations machine written by the application creation engine34for the custom application.

The influencers, computation logic, and granularity data may define the right hand side (RHS) of the machine written equations. The influencers indicated for each target account may correspond to members of one or more dimensions of the multidimensional databases32that impact the target account (e.g., component accounts that combine to form the target output). The computation logic for each target output may indicate a formula for calculating the target output from the influencers (e.g., addition, multiplication, division, subtraction). The granularity data for each target output may indicate a granularity level of each influencer for the target output relative to other dimensions of the multidimensional databases32to use for calculating the target output (e.g., use influencer data broken down by product, entity, customer, channel, time period, and currency within the multidimensional databases32). The granularity data for each target output may also indicate a granularity level to provide for the target output relative to the other dimensions (e.g., generate the target output broken down by product, entity, customer, channel, time period, and currency).

The discovery module36may be coupled to a template database46and a frontend portal48, such as a website, hosted by the application builder server16. A user may access the frontend portal48via the user device12, and may thereby submit a request to the discovery module36to build a custom application for the target platform14, or more particularly for the EPM system26of the target platform14. The user may also provide user inputs44indicating selected configuration parameters for the custom application through the frontend portal48, such as application type, currency process type, currency rates method, eliminations strategy, cube information, period granularity, fiscal calendar, dimensionality, driver definition, form definition, security matrix, and master data source.

The application type configuration parameter may indicate the type of target platform14for which the custom application is desired. Different target platforms14may support different programming languages and storage structures (e.g., data blocks, index, hybrid), and a given target platform14may provide different subscription levels that support varying program languages and storage structures. The application type may thus indicate a programming language and storage structure compatible with the target platform14for the given user. The application type may also indicate one or more purposes of the application, such as driver based forecasting, what if scenarios, long range planning, variance analysis, and rolling forecasts. The application type may also indicate the target outputs for the custom application.

The currency process type configuration parameter may define translation/transaction logic for the custom application. Multi-national companies may perform their revenue and expense planning in local currencies, and financials may need to be translated to the corporate reporting currency (usually the corporate location) for management reporting and analysis. Furthermore, while most business units trade in the local currency where the business unit is physically located, there are times when a business unit executes purchase orders and revenue contracts in a non-local currency. These exceptions introduce complexity into the currency translation process and need to be treated differently when calculating from transaction currency to the business unit currency and then to the reporting currency. The currency process type configuration parameter may thus define such translations/transactions logic generated for the requested application by the decision module38.

The currency rates method configuration parameter may define how currency conversion rates are to be loaded by the requested custom application. As an example, this information may be used by the application creation engine34, or more particularly the decision module38, to determine whether to multiply or divide by conversion rates to convert from transaction/entity currency to reporting currencies. This configuration parameter may work in conjunction with the currency process type configuration parameter described above.

The eliminations strategy configuration parameter may be designed to eliminate double counting of intra company transactions by the custom application. While such transactions may be relevant to tracking and measuring the performance of each business segment/unit, when reporting performance outside the company, it may be desired that they are eliminated. For instance, the eliminations strategy configuration parameter may indicate to eliminate transactions between buyers and sellers within the company, and may indicate to eliminate transactions between business segments or lines of business of the company. The eliminations strategy configuration parameter may cooperate with internal and external customer hierarchies identified by the discovery module36, such as from the master data30and/or the user inputs44, to enable the decision module38to generate machine written elimination code for the requested custom application, and to support hierarchies for management and external reporting.

The cube information configuration parameter may indicate the count, names, and types of the cubes forming the multidimensional databases32of the enterprise. The decision module38may utilize this parameter to generate machine written code specific to accessing and querying data from the multidimensional databases32of the enterprise.

The period granularity configuration parameter may define the time granularity in which the enterprise plans their financials, such as by year, quarter, month, week, day, or a combination thereof. The fiscal calendar configuration parameter may indicate the first month of a calendar year for the enterprise, such as defined in the enterprise's EPM system26. The decision module38may be configured to utilize these configuration parameters to set up the proper computation logic for rolling balances, inventories, setting up reporting periods, and so on.

The dimensionality configuration parameter may define the granularity of data that a company uses to organize its assets and accounts and plan its finances. For instance, the dimensionality configuration parameter may indicate that the enterprise plans their sales volume by product, forecasts their revenue by line of business, plans their head count by cost center, and so on. The dimensionality configuration parameter may include information derived from the retrieved master data30, such as an identification of the dimensions of the enterprise's multidimensional databases32, and the structure of such dimensions (e.g., members, hierarchies, dimensional computation logic).

The driver definition configuration parameter may indicate the target outputs to be output by the custom application, and may indicate the influencers, computation logic, and the granularity data for each target output as described above. The driver definition configuration parameter may also indicate any exceptions to be applied to the influencers in the calculation of the target outputs, as described in more detail below.

The form definition configuration parameter may indicate how the output of the application is presented to the user. For instance, the form definition configuration parameter may define, for each target output, how to represent the target output in a table format (e.g., what data content to place in the rows and columns of the table). The security matrix configuration parameter may indicate who can access which entries of each target output. For instance, the security matrix configuration parameter may indicate that a user from a particular business unit of the enterprise can access portions of the target outputs that are relevant to that business unit, but not other portions.

The master data source configuration parameter may identify a location (e.g., Internet address) of the MDM system22and the master data source28for the enterprise. The discovery module36may be configured to determine the application definition42based on a combination of master data30retrieved from the master data source28using the master data configuration parameter and user inputs44provided via the user device12.

A user may access the discovery module36and submit a request to build a custom application for the target platform14, or more particularly for the EPM system26, for querying and processing data from one or more multidimensional databases32of the EPM system26via the user device12and the frontend portal48. Responsive to receiving a request for a custom application, the discovery module36may be configured to generate and communicate a graphical user interface (GUI)50to the user device12via the frontend portal48. The GUI50may enable the user to submit user inputs44for defining the application definition42described above. The discovery module36may also be configured to dynamically update the GUI50as user inputs44are entered to streamline and guide the user in providing data for the application definition42. For instance, the discovery module36may be configured to build Visual Basic for Applications (VBA) templates for the GUI50on the fly based on the user inputs44received through the GUI50that are optimized for collecting the above described configuration parameters from the user. These templates may also have built in validations for checking entered data for errors.

As an example, responsive to receiving a request to generate a custom application for querying and processing data from the one or more multidimensional databases32of a target platform14, the discovery module36may be configured to communicate a GUI50to the user device12that provides fields for entering target outputs for the custom application, a location (e.g., Internet Address) of the MDM system22(and master data source28) and of the EPM system26(and the multidimensional databases32) for the enterprise of the user requesting the application, and credentials for these systems.

Responsive to receiving the location and credentials for the MDM system22, the discovery module36may be configured to make an API call to the MDM system22, such as via a master data API54provided by the MDM system22, to retrieve master data30from the master data source28that indicates the dimensions, members, hierarchies, and internal computation logic of the multidimensional databases32. The discovery module36may then be configured to dynamically update the GUI50to list these dimensions, such as in one or more dropdown lists, as options selectable by the user for defining the driver definition configuration parameter for the custom application.

In particular, a user may interact with the GUI50to select one or more of the listed dimensions as relevant to the custom application. For instance, the user may select one or more of the listed dimensions as influencer dimensions, the members of which may provide influencers for the target outputs, and may select one or more of the dimensions as granularity dimensions, the members of which may provide granularity definitions for the selected influencers. Responsive to selecting one or more of the listed dimensions, the discovery module36may be configured to dynamically update the GUI50to list the members of the selected dimensions as selectable options for defining influencers and granularity definitions for each target output, such as in the form of dropdown lists. The discovery module36may also be configured to dynamically update the GUI50to include fields for defining the calculation logic for each target output as the influencers for each target output are selected.

As an example, responsive to receiving user inputs44submitted via the GUI50indicating the target outputs and relevant dimensions, the discovery module36may be configured to dynamically generate a driver definition template that is optimized based on the received data to guide a user in defining a driver definition for the custom application. In particular, the driver definition template generated by the discovery module36may have a table format with rows prepopulated with the target outputs and columns prepopulated with the indicated dimensions. The discovery module36may then be configured to update the GUI50with the driver definition template, which the user may interact with to define the driver definition for the custom application.

At least one of the dimensions, such as the dimensions corresponding to measures of an enterprise (e.g., accounts dimension), may be tagged as an influencer dimension within the driver definition template (e.g., a dimension from which influencers may be selected), and the remaining dimensions may be tagged as granularity dimensions within the driver definition template (e.g., dimensions that provide granularity to the influencers). Such tagging may have been performed manually by a user via the GUI50as described above, or may be performed automatically by the discovery module36based on the type of dimension (e.g., currency, accounts, period, product), which may be indicated in the retrieved master data30and/or defined manually by the user via the GUI50. In particular, the template database46may store data associating various dimension types each with the influencer dimension tag or the granularity dimension tag. The driver definition template may then enable the user to modify the default tags if desired.

The discovery module36may also be configured to prepopulate the driver definition template with the structure of each dimension, such as the members, hierarchies, and/or internal computation logic of each dimension, which may be indicated in the master data30retrieved from the master data source28. As an example, for each target output, the driver definition template may provide one or more influencer dropdown lists that list the members, hierarchy, and/or computation logic of each influencer dimension. A user may then interact with the influencer dropdown lists associated with each target output to select members of the influencer dimensions to serve as influencers for the target outputs.

Responsive to selection of an influencer for a given target output, the driver definition template may be configured to automatically generate granularity dropdown lists in association with the selected influencer, with each granularity dropdown list being for defining a granularity definition for the influencer relative to a different granularity dimension. To this end, each granularity dropdown list may be prepopulated with the structure of the granularity dimension associated with the dropdown list, such as the members, generations, and groups of children of the granularity dimension. A user may then interact with the dropdown lists to select one or more of the listed items as granularity definitions for the influencer relative to the granularity dimensions.

Responsive to selection of an influencer for a given target output, the driver definition template may also be configured to automatically display another dropdown list that enables the user to define another influencer for the target output if desired, and display a field for defining computation logic for the target output relative to the selected influencer. In some examples, the driver definition template may also be configured to provide granularity dropdown lists for each target output that enable a user to select a granularity definition for each target output relative to each granularity dimension.

In some instances, the discovery module36may be configured to receive additional driver definition data via the GUI50prior to generation of a prepopulated driver definition template. For instance, the discovery module36may be configured to dynamically generate the driver definition template after the user also submits user inputs44via the GUI50indicating the influencers and calculation logic for each target output. Responsive to thus receiving user inputs44indicating the target outputs, influencers, computation logic, and granularity dimensions, the discovery module36may be configured to generate a driver definition template having a table format with rows prepopulated with the target outputs and the influencers and calculation logic for each target output, and columns prepopulated with the granularity dimensions. Each target output and/or each influencer may be associated within the driver definition template with a dropdown list for each granularity dimension that is prepopulated with the structure of the granularity dimension, such as the members, generations, and groups of children of the granularity dimension. A user may then interact with the dropdown lists to define granularity definitions for each target output and influencer relative to each of the granularity dimensions.

In some instances, the discovery module36may also be configured to suggest, such as via the GUI50and/or within the driver definition template, dimensions of the multidimensional databases32to serve as the influencer and granularity dimensions for the target outputs, and members of such dimensions to serve as influencers and granularity definitions for the target outputs. To this end, the template database46may store data indicating previous driver definitions used to build validated custom applications. Responsive to receiving user inputs44identifying target outputs for a custom application, the discovery module36may be configured to query this data from the template database46to identify previous driver definitions that include at least one of the identified target outputs. The discovery module36may then be configured to determine whether the granularity and influencer dimensions for the at least one target output within the identified previous driver definitions match dimensions of the present multidimensional databases32, which may be indicated in the retrieved master data30, and whether the influencers and granularity definitions for the at least one target output within the identified previous driver definitions match members within the present multidimensional databases32, such as those of the matching dimensions, which may also be indicated in the retrieved master data30. The discovery module36may then be configured to suggest the matching dimensions, influencers, and granularity definitions, and the calculation logic associated with the matching influencers, for the driver definition of the custom application.

In some instances, an enterprise may not implement a master data source28containing the master data30for the enterprise. If the user indicates that no such master data source28is available, then the discovery module36may be configured to dynamically generate a master data template based on previously received user inputs44, such as dimensions submitted by the user, that enables the user to manually enter a structure for each dimension (e.g., members, hierarchy, computation logic). In some instances, the template database46may store data indicating standard master data for various types of enterprises, and the discovery module36may be configured to prepopulate the master data template with the dimensions indicated by the user and a standard structure of those dimensions based on the standard master data stored in the template database46that corresponds to the type of enterprise of the user. The user may then interact with the master data template via the GUI50to add to, remove from, and modify the standard master data to fit the particular enterprise of the user.

FIG.2illustrates an exemplary driver definition template70that may have been dynamically generated on the fly by the discovery module36based on previously received user inputs44and thereafter completed by the user via the GUI50to define the driver definition configuration parameter for a custom application requested by the user. The driver definition template70may list target outputs72submitted for the requested application via the GUI50, such as a net sales revenue target output72A and a third party licensing revenue target output72B. The driver definition template70may also set forth influencers74selected for each target output72via the GUI50and/or driver definition template70. The influencers74may correspond to members of one or more dimensions of the multidimensional databases32tagged as influencer dimensions, such as dimensions of a measures type (e.g., accounts dimension). In the illustrated example, the influencers74selected for the net sales revenue target output72A include a volume influencer74A, a per unit price influencer74B, a premium influencer74C, and a military discount influencer74D, and the influencers74selected for the third party licensing revenue target output72B include a volume influencer74E, a per unit fee influencer74F, and an overhead influencer74G.

The driver definition template70may also include computation logic76selected for the target outputs72, such as via the GUI50and/or driver definition template70, that indicates the relationships between the influencers74to the target outputs72. More particularly, the computation logic76selected for each target output72may indicate a formula for determining the target output72from the influencers74defined for the target output72. For instance, the computation logic76for the net sales revenue target output72A may include a multiplication relationship76A, an addition relationship76B, and a subtraction relationship76C, indicating that the net sales revenue target output72A may be calculated as the volume influencer74A multiplied by the per unit price influencer74B plus the premium influencer74C minusthe military discount influencer74D. As a further example, the computation logic76selected for the third party licensing revenue target output72B may include a multiplication relationship76D and an addition relationship76E indicating that third party licensing revenue target output72B may be calculated as the volume influencer74E multiplied by the per unit fee influencer74F plus the overhead influencer74G.

The driver definition template70may also include granularity data78for the target outputs72. The granularity data78may specify the granularity dimensions80selected for the custom application and, for each influencer74, selected influencer granularity definitions82indicating what data in the multidimensional databases32to use for each influencer74in the calculation of the target outputs72. More particularly, each influencer74may include multiple values within the multidimensional databases32each associated with a different combination members from one or more of the granularity dimensions80. In other words, each influencer74may be broken down within the multidimensional databases32by members of the granularity dimensions80.

In general, if the data values stored for a given influencer74vary within the multidimensional databases32as a function of the members of a given dimension, then the dimension may provide a level of granularity to the influencer74, and may thus be listed as a granularity dimension80in the driver definition template70. Alternatively, if the data values stored for a given influencer74within the multidimensional databases32do not vary as a function of the members of a given dimension, then the dimension may not provide any level of granularity for the influencer74. The granularity dimensions80of the driver definition template70may include each dimension of the multidimensional databases32that provides a level of granularity to at least one of the influencers74of the driver definition template70. Correspondingly, each granularity dimension80of the driver definition template70may not provide a level of granularity for every influencer74.

For instance, referring to the example illustrated inFIG.2, the per unit price influencer74B may include levels of granularity within the multidimensional databases32relative to members of a product granularity dimension80A, entity granularity dimension80B, customer granularity dimension80C, channel granularity dimension80D, period granularity dimension80E, currency granularity dimension80F, and attribute granularity dimension80G. In other words, the per unit price influencer74B may be broken down by product, entity, customer, sales channel, period, currency, and attributes within the multidimensional databases32. The volume influencer74A may include levels of granularity within the multidimensional databases32by all of the above granularity dimensions80other than the currency granularity dimension80F, and the premium influencer74C and military discount influencer74D may each include levels of granularity within the multidimensional databases32by all of the above granularity dimensions80other than the product granularity dimension80A. In other words, volume may not be tracked by currency within the multidimensional databases32, and premium and military discount may not be tracked by product within the multidimensional databases32.

As previously described, a user may manually select the granularity dimensions80to populate the driver definition template70, such as via user inputs44provided to the GUI50. Additionally or alternatively, responsive to a user indicating an influencer74via the GUI50, the discovery module36may be configured to suggest dimensions of the multidimensional databases32for the granularity dimensions80based on the retrieved master data30and/or the identification of the multidimensional databases32. For instance, the discovery module36may be configured to make an API call to the multidimensional databases32, such as using an EPM API56provided by the EPM system26hosting the multidimensional databases32, and traverse through the multidimensional databases32to identify the dimensions by which the values of the influencer74vary. Additionally, or alternatively, the discovery module36may be configured to identify such dimensions from the master data30, which may indicate dimensions that provide a level of granularity for each influencer74. The discovery module36may also be configured to identify which dimensions of the multidimensional databases32to suggest as granularity dimensions80based on previous driver definitions stored in the template database46, as described above. When generating the driver definition template70for data entry by the user, the discovery module36may be configured to prepopulate the driver definition template70with the suggested dimensions as the granularity dimensions80of the driver definition template70, which may then be confirmed or modified by the user.

Responsive to the discovery module36generating and updating the GUI50with the driver definition template70, a user may interact with the driver definition template70to select influencer granularity definitions82for each influencer74. In some instances, responsive to determining a granularity dimension80for a given custom application, the discovery module36may be configured to determine the structure of the granularity dimension80within the multidimensional databases32, including the members, hierarchy, and internal computation logic of the granularity dimension80, such as based on the retrieved master data30. Thereafter, when generating the driver definition template70, the discovery module36may be configured to prepopulate the driver definition template70with potential influencer granularity definitions82for the granularity dimension80based on the determined structure. For instance, for each influencer74, the driver definition template70may display a dropdown list for each granularity dimension80that lists each member, each generation, each parent node, and each group of children members under a parent node of the granularity dimension80as potential influencer granularity definitions82for the influencer74relative to the granularity dimension80. A user may then interact with the dropdown lists for each influencer74to select a given member, generation, parent node, group of children, or a custom combination of members of each granularity dimension80to serve as the influencer granularity definition82for the influencer74relative to the granularity dimension80.

As previously described, each granularity dimension80of the driver definition template70may not provide a level of granularity to every influencer74of the driver definition template70within the multidimensional databases32. In this case, the user may interact with the driver definition template70to set the influencer granularity definition82for the influencer74relative to the granularity dimension80to a null indicator such as “none.” Alternatively, the discovery module36may be configured to prepopulate the driver definition template70with such influencer granularity definitions82automatically, such as based on the master data30or parsing of the multidimensional databases32as described above. For a given granularity dimension80, the influencer granularity definitions82may thus indicate the influencers74to which members of the granularity dimension80are applicable and influencers74to which members of the granularity dimension80are not applicable with respect to calculation of the target outputs72. As described in more detail below, this data may enable the decision module38to determine how to structure the right hand side (RHS) of each equation generated by the decision module38.

As previously described, the influencer granularity definitions82selected for an influencer74associated with a given target output72may indicate the values of the influencer74to use for calculating the target output72. More particularity, the influencer granularity definitions82selected for an influencer74may indicate to use the value of the influencer74for each possible combination of members indicated in the influencer granularity definitions82within the multidimensional databases32to calculate the target output72. If a given influencer granularity definition82indicates some level of granularity relative to a granularity dimension80(e.g., indicates one or more members of the granularity dimension80), such influencer granularity definition82may be referred to as providing a nonzero level of granularity. Alternatively, if a given influencer granularity definition82indicates no level of granularity relative to a granularity dimension80(e.g., “none”), such influencer granularity definition82may be referred to as providing a null level of granularity.

For instance, referring to the example illustrated inFIG.2, the influencer granularity definitions82set for the volume influencer74A may indicate to calculate a net sales revenue target output72A using the value of the volume influencer74A for each combination of product (granularity definition82A-1), entity (granularity definition82B-1), customer (granularity definition82C-1), channel (granularity definition82D-1), and month (granularity definition82E-1) within the multidimensional databases32, but not with respect to any particular currency (granularity definition82F-1) in the multidimensional databases32. The influencer granularity definition82G-1for the volume influencer74A may also indicate that the data used for the volume influencer74A should be limited to data associated with the “DepA” attribute within the multidimensional databases32. Any other values for the volume influencer74A within the multidimensional databases32may be omitted from the calculation.

As a further example, the influencer granularity definitions82for the premium influencer74C may indicate to calculate the net sales revenue target output72A using the value of the premium influencer74C within the multidimensional databases32for each combination of entity (granularity definition82B-3), customer (granularity definition82C-3), channel (granularity definition82D-3), month (granularity definition82E-3), and currency (granularity definition82F-3) within the multidimensional databases32, and not with respect to any particular product (granularity definition82A-3). The influencer granularity definition82G-3for the premium influencer74C may similarly indicate that the data used for the premium influencer74C should be limited to data associated with the “DepA” attribute within the multidimensional databases32.

The completed driver definition template70may thus represent an equation for each target output72indicated in the application definition42. The left hand side (LHS) of the equation may be the target output72, and the right hand side (RHS) of the equation may be defined by the influencers74, computation logic76, and granularity data78for the target output72. Examples of such equations are described in more detail below.

In some instances, the granularity data78for each target output72may also indicate a target output granularity definition84for the target output72relative to each granularity dimension80. The target output granularity definitions84may generally indicate the levels of granularity that should be output by the custom application for each target output72. The user may interact with the driver definition template70to set the target output granularity definitions84, such as similar to how the influencer granularity definitions82may be defined as described above (e.g., a prepopulated dropdown list for each granularity dimension80).

Additionally, or alternatively, the driver definition template70may be configured to dynamically determine the target output granularity definitions84for each target output72, such as based on the influencer granularity definitions82defined for the influencers74for the target output72. For instance, responsive to a nonzero influencer granularity definition82(e.g., influencer granularity definition82other than “none”) being set for a given target output72relative to a given granularity dimension80, the driver definition template70may be configured to automatically set the target output granularity definition84for the given granularity dimension80to the set nonzero influencer granularity definition82. The driver definition template70may also be configured to automatically limit the selectable options for the other influencer granularity definitions82for the target output72relative the granularity dimension80to either the set influencer granularity definition82or “none.” In this way, to the extent the influencer granularity definitions82for a target output72relative to a granularity dimension80indicate a nonzero level of granularity, such influencer granularity definitions82may all indicate the same nonzero level of granularity.

The discovery module36may be coupled to the decision module38and an application definition database58. Responsive to capturing the application definition42, the discovery module36may be configured to write the application definition42to the application definition database58, and to communicate a notification to the decision module38that the application definition42is ready for processing. Responsive to receiving the notification, the decision module38may be configured to read the application definition from the application definition database58, and to analyze the application definition42to automatically generate resource-efficient machine written code for querying the multidimensional databases32and providing the target outputs72defined by the application definition42.

More particularly, the decision module38may be configured to automatically group the target outputs72into a plurality of mutually exclusive groups each including two or more of the target outputs72by applying a weighting algorithm to the application definition42that assigns influencer weights to each influencer74relative to the granularity dimensions80based on the influencer granularity definitions82for that influencer74, assigns target output weights to each target output72relative to the granularity dimensions80that correspond to the influencer weights assigned to the influencers74for the target output72, and identifies the target outputs72for each group based on the target output weights assigned to each target output72. The decision module38may then be configured to dynamically generate machine written code that includes a distinct code block for each group of target outputs72, the distinct code block for each group including a fixing portion and a calculating portion. The fixing portion may be generated based on the target output weights assigned to the target outputs72of the group and may be configured to retrieve a section of the multidimensional databases32corresponding to the target output weights assigned to the target outputs72of the group. The calculating portion may be generated based on the influencer weights assigned to the influencers74for the target outputs72of the group and may be configured to generate the target outputs72of the group based on the retrieved section.

To this end, the decision module38may include three distinct modules, namely, a weight-based logic (WbL) module60, an automated matching sequence module (AMS)62, and a driver-based decisions engine (DbDe) module64. Each of these modules may be embodied by a distinct set of computer-executable instructions within the computer-executable instructions embodying the decision module38.

The WbL module60may be configured to apply a weighting algorithm to the application definition42that determines and assigns an influencer weight86to each influencer74relative to each granularity dimension80, such as based on the influencer granularity definition82set for the influencer74relative to the granularity dimension80. Referring toFIG.3, for example, the WbL module60may be configured to use a binary weighting system in which the WbL module60assigns one influencer weight86value (e.g., one) to each influencer granularity definition82indicating a nonzero level of granularity, and assigns another influencer weight86value (e.g., zero) for each influencer granularity definition82indicating a null level of granularity (e.g., “none”). The WbL module60may also be configured to generate and store a weight index61in the application definition database58that tracks the influencer granularity definitions82for which the former influencer weight86value is assigned. In particular, for each assigned influencer weight86of the former value, the WbL module60may be configured to generate an entry in the weight index61that indicates the influencer74, granularity dimension80, and influencer granularity definition82associated with the assigned influencer weight86.

In some examples, the WbL module60may be configured to assign influencer weight86values other than or in addition to those described above. For instance, the WbL module60may be configured to assign a unique nonzero influencer weight86value to each influencer granularity definition82indicating a different member or group of members from the granularity dimensions80, with each influencer granularity definition82indicating a same one or more members being assigned the same nonzero influencer weight86value. In this case, the WbL module60may be configured to generate entries in the weight index61that track the members or group of members corresponding to each assigned nonzero influencer weight86value.

Additionally or alternatively, the WbL module60may be configured to assign a unique nonzero influencer weight86value to each influencer granularity definition82that indicates the members of a different generation number of a granularity dimension80, with each influencer granularity definition82that implicates a same generation number, regardless of the granularity dimension80associated with the influencer granularity definition82, being assigned a same influencer weight86value. In this case, the WbL module60may be configured to generate entries in the weight index61that associates each assigned nonzero influencer weight86value with the generation number associated with the influencer weight86value.

Additionally or alternatively, the WbL module60may be configured to assign a unique nonzero influencer weight86value to each influencer granularity definition82corresponding to an influencer74including a calculation exception. More particularly, the GUI50and/or driver definition template70may enable a user to define exceptions for each influencer74, such as part of the computation logic76for the influencer74. Such exceptions may include conditional rules applied to the values of the influencer74within the multidimensional databases32relative to the calculation of the target output72. For instance, if a user desires to calculate a target output72as a function of only the positive values of a given influencer74within the multidimensional databases32, then the user may apply an exception to the influencer74that indicates, in connection with the target output72, to determine whether the value of the influencer74for a given intersection of the granularity dimensions80is negative. If so, then the exception may indicate to set the value to zero for the purposes of calculating the target output72.

For each influencer74to which a given exception applies, the WbL module60may be configured to assign a unique nonzero influencer weight86value to each influencer granularity definition82for the influencer74indicating a nonzero level of granularity. More particularly, influencer granularity definitions82for influencers74with a same exception and indicating a same one or more members of a granularity dimension80may be assigned a same nonzero influencer weight86value, and influencer granularity definitions82for influencers74with a same exception but indicating a different one or more members of a granularity dimensions80may be assigned different nonzero influencer weight86values. Moreover, the nonzero influencer weight86value assigned to an influencer granularity definition82for an influencer74with no exception and indicating one or more members of a granularity dimension80may differ from the nonzero influencer weight86value assigned to an influencer granularity definition82for an influencer74with an exception and indicating the same one or more members of the granularity dimension80, and the nonzero influencer weight86value assigned to an influencer granularity definition82for an influencer74with one exception and indicating one or more members of a granularity dimension80may differ from the nonzero influencer weight86value assigned to an influencer granularity definition82for an influencer74with a different exception and indicating the same one or more members of the granularity dimension80. In this case, the WbL module60may be configured to generate entries in the weight index61that track the members or group of members and the influencer74exception, if any, corresponding to each assigned nonzero influencer weight86value.

The WbL module60may also be configured to assign a target output weight88to each target output72relative to each granularity dimension80that corresponds to the influencer weights86assigned to the influencers74for the target output72. For instance, the WbL module60may be configured to assign the target output weights88based on the target output granularity definitions84defined for each target output72in a manner similar to how the influencer weights86are assigned. As an example, when the binary weighting system is used, the WbL module60may be configured to assign a value of zero to each target output granularity definition84indicating a null level of granularity, and assign one to each target output granularity definition84indicating a nonzero level of granularity.

As a further example, the WbL module60may be configured to assign the target output weights88based on the target output granularity definitions84defined for each target output72and the influencer weights86assigned to the influencers74for the target output72, such as indicated in the weight index61. For instance, if a given influencer granularity definition82and target output granularity definition84implicate a same one or more members of a granularity dimension80, the WbL module60may be configured to assign the influencer weight86value indicated in the weight index61for the one or more members as the target output weight88value for the given target output granularity definition84.

As another example, the WbL module60may be configured to set the target output weight88for each target output72relative to each granularity dimension80as one of the influencer weights86, such as the highest influencer weight86, assigned to the influencers74for the target output72relative to the granularity dimension80that corresponds to a nonzero level of granularity. For instance, referring to the example illustrated inFIG.3, the WbL module60may be configured to set the target output weight88A-1for the net sales revenue target output72A to the highest of the influencer weights86A-1through86A-4(e.g., one).

As described in more detail below, the decision module38may be configured to dynamically generate resource-efficient machine written code for generating the target outputs72based on the assigned influencer weights86and target output weights88. In some examples, the WbL module60may be configured to assign influencer weights86and target output weights88relative to all the granularity dimensions80other than any attribute granularity dimensions80G. The members of an attribute granularity dimension80G may be assigned to the members of the other granularity dimensions80within the multidimensional databases32to further characterize the data stored in connection with the members of the other granularity dimensions80. When the WbL module60is configured to assign influencer weights86and target output weights88relative to all the granularity dimensions80other than any attribute granularity dimensions80G, the decision module38may be configured to generate the resource-efficient machine written code based on the assigned influencer weights86and target output weights88, and the attribute influencer granularity definitions82G and attribute target output granularity definitions84G set for the attribute granularity dimensions80G, if present.

After assigning the influencer weights86and target output weights88, the WbL module60may pass control to the AMS module62, which may generally be configured to create a weightage for each target output72and influencer74based on the combination of modules selected, Boolean selections, hierarchies, and/or other user and machine calculated inputs. For instance, the AMS module62may be configured generate a weighted influencer identifier90for each influencer74based on the influencer weights86assigned to the influencer74, and generate a weighted target output identifier92for each target output72based on the target output weights88assigned to the target output72. Being based on the influencer weights86, the weighted influencer identifier90assigned to each influencer74for a target output72may indicate the level of data granularity to use for the influencer74relative to calculation of the target output72. Similarly, the weighted target output identifier92assigned to each target output72may indicate the level of data granularity desired for the target output72.

In some examples, the AMS module62may be configured to generate each weighted influencer identifier90for each influencer74by forming a string including each of the influencer weights86assigned to the influencer74. If the driver definition also includes one or more attribute influencer granularity definitions82G for an influencer74indicating attributes from one or more attribute granularity dimensions80G to use for the influencer74, the AMS module62may also be configured to append the indicated attributes to the influencer weights86as part of the weighted influencer identifier90for the influencer74.

The influencer weights86and/or attributes of each weighted influencer identifier90may be arranged in a same order relative to the granularity dimensions80. For instance, referring to the example illustrated inFIG.3, each weighted influencer identifier90for each influencer74may list the influencer weights86and attributes of the influencer74in the following order: the influencer weight86A for the product granularity dimension80A, the influencer weight86B for the entity/location granularity dimension80B, the influencer weight86C for the customer/dealer granularity dimension80C, the influencer weight86D for the channel granularity dimension80D, the influencer weight86E for the period granularity dimension80E, the influencer weight86F for the currency granularity dimension80F, and the attribute indicated in the attribute influencer granularity definition82G for the attribute granularity dimension80G. The AMS module62may be configured to generate each weighted target output identifier92for each target output72in a same manner and order as the weighted influencer identifiers90for the influencers74.

Responsive to assigning the weighted target output identifiers92to the target outputs72, the AMS module62may be configured to automatically group the target outputs72into mutually exclusive groups based on the weighted target output identifiers92. Each group may include two or more of the target outputs72calculated at a same or similar level of granularity, such as according to the weighted target output identifiers92. For instance, the AMS module62may be configured to identify and group target outputs72having the same weighted target output identifiers92. The decision module38, or more particularly the DbDe module64, may then be configured to leverage this information to dynamically write resource-efficient code for the requested custom application.

Thus, responsive to assigning the weighted identifiers90,92and grouping the target outputs72, the AMS module62may pass control to the DbDe module64, which may generally be configured to analyze the system generated data, coupled with information supplied by user input, and synthesize/create recommendations using the complex weighted schematic to provide improved accuracy across a range of predictive outputs. More particularly, the DbDe module64may be configured to dynamically generate resource-efficient machine written source code for querying data from the multidimensional databases32and generating the target outputs72based thereon, such as based on the influencers74, computation logic76, and weighted identifiers90,92determined for each target output72. The DbDe module64may then be configured to generate one or more artifacts66for the requested application including the machine written source code. The artifacts66may include one or more of XML, JSON, XPAD, CSV, rule, and any other file format compatible with the target platform14.

In particular, the DbDe module64may be configured to generate a distinct code block for each group of target outputs72. The distinct code block for each group may include a fixing portion and a calculating portion. The DbDe module64may be configured to generate the fixing portion of each code block based on the target output weights88and/or attribute target output granularity definitions84G, or more particular based on the weighted target output identifiers92, assigned to each target output72corresponding to the code block. The DbDe module64may be configured to generate the calculating portion of each code block based on the influencers74, computation logic76, and the influencer weights86and/or attribute influencer granularity definitions82, or more particularly on the weighted influencer identifiers90, for each target output72corresponding to the code block.

The fixing portion of each code block may be configured to retrieve into memory a section or “slice” of the multidimensional databases32defined by the target output weights88and/or attribute target output granularity definitions84G, or more particularly the weighted target output identifiers92, assigned to the target outputs72corresponding to the code block. In particular, the weighted target output identifier92assigned to each target output72for a given code block may indicate which granularity dimensions80are applicable to calculating the target output72(e.g., by virtue of the weighted target output identifier92including a nonzero target output weight88for the granularity dimension80), and correspondingly, which are not applicable (e.g., by virtue of the weighted target output identifier92including a target output weight88value of zero for the granularity dimension80). For each granularity dimension80indicated as applicable, the weighted target output identifier92may also indicate the members and/or member groups (e.g., generations) of the granularity dimension80that are applicable to the target output72, such as via an association between the nonzero target output weight88for the granularity dimension80and the applicable members and/or groups in the weight index61, as described above.

The DbDe module64may thus be configured to dynamically generate the fixing portion of each code block by determining each granularity dimension80applicable to the target outputs72corresponding to the code block based on the weighted target output identifiers92assigned to the target outputs72, and determining the members and/or member groups of the applicable granularity dimensions80that are applicable to the target outputs72by querying the weight index61with the nonzero target output weights88indicated in the weighted target output identifiers92assigned to the target outputs72. The DbDe module64may then be configured to generate the fixing portion of the code block so that the section of the multidimensional database32retrieved by the fixing portion is limited to or consists of data within the multidimensional databases32corresponding to the granularity dimensions80, members, and/or groups determined applicable to the target outputs72. In other words, the fixing portion of each code block may be configured to obtain data within the multidimensional databases32for each possible combination of the members of the granularity dimensions80indicated as applicable to the target outputs72corresponding to the code block by the weighted target output identifiers92assigned to the target outputs72. The calculating portion of each code block may then be configured to operate on the data received by the fixing portion to generate all of the target outputs72corresponding to the code block while avoiding querying and processing other data stored in the multidimensional databases32that is not relevant to the target outputs72.

Grouping code for multiple target outputs72in this manner limits processing of the grouped target outputs72to those data cells of the multidimensional databases32corresponding to the level of granularity indicated for the target outputs72within the driver definition for the custom application, and thus minimizes the number of passes through the cells of the multidimensional databases32to generate the target outputs72of the custom application. Correspondingly, such groupings improve the speed of the resulting application and reduce hardware resources used by the resulting application when querying for and processing data from the multidimensional databases32to provide the target outputs72.

The DbDe module64may be configured to generate the calculating portion of each code block by being configured to generate an equation for calculating each target output72corresponding to the code block based on the influencers74, computation logic76, and weighted influencer identifiers90assigned to the influencers74for the target output72. More specifically, similar to the weighted target output identifiers92, the weighted influencer identifier90for each influencer74may indicate which of the granularity dimensions80are applicable and are not applicable to that influencer74, and also may indicate which of the members and/or member groups of the applicable granularity dimensions80are applicable to that influencer74, such as via the weight index61. The DbDe module64may thus be configured to generate an equation for each target output72corresponding to a code block by being configured to determine the granularity dimensions80, members, and/or member groups applicable to each influencer74for the target output72by querying the weight index61with the nonzero influencer weights86of the weighted influencer identifier90assigned to the influencer74, and generate code for each influencer74for the target output72that indicates an intersection of the influencer74with the members of the granularity dimensions80determined as applicable to the influencer74. The DbDe module64may then be configured to combine the generated intersections based on the computation logic76for the target output72.

For instance, referring to the example illustrated inFIG.3, the AMS module62may have grouped the net sales revenue target output72A and the third party licensing revenue target output72B based on the same weighted target output identifier92being assigned to each of these target outputs72. The DbDe module64may then be configured to generate the following code block for this group based on the influencers74, computation logic76, weighted target output identifier92, and weighted influencer identifiers90for the target outputs72:

Fix(All Products, All Locations, All Customers, All Channels, All Months, All Currencies,DepA)Net Sales Revenue = Volume -> Product -> Location -> Customer -> Channel ->Month -> DepA -> No Currency * Per Unit Price -> Product -> Location -> Customer ->Channel -> Month -> Currency -> DepA + Premium -> Location -> Customer -> Channel-> Month -> Currency -> DepA -> No Product - Military Discount -> Location ->Customer -> Channel -> Month -> Currency -> DepA -> No Product;Third party Licensing Revenue = Volume -> Product -> Location ->Customer -> Channel -> Month -> DepA -> No Currency * Per Unit Price -> Product->Location -> Customer -> Channel -> Month -> Currency -> DepA + Overhead ->Location -> Customer -> Channel -> Month -> Currency -> DepA -> No Product;End fix

The DbDe module64may also be configured to dynamically generate additional code for each code block and/or artifacts66based on other application configuration parameters, such as the currency related parameters, eliminations strategy parameter, application type parameter, and security matrix parameter. To this end, the DbDe module64may be coupled to a code template database68that includes code templates for each of these other configuration parameters. Each code template may include expandable code that the DbDe module64may retrieve and customize to the configuration parameters of the application definition42. For instance, the code template database68may store model code templates each including expandable code for further analyzing the various target outputs72, such as providing what if scenarios, long range planning, variance analysis, and rolling forecasts relative to the target outputs72. The code template database68may also store exception code templates each including expandable code for implementing an exception applied to an influencer74as described above.

The DbDe module64may thus be configured to retrieve the expandable code templates corresponding to the current configuration parameters and/or applied influencer exceptions, such as indicated by the weighted influencer identifiers90in combination with the weight index61as described above, to dynamically generate machine written code by inserting the configuration parameters into the retrieved code. The DbDe module64may then be configured to integrate the machine written code into the previously described code blocks and/or one or more additional artifacts66. For instance, the DbDe module64may be configured to integrate any eliminations strategy code, currency-related code, and influencer exception code into the calculating portions of the pertinent code blocks. The DbDe module64may be configured to integrate model-related code as additional artifacts66.

The DbDe module64may be configured to communicate the generated artifacts66to the deployment module40. The deployment module40may be configured to feed off the data output from DbDe module64and other text, Boolean and data file inputs, such as from the application definition42, to generate an application package96. To this end, the deployment module40may also be coupled to the code template database68, which may additionally store code templates for generating the application package96from the artifacts66received from the decision module38and data items from the application definition42. In addition to the machine written code, the application package96generated by the deployment module40may include metadata for the custom application based on the application definition42. Such metadata may indicate application settings such as start years, currencies used, and dimension names written into XML, JSON, XPAD, CSV and/or other files readable by the target platform14.

Responsive to generating the application package96, the deployment module40may be configured to deploy the application package96to the target platform14, or more particularly the EPM system26, for validation and execution against the multidimensional databases32. More specifically, the deployment module40may be configured to initiate an API call to the EPM system26via the EPM API56to transfer the application package96to the EPM system26, and to then cause the EPM system26to execute the application package96on the multidimensional databases32. Responsive to such execution, the EPM system26may be configured to generate target output files corresponding to the target outputs72and a log file indicating any errors encountered by the EPM system26when executing the application package96. The deployment module40may then be configured to check the log file for errors and apply error checking to the target output files, such as by validating the target output files against the configuration parameters of the application definition42and/or the metadata of the application package96.

During operation of the decision module38and the deployment module40, the application creation engine34may be configured to cause the frontend portal48to display a status bar on the user device12that indicates a running completion percentage of the custom application. Responsive to the deployment module40discovering no validation errors, the deployment module40may be configured to turn the status bar green to indicate that the custom application is ready for execution on the target platform14by the user. Alternatively, responsive to the deployment module40discovering validation errors, the deployment module40may be configured to turn the status bar red and indicate the discovered errors to the user, who may then address the errors, such as by revising the configuration parameters of the application definition42.

FIG.4illustrates a method100for generating custom applications for operation in a multidimensional database environment, such as the target platform14or the EPM system26. The application creation engine34may be configured to implement the method100, such as upon execution of the set of computer-executable instructions embodying the application creation engine34by at least one processor of the application builder server16. Each of the blocks of the method100may be implemented with any one or more of the features corresponding to the functions of the block that are described above.

In block102, a request to build a custom application for querying one or more multidimensional databases32of a target platform14may be received, such as by the discovery module36from the user device12. In block104, an application definition42for the custom application may be discovered, such as by the discovery module36. For instance, an API call to a master data source28associated with the multidimensional databases32may be made to retrieve master data30from the master data source28that indicates a hierarchical structure of the multidimensional databases32. The application definition42may then be determined based on the retrieved master data30and one or more user inputs44. The application definition42may indicate target outputs72to be produced by the custom application based on data stored in the multidimensional databases32, influencers74for each of the target outputs72that correspond to members of one or more influencer dimensions of the multidimensional databases32, and influencer granularity definitions82relative to granularity dimensions80of the multidimensional databases32for each of the influencers74.

In some examples, each granularity dimension80may include members within the multidimensional databases32that are organized into mutually exclusive generations of the granularity dimension80each corresponding to a different distance from a root node of the granularity dimension80, and the application definition42may be discovered by generating a GUI50with fields for receiving identification of the target outputs72, influencers74, and granularity dimensions80. Responsive to receiving this data, a driver definition template70for defining the influencer granularity definitions82and/or target output granularity definitions84relative to the granularity dimensions80of the multidimensional databases32may be dynamically generated. The generations of each granularity dimension80may also be determined from the retrieved master data30, and the driver definition template70may be prepopulated with the determined generations by associating a dropdown list for each granularity dimension80with each influencer74and/or each target output72within the driver definition template70. Each dropdown list may include the generations determined for the granularity dimension80associated with the dropdown list as selectable options for defining an influencer granularity definition82and/or target output granularity definition84. The GUI50may then be updated with the prepopulated driver definition template70for user selections.

The method100may thereafter group the target outputs72into a plurality of mutually exclusive groups each including two or more of the target outputs72by applying a weighting algorithm to the application definition42that assigns influencer weights86to each influencer74relative to the granularity dimensions80based on the influencer granularity definitions82for the influencer74, assigns target output weights88to each target output72relative to the granularity dimensions80that correspond to the influencer weights86assigned to the influencers74for the target output72, and identifies the target outputs72for each group based on the target output weights88assigned to each target output72.

To this end, in block106, the influencer weights86and target output weights88may be assigned respectively to the influencers74and target outputs72, such as described above. For instance, each target output weight88assigned to a given target output72may correspond to a different one of the granularity dimensions80, and the target output weight88assigned to each target output72may be set to the greatest influencer weight86assigned to the influencers74for the target output72relative to the granularity dimension80to which the target output weight88corresponds.

Thereafter, in block108, the target outputs72may be grouped into a plurality of mutually exclusive groups each including two or more of the target outputs72based on the target output weights88assigned to each target output72. For instance, a weighted target output identifier92may be generated for each target output72based on the target output weights88assigned to the target output72, and the target outputs72having a same weighted target output identifier92may be grouped together. A weighted influencer identifier90may also be generated for each influencer74for each target output72based on the influencer weights86assigned to the influencer74.

In block110, resource-efficient machine written code may be dynamically generated based on the groupings. More particularly, machine-written code may be generated that includes a distinct code block for each group of target outputs72, the distinct code block for each group including a fixing portion and a calculating portion. The fixing portion of the code block for each group may be generated based on the target output weights88and/or weighted target output identifier92assigned to the target outputs72of the group, and may be configured to retrieve a section of the multidimensional databases32corresponding to the target output weights88and/or weighted target output identifier92assigned to the target outputs72of the group. The calculating portion of the code block for each group may be generated based on the influencer weights86and/or weighted influencer identifiers90assigned to the influencers74for the target outputs72of the group, and may be configured to generate the target outputs72of the group based on the retrieved section of the multidimensional databases32.

In some examples and as described above, the weighted target output identifier92generated for each target output72may indicate which of the granularity dimensions80are applicable to the target output72with at least one of the granularity dimensions80being indicated as applicable to the target output72, and the fixing portion of the code block for each group may be dynamically generated such that the section of the multidimensional databases32retrieved by the fixing portion is limited to data within the multidimensional databases32corresponding to the at least one granularity dimension80indicated as applicable by the weighted target output identifier92generated for each target output72of the group.

In addition or alternatively, and as described above, each granularity dimension80may include members within the multidimensional databases32, and the weighted target output identifier92generated for each target output72may indicate which of the members of the granularity dimensions80are applicable to the target output with at least one of the members of the granularity dimensions80being indicated as applicable to the target output72. In this example, the fixing portion of the code block for each group may be dynamically generated such that the section of the multidimensional databases32retrieved by the fixing portion is limited to data within the multidimensional databases32corresponding to the at least one member indicated as applicable by the weighted target output identifier92generated for each target output72of the group.

In addition or alternatively, and as described above, the members of each granularity dimension80may be organized into mutually exclusive generations of the granularity dimension80each corresponding to a different distance from a root node of the granularity dimension80, and the weighted target output identifier92generated for each target output72may indicate which of the generations of the granularity dimensions80are applicable to the target output72with at least one of the generations of the granularity dimensions80being indicated as applicable to the target output72. In this example, the fixing portion of the code block for each group may be dynamically generated such that the section of the multidimensional databases32retrieved by the fixing portion is limited to data within the multidimensional databases32corresponding to the at least one generation indicated as applicable by the weighted target output identifier92generated for each target output72of the group.

In some examples and as described above, the application definition42may also indicate computation logic76for each target output72that defines a relationship between the influencers74for the target output72and the target output72, and the calculating portion of the code block for each group may be generated by dynamically generating machine written code for deriving each target output72of the group based on the computation logic76for the target output72and the weighted target output identifier generated for each influencer94for the target output72. In some examples, each granularity dimension80may include members within the multidimensional databases32, and the weighted influencer identifier90generated for each influencer74for each target output72may indicate which of the members of the granularity dimensions80are applicable to the influencer74with at least one of the members of the granularity dimensions80being indicated as applicable to the influencer74. In this case, the machine written code for deriving each target output72based on the computation logic76for the target output72and the weighted influencer identifier90generated for each influencer74for the target output72may be dynamically generated by generating machine written code for each influencer74for the target output72that provides an intersection of the influencer74and the at least one member indicated as applicable to the influencer74by the weighted influencer identifier90generated for the influencer74, and combining the machine written code generated for each influencer74for the target output72based on the computation logic76for the target output.

In block112, the machine written code including a distinct code block for each group may be compiled, such as by the deployment module40as described above, into an application package96corresponding to the target platform14that is configured to query data from the multidimensional databases32and generate the target outputs72based on the queried data according to the code blocks. In block114, the application package96may be deployed, such as by the deployment module40as described above, to the target platform14for execution on the multidimensional databases32. In block116, the application package96may then be executed and validated, such as by the deployment module40as described above.

The components of the operating environment10ofFIG.1and the blocks of the method100ofFIG.4may each be implemented by one or more computing devices, such as the computing system200illustrated inFIG.5. Each component or block may be implemented by a single computing device or multiple computing devices cooperating in a distributed environment, and two or more the components or blocks may be implemented by a same one or more computing devices. For instance, the MDM server20, EPM server24, and/or application builder server16may each be provided via multiple computing devices arranged in a distributed environment that collectively provide the functionality of the component described herein. As a further example, the MDM server20and EPM server24may be implemented by a same one or more computing devices.

FIG.5illustrates an exemplary computing system200that may provide a suitable computing environment for implementing the devices, systems, components, features, processes, methods, and modules described above. The computing system200may include a processor202, a memory204, a mass storage memory device206, an input/output (I/O) interface208, and a Human Machine Interface (HMI)210. The computing system200may also be operatively coupled to one or more external resources212via the network214or I/O interface208. External resources212may include, but are not limited to, servers, databases, mass storage devices, peripheral devices, cloud-based network services, or any other suitable computer resource that may be used by the computing system200.

The processor202may include one or more devices selected from microprocessors, micro-controllers, digital signal processors, microcomputers, central processing units, field programmable gate arrays, programmable logic devices, state machines, logic circuits, analog circuits, digital circuits, or any other devices that manipulate signals (analog or digital) based on operational instructions that are stored in the memory204. The memory204may include a single memory device or a plurality of memory devices including, but not limited to, read-only memory (ROM), random access memory (RAM), volatile memory, non-volatile memory, static random access memory (SRAM), dynamic random access memory (DRAM), flash memory, cache memory, or any other device capable of storing information. The mass storage memory device206may include data storage devices such as a hard drive, optical drive, tape drive, non-volatile solid state device, or any other device capable of storing information.

The processor202may operate under the control of an operating system216that resides in the memory204. The operating system216may manage computer resources so that computer program code embodied as one or more computer software applications, such as an application218residing in memory204, may have instructions executed by the processor202. In an alternative example, the processor202may execute the application218directly, in which case the operating system216may be omitted. One or more data structures220may also reside in memory204, and may be used by the processor202, operating system216, or application218to store or manipulate data.

The I/O interface208may provide a machine interface that operatively couples the processor202to other devices and systems, such as the network214or the one or more external resources212. The application218may thereby work cooperatively with the network214or the external resources212by communicating via the I/O interface208to provide the various features, functions, applications, processes, or modules described above. The application218may also have program code that is executed by the one or more external resources212, or otherwise rely on functions or signals provided by other system or network components external to the computing system200.

The HMI210may be operatively coupled to the processor202of computing system200in a known manner to allow a user to interact directly with the computing system200. The HMI210may include video or alphanumeric displays, a touch screen, a speaker, and any other suitable audio and visual indicators capable of providing data to the user. The HMI210may also include input devices and controls such as an alphanumeric keyboard, a pointing device, keypads, pushbuttons, control knobs, microphones, etc., capable of accepting commands or input from the user and transmitting the entered input to the processor202.

A database222may reside on the mass storage memory device206, and may be used to collect and organize data used by the various systems and modules described herein. The database222may include data and supporting data structures that store and organize the data. In particular, the database222may be arranged with any database organization or structure including, but not limited to, a relational database, a hierarchical database, a network database, or combinations thereof. A database management system in the form of a computer software application executing as instructions on the processor202may be used to access the information or data stored in records of the database222in response to a query, where a query may be dynamically determined and executed by the operating system216, other applications218, or one or more modules.

In general, the routines executed to implement the embodiments of the disclosure, whether implemented as part of an operating system or a specific application, component, program, object, module or sequence of instructions, or even a subset thereof, may be referred to herein as “computer program code,” or simply “program code.” Program code typically includes computer readable instructions that are resident at various times in various memory and storage devices in a computer and that, when read and executed by one or more processors in a computer, cause that computer to perform the operations necessary to execute operations and/or elements embodying the various aspects of the embodiments of the disclosure. Computer readable program instructions for carrying out operations of the embodiments of the disclosure may be, for example, assembly language or either source code or object code written in any combination of one or more programming languages.

The program code embodied in any of the applications/modules described herein is capable of being individually or collectively distributed as a program product in a variety of different forms. In particular, the program code may be distributed using a computer readable storage medium having computer readable program instructions thereon for causing a processor to carry out aspects of the embodiments of the disclosure.

Computer readable storage media, which is inherently non-transitory, may include volatile and non-volatile, and removable and non-removable tangible media implemented in any method or technology for storage of information, such as computer-readable instructions, data structures, program modules, or other data. Computer readable storage media may further include random access memory (RAM), read-only memory (ROM), erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EEPROM), flash memory or other solid state memory technology, portable compact disc read-only memory (CD-ROM), or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium that can be used to store the desired information and which can be read by a computer. A computer readable storage medium should not be construed as transitory signals per se (e.g., radio waves or other propagating electromagnetic waves, electromagnetic waves propagating through a transmission media such as a waveguide, or electrical signals transmitted through a wire). Computer readable program instructions may be downloaded to a computer, another type of programmable data processing apparatus, or another device from a computer readable storage medium or to an external computer or external storage device via a network.

Computer readable program instructions stored in a computer readable medium may be used to direct a computer, other types of programmable data processing apparatus, or other devices to function in a particular manner, such that the instructions stored in the computer readable medium produce an article of manufacture including instructions that implement the functions/acts specified in the flowcharts, sequence diagrams, and/or block diagrams. The computer program instructions may be provided to one or more processors of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the one or more processors, cause a series of computations to be performed to implement the functions and/or acts specified in the flowcharts, sequence diagrams, and/or block diagrams.

In certain alternative embodiments, the functions and/or acts specified in the flowcharts, sequence diagrams, and/or block diagrams may be re-ordered, processed serially, and/or processed concurrently without departing from the scope of the embodiments of the disclosure. Moreover, any of the flowcharts, sequence diagrams, and/or block diagrams may include more or fewer blocks than those illustrated consistent with embodiments of the disclosure.

The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the embodiments of the disclosure. As used herein, the singular forms “a”, “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises” and/or “comprising,” when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof. Furthermore, to the extent that the terms “includes”, “having”, “has”, “with”, “comprised of”, or variants thereof are used in either the detailed description or the claims, such terms are intended to be inclusive in a manner similar to the term “comprising.”

While all of the disclosure has been illustrated by a description of various embodiments and while these embodiments have been described in considerable detail, it is not the intention of the Applicant to restrict or in any way limit the scope of the appended claims to such detail. Additional advantages and modifications will readily appear to those skilled in the art. The disclosure in its broader aspects is therefore not limited to the specific details, representative apparatus and method, and illustrative examples shown and described. Accordingly, departures may be made from such details without departing from the spirit or scope of the Applicant's general inventive concept.