Introduction

Reporting takes essential part of every business process, streamlining the results and enhancing the data representation, supporting the taking of the effective decisions.

Reviewing the modern market reporting tools is outside the scope of this article, and we will only focus on what BitCurb provides in terms of reporting functionality.

To give context we will be using the existing articles about BitCurb filtering and matching.

BitCurb conveys reports in two ways:

  • through rest api endpoint, which you can consume programmatically and process the returned data according your business cases
  • Through BitCurb web portal dashboard page, where you can visually assess the efficiency of your rules

The statistical data we keep varies depending on the rule’s type and may cover:

  • Data about each executed rule (filtering or matching), including
    • User account who ran the rule
    • Type of the rule
    • Template of the rule
    • Syntax of the rule
    • Variance expression – applicable for matching rules only
    • Count of data rows from $1_ side that are processed
    • Count of data rows from $2_ side that are processed
    • Total count of the rows processed that are processed
    • Date and time of rule execution
  • Data about the result for each rule that is executed, including:
    • Count of data rows from $1_ side that are processed
    • Count of data rows from $2_ side that are processed
    • Total number of result groups – applicable for matching rules only
    • Total number of groups with variance – applicable for matching rules only
    • Execution time in milliseconds
    • CorrelationID reference in case there is error during rule’s execution
  • Data about the results group that are created for every rule that is executed, including:
    • Group Identifier of group returned to the consumer
    • Variance amount that is result of the rule execution – applicable for matching rules only
    • Concatenated string of all elements id that are part of the result group – applicable for matching rule only

Result groups statistical information is stored only for crunch rules. If you have only filtering rules, this entity set will be always empty in your reports data.

The data we return to the api consumer contains part of the data that is exposed as report. We only aggregate it for you, so you can use it directly to feed your reporting engine without having to store a local copy of your BitCurb Crunch Engine rules runs statistics.

Below is UML Schema that represents the report entities available for processing:

API Endpoint

BitCurb exposes authenticated endpoint called ReportData.svc for consuming a number of statistical datasets for reporting purposes. You can get the raw statistical data and create yourself the reports your business needs.

You can’t access the report endpoint unless you have a valid active account in BitCurb.

Trial accounts have access to reporting data limited to last 10 BitCurb Crunch Engine operations only. For full historical data, you need to have active paid license.

Please refer to the help documentation about the datasets that the reporting endpoint exposes for consumption.

You must have a valid API Credentials, set up in Client Profile page in order to successfully connect to BitCurb API services.

To consume the statistics about rules execution, you must send a request to https://portal.bitcurb.com/ReportData.svc/CrunchRuns

To consume the statistics about how your rules perform, you must send a request to https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails

To consume the statistics about how your crunch rules result groups, you must send a request to https://portal.bitcurb.com/ReportData.svc/CrunchRunsGroups

This report entity will return empty result for filtering rules.

Please, follow our GitHub repository for downloading our sample application that consumes BitCurb reports.

Search refiners reporting

In our knowledge based article on how we can use filtering rules, we managed to filter 566 entries to only 2 that satisfy three pre-defined filtering conditions.

In term of reporting our entities look like:

  • For Crunch Runs

https://portal.bitcurb.com/ReportData.svc/CrunchRuns


{
   "d": [
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRuns(40L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRuns(40L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryViewModel"
         },
         "ID": "40",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1",
         "CrunchTemplateName": "Phone Filtering",
         "RuleBody": "$1.status != \"Discontinued\" AND ISBLANK($1.internal_memory_mb) == FALSE AND ISBLANK($1.primary_camera_mp) == FALSE AND TONUMBER($1.internal_memory_mb) >= 8192 \ AND TONUMBER($1.primary_camera_mp) >= 8",
         "VarianceExpression": "",
         "ConsumerType": "API",
         "TemplateSourceType": null,
         "LeftCount": 3,
         "RightCount": 0,
         "TotalCount": 3,
         "CreatedBy": "petya.gaytanska@bitcurb.com",
         "CreatedTimeUtc": "/Date(1508269518930)/"
      },
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRuns(39L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRuns(39L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryViewModel"
         },
         "ID": "39",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1",
         "CrunchTemplateName": "Phone Filtering",
         "RuleBody": "$1.status != \"Discontinued\" AND ISBLANK($1.stand_by_hours) == FALSE AND ISBLANK($1.talk_time_hours) == FALSE \nAND TONUMBER($1.stand_by_hours) >= 400 AND TONUMBER($1.talk_time_hours) >= 10",
         "VarianceExpression": "",
         "ConsumerType": "API",
         "TemplateSourceType": null,
         "LeftCount": 106,
         "RightCount": 0,
         "TotalCount": 106,
         "CreatedBy": "petya.gaytanska@bitcurb.com",
         "CreatedTimeUtc": "/Date(1508269518833)/"
      },
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRuns(38L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRuns(38L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryViewModel"
         },
         "ID": "38",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1",
         "CrunchTemplateName": "Phone Filtering",
         "RuleBody": "$1.status != \"Discontinued\" AND FIND(\"Dual SIM\", $1.sim) >= 1 AND $1.card_slot != \"No\"",
         "VarianceExpression": "",
         "ConsumerType": "API",
         "TemplateSourceType": null,
         "LeftCount": 566,
         "RightCount": 0,
         "TotalCount": 566,
         "CreatedBy": "petya.gaytanska@bitcurb.com",
         "CreatedTimeUtc": "/Date(1508269518710)/"
      }
   ]
}

 

As you can see the first rule (first by assignment order) starts running with 566 items, the second one with 106 and the third one receives only 3 items as input to filter.

  • For Crunch Runs Details

https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails


{
   "d": [
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(52L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(52L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryDetailsViewModel"
         },
         "ID": "52",
         "CrunchHistoryID": "40",
         "IsFilter": true,
         "LeftCount": 2,
         "RightCount": 0,
         "GroupCount": null,
         "VarianceCount": null,
         "TimeInMilliseconds": "14",
         "IsSuccessful": true,
         "CreatedTimeUtc": "/Date(1508269518930)/",
         "CorrelationID": "00000000-0000-0000-0000-000000000000",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      },
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(51L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(51L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryDetailsViewModel"
         },
         "ID": "51",
         "CrunchHistoryID": "39",
         "IsFilter": true,
         "LeftCount": 3,
         "RightCount": 0,
         "GroupCount": null,
         "VarianceCount": null,
         "TimeInMilliseconds": "44",
         "IsSuccessful": true,
         "CreatedTimeUtc": "/Date(1508269518833)/",
         "CorrelationID": "00000000-0000-0000-0000-000000000000",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      },
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(50L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(50L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryDetailsViewModel"
         },
         "ID": "50",
         "CrunchHistoryID": "38",
         "IsFilter": true,
         "LeftCount": 106,
         "RightCount": 0,
         "GroupCount": null,
         "VarianceCount": null,
         "TimeInMilliseconds": "492",
         "IsSuccessful": true,
         "CreatedTimeUtc": "/Date(1508269518710)/",
         "CorrelationID": "00000000-0000-0000-0000-000000000000",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      }
   ]
}

 

You can see the result of the execution of the first rule with ID 50 is 106 items, which is passed as input to the second rule.

The result of the execution of the second rule (by order in the template) is 3, which is passed as input to the last rule with ID 52.

And finally, the result of the execution of the third rule is 2 items, which is indeed the final result we get as response from our filtering operation.

 

For the dashboard, the only widget that renders data is “Client Crunches” widget that shows the number of rules executed through the API.

Matching operations reporting

In our knowledge based article on how we can use Crunch Engine for bank reconciliation rules, we managed to reconcile two accounts using three different rules.

In term of reporting our entities look like:

  • For Crunch Runs

https://portal.bitcurb.com/ReportData.svc/CrunchRuns

{
   "d": 
   	[{"__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRuns(80L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRuns(80L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryViewModel"
         },
         "ID":"80",
         "TenantID":"df57ddfc-5da3-4e98-8fee-77093cf2c2a1",
         "CrunchTemplateName":"Bank Reconciliation",
         "RuleBody":"$1.AccountIdentification == $2.AccountIdentification AND $1.TransactionValueDate == $2.TransactionValueDate AND \r\n $1.TransactionType == $2.TransactionType AND FIND($2.AccountServingInstitution, $1.AccountServingInstitution) >= 1",
         "VarianceExpression":"",
         "ConsumerType":"API",
         "TemplateSourceType":null,
         "LeftCount":4,
         "RightCount":7,
         "TotalCount":11,
         "CreatedBy":"petya.gaytanska@bitcurb.com",
         "CreatedTimeUtc":"Date(1508192282293)"
      },
      {
	"__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRuns(81L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRuns(81L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryViewModel"
         },
         "ID":"81",
         "TenantID":"df57ddfc-5da3-4e98-8fee-77093cf2c2a1",
         "CrunchTemplateName":"Bank Reconciliation",
         "RuleBody":"$1.AccountIdentification == $2.AccountIdentification AND $1.TransactionValueDate == $2.TransactionValueDate AND $1.TransactionType == $2.TransactionType AND $1.AccountServingInstitution == $2.AccountServingInstitution",
         "VarianceExpression":"< 20.0000",
         "ConsumerType":"API",
         "TemplateSourceType":null,
         "LeftCount":3,
         "RightCount":5,
         "TotalCount":8,
         "CreatedBy":"petya.gaytanska@bitcurb.com",
         "CreatedTimeUtc":"Date(1508192282293)"
      },
      {
	"__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRuns(82L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRuns(82L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryViewModel"
         },
         "ID":"82",
         "TenantID":"df57ddfc-5da3-4e98-8fee-77093cf2c2a1",
         "CrunchTemplateName":"Bank Reconciliation",
         "RuleBody":"$1.AccountServingInstitution == $2.AccountServingInstitution AND $1.Amount == $2.Amount",
         "VarianceExpression":"",
         "ConsumerType":"API",
         "TemplateSourceType":null,
         "LeftCount":2,
         "RightCount":3,
         "TotalCount":5,
         "CreatedBy":"petya.gaytanska@bitcurb.com",
         "CreatedTimeUtc":"Date(1508192282293)"
     }
]
}
 

There is one row in the report entity for each rule that has been executed, regardless the crunch operation was triggered referring template ID.

Each of the items returned contains:

  • The body of the rule that has been executed – RuleBody
  • The total count of items that are input for the operation – TotalCount
  • The number of the items from side 1 ($1) items that are input for the operation – LeftCount
  • The number of the items from side 2 ($2) items that are input for the operation – RightCount

Based on the operations we ran, we can see the first rule starts to process 11 rows for input, 4 of which are $1 and 7 are $2.

The second rule starts execution with 8 rows for input (meaning 3 have been reconciled), 3 from $1 and 5 from $2.

The last rule starts execution with 5 rows for input, 2 items from $1 and 3 items from $2.

The consumer shall use the template name to distinguish between filter and crunch rules (in case both rules are run and reports data is returned for it).

For example:

https://portal.bitcurb.com/ReportData.svc/CrunchRuns?$filter=CrunchTemplateName%20eq%20%27Bank%20Reconciliation%27

  • For Crunch Runs Details

https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails


{
   "d": [    
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(124L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(124L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryDetailsViewModel"
         },
         "ID": "124",
         "CrunchHistoryID": "82",
         "IsFilter": false,
         "LeftCount": 2,
         "RightCount": 2,
         "GroupCount": 2,
         "VarianceCount": 0,
         "TimeInMilliseconds": "7",
         "IsSuccessful": true,
         "CreatedTimeUtc": "Date(1508192282480)",
         "CorrelationID": "00000000-0000-0000-0000-000000000000",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      },
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(123L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(123L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryDetailsViewModel"
         },
         "ID": "123",
         "CrunchHistoryID": "82",
         "IsFilter": true,
         "LeftCount": 2,
         "RightCount": 2,
         "GroupCount": null,
         "VarianceCount": null,
         "TimeInMilliseconds": "3",
         "IsSuccessful": true,
         "CreatedTimeUtc": "Date(1508192282480)",
         "CorrelationID": "00000000-0000-0000-0000-000000000000",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      },
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(122L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(122L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryDetailsViewModel"
         },
         "ID": "122",
         "CrunchHistoryID": "81",
         "IsFilter": false,
         "LeftCount": 1,
         "RightCount": 2,
         "GroupCount": 1,
         "VarianceCount": 1,
         "TimeInMilliseconds": "10",
         "IsSuccessful": true,
         "CreatedTimeUtc": "Date(1508192282403)",
         "CorrelationID": "00000000-0000-0000-0000-000000000000",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      },
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(121L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(121L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryDetailsViewModel"
         },
         "ID": "121",
         "CrunchHistoryID": "81",
         "IsFilter": true,
         "LeftCount": 1,
         "RightCount": 2,
         "GroupCount": null,
         "VarianceCount": null,
         "TimeInMilliseconds": "7",
         "IsSuccessful": true,
         "CreatedTimeUtc": "Date(1508192282403)",
         "CorrelationID": "00000000-0000-0000-0000-000000000000",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      },
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(120L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(120L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryDetailsViewModel"
         },
         "ID": "120",
         "CrunchHistoryID": "80",
         "IsFilter": false,
         "LeftCount": 1,
         "RightCount": 2,
         "GroupCount": 1,
         "VarianceCount": 0,
         "TimeInMilliseconds": "47",
         "IsSuccessful": true,
         "CreatedTimeUtc": "Date(1508192282293)",
         "CorrelationID": "00000000-0000-0000-0000-000000000000",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      },
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(119L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(119L)",
            "type": "BitCurb.Rest.Reports.CrunchHistoryDetailsViewModel"
         },
         "ID": "119",
         "CrunchHistoryID": "80",
         "IsFilter": true,
         "LeftCount": 2,
         "RightCount": 4,
         "GroupCount": null,
         "VarianceCount": null,
         "TimeInMilliseconds": "495",
         "IsSuccessful": true,
         "CreatedTimeUtc": "Date(1508192282293)",
         "CorrelationID": "00000000-0000-0000-0000-000000000000",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      }
   ]
}

 

Crunch runs details give you information about how your rules performed and what is the result for each of the rules.

When you perform crunch operations, in CrunchRunsDetails reports entity a pair of statistical rows is created for each rule that is executed.

The first row represents the filtering part of the crunch operation, and the second row holds the statistical information about the crunch rule’s execution. Both items refer the same master record CrunchHistoryID:80 from CrunchRuns.

Filtering row contains the whole result set that matches rule’s definition, while the result row contains the result of the crunch operation (based on the numbers).

For the first rule we have:


{
   "__metadata": {
      "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(120L)",
      "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(120L)",
      "type": "BitCurb.Rest.Reports.CrunchHistoryDetailsViewModel"
   },
   "ID": "120",
   "CrunchHistoryID": "80",
   "IsFilter": false,
   "LeftCount": 1,
   "RightCount": 2,
   "GroupCount": 1,
   "VarianceCount": 0,
   "TimeInMilliseconds": "47",
   "IsSuccessful": true,
   "CreatedTimeUtc": "Date(1508192282293)",
   "CorrelationID": "00000000-0000-0000-0000-000000000000",
   "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
},
{
   "__metadata": {
      "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(119L)",
      "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails(119L)",
      "type": "BitCurb.Rest.Reports.CrunchHistoryDetailsViewModel"
   },
   "ID": "119",
   "CrunchHistoryID": "80",
   "IsFilter": true,
   "LeftCount": 2,
   "RightCount": 4,
   "GroupCount": null,
   "VarianceCount": null,
   "TimeInMilliseconds": "495",
   "IsSuccessful": true,
   "CreatedTimeUtc": "Date(1508192282293)",
   "CorrelationID": "00000000-0000-0000-0000-000000000000",
   "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
}




Filtering returns 2 items from $1 and 4 items from $2.

If we review our reconciliation scenario, we can recognize that the filtered items from $1 side are items with ID: 8 and ID: 9

Filtered items from $2 side are items with ID:1, ID:2, ID:3 and ID:4.

These filtered items are candidates for matching, based on the crunch field that is passed and the rule’s type.

In our case the first row of the pair above, “IsFilter”:true, is the row with filter results for the rule – two items from the left ($1 side) and four items from the right ($side).

Since the rule we have is One-to-Many and $1 to $2, without Variance, the potential result should contain one item from $1 and $2 and the sum of the amounts of $2 should be equal to the sum of the amount of $1 item.

The items that match the above are – ID:8 from $1 and ID:1, ID:2 from $2.

If you query the CrunchRunsGroups, you will see these are exactly the items that form a result group.

So the second row with “IsFilter”:false, is the row containing the result statistics – 1 item from left side ($1 side) and two items from right side ($2 side).

Similar analysis can be conveyed to the other 2 pair of two rows for the other crunch rules.

  • For Crunch Runs Groups

https://portal.bitcurb.com/ReportData.svc/CrunchRunsDetails


{
   "d": [
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsGroups(38L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsGroups(38L)",
            "type": "BitCurb.Rest.Reports.CrunchGroupHistoryViewModel"
         },
         "ID": "38",
         "CrunchHistoryID": "82",
         "GroupIdentifier": "009ba390-48fd-4d41-881d-6f1dc3fafa7b",
         "VarianceValue": "0",
         "GroupElementIDs": "11,7",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      },
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsGroups(37L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsGroups(37L)",
            "type": "BitCurb.Rest.Reports.CrunchGroupHistoryViewModel"
         },
         "ID": "37",
         "CrunchHistoryID": "82",
         "GroupIdentifier": "59a506f5-ce15-4f67-9d36-19a5f8a7e304",
         "VarianceValue": "0",
         "GroupElementIDs": "10,6",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      },
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsGroups(36L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsGroups(36L)",
            "type": "BitCurb.Rest.Reports.CrunchGroupHistoryViewModel"
         },
         "ID": "36",
         "CrunchHistoryID": "81",
         "GroupIdentifier": "02dca6f3-650d-4bc0-95ef-df0ce9a2a635",
         "VarianceValue": "16.8900",
         "GroupElementIDs": "9,3,4",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      },
      {
         "__metadata": {
            "id": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsGroups(35L)",
            "uri": "https://portal.bitcurb.com/ReportData.svc/CrunchRunsGroups(35L)",
            "type": "BitCurb.Rest.Reports.CrunchGroupHistoryViewModel"
         },
         "ID": "35",
         "CrunchHistoryID": "80",
         "GroupIdentifier": "2705be57-4d82-4526-a116-928a03bf1722",
         "VarianceValue": "0",
         "GroupElementIDs": "8,1,2",
         "TenantID": "df57ddfc-5da3-4e98-8fee-77093cf2c2a1"
      }
   ]
}

 

CrunchRunsDetails entities contain statistical data about which items from the input have been grouped together in valid result groups, following the execution of the defined rules.

In our case we have four result groups, and each of them has following properties:

  • ID – unique identifier of the group created
  • CrunchHistoryID – identifier referring entity in CrunchRuns statistical set
  • GroupIdentifier – unique identifier , returned by the crunch operation assigned to the statistical information about group created
  • VarianceValue – the value of the variance that is created or 0 if no variance is created
  • GroupElementIDs – concatenated IDs of the items that have been passed as input to the crunch rule and have been returned as valid results
  • TenantID – unique identifier for your account.

If we review the group with ID 35, we can see that the items in it are with ID:8, ID:1 and ID:2.

This row matches row with “ID”:”120″ from CrunchRunsDetails, which was analyzed above. As we see there are 3 items forming the group.

You can analyze and relate the statistics for the rest of the result groups. Group ID will always match the ID returned in the crunch response, so you can always request statistical information for building custom reports on your end.