Grasp, A .NET Analysis Engine – Part 1: Overview
- Part 1: Overview
- Part 2: Variables
- Part 3: Calculations
- Part 4: Runtime
- Part 5: Executable
- Part 6: Validating Calculations
- Part 7: Compiling Calculations
- Part 8: Calculation Dependencies
- Part 9: Dependency Sorting
A frequent scenario I see as a developer is to collect a data set and analyze it. Many application types operate on this core principle, however subtly. I have often wondered what it would look like to generalize and unify these systems. I have seen/worked on a few:
- Operational data for medical offices, labs, and other organizations
- Financial forms
- 360-degree feedback
- Conformance to standards
- Accreditation and assessment
These problem domains share many traits but vary widely in purpose. Each has unique needs for data and analysis, which together form a schema for interpreting meaning. By defining things, these systems add value in the space between what and why.
Solutions in this area tend to overlap in form and function. I thought it would be interesting to capture the common elements in a library, at a low level. I named it Grasp, reflecting the need to both collect and understand data.
Data in this context means a set of uniquely-identifiable values. It may represent a math test, a safety checklist, a web survey, a quarterly financial report, or a site assessment.
Analysis mines the raw material for business value by generating data from existing data:
- Are the student’s answers correct?
- Is the safety inspection fully filled out?
- What percentage of respondents answered "No" for question 5?
- What was the bookstore’s operating profit?
- How many residents are graduating this year?
The more thorough the analysis, the more we know about a data set. The answers become new data we can throw on top of what we’ve already got, for future use. Grasp is a language for defining, executing, and reporting on this cycle.
What to Expect
This series will cover many aspects of an analysis engine. We will represent data and calculations involving that data. We will compile those into a fully-functional runtime that addresses details such as data types, interdependent calculations, and extensibility. At the end we will have a library that fits at the core of many application types.
In the next post we will start with our first goal: represent data.