finaquant® protos – free .NET Library with Table Functions

Important update on 16. February 2019: Some links, and especially download links on this website may not work properly as I recently transferred the whole site from to

Check my shared folder MyAnalyticalSoftware_AllDownloads for most uptodate downloads. Open-Source downloads of the C#/.NET libraries Finaquant Calcs and Finaquant Protos are also included in this shared download folder as zipped Visual Studio 2012 files. You may contact me if you need consulting for my analytical software (C#/.NET, Matlab, Python, R).

Download installation file and user manual of finaquant® protos, the Table Function library.1. This free (zero-priced) .NET library can only be used for non-commercial purposes like education and science2. See installation and getting started.

related downloads related article download by price
MS Visual Studio file FinaquantProtosStarter Getting started everyone free
Class Library Document for Finaquant Protos everyone free
Finaquant Protos in a Nutshell everyone free
MS Visual Studio File ProtosExcelIntegration Calling table functions… everyone free
Finaquant Protos 1.08 installation file (.NET 2.0) members-only free
Allocations and Distributions with finaquant® protos Allocations and … members-only free

NOTE: Allowed table size is limited (max 20’000 rows) in the published standard release of finaquant® protos. See commercial finaquant® calcs or contact us if you need unlimited table size.

All table operations and calculations with in-memory data, just like matrices!
Table calculations with in-memory data (RAM)

Table Functions in .NET

  • Analytical table-valued functions with in-memory tables as input and output parameters (like standard formulas in excel)
  • Standard methods can be extended with user-defined table functions (like user-defined formulas in excel).
  • Table Functions can replace database programming for analytical operations on data tables.
  • Table Functions can be compared to Matrix Functions of math software like Matlab or R, with the difference that their input & output parameters are data tables instead of matrices.
  • Library includes methods to store multiple arrays of data tables in a relational database like MS SQL or MySQL. Tables can also be stored as XML files.

Table Functions in Excel
Install an excel add-in and start testing table functions in a minute. More info
Table Valued Functions in Excel

Microsoft Visual Studio Project with Table Function Examples
Download Visual Studio project FinaquantProtosStarter which is the best training tool for Getting Started with Table Functions. You may find in it a demo function for every group of Table Function.

Easy installation with standard NuGeT package
finaquant® protos can easily be installed directly from a Visual Studio project with a NuGeT pack. Steps for installation are:

  1. Open and Save a new Visual Studio project.
  2. From the Tools menu, select Library Package Manager, then click Package Manager Console.
  3. Enter following command in Package Manager Console:
    Install a Library as NuGet Package

That’s it; the latest release of finaquant® protos will be downloaded and referenced to your Visual Studio project automatically.

Quick Start with Table Functions of finaquant® protos

  1. Open and Save a new Visual Studio project (console application in C#) named QuickStartProtos
  2. Install finaquant® protos as NuGet Package using the Package Manager Console (required steps are explained above)
  3. Coply and Paste following example C# code into the program file Program.cs, and Run
Example Code for Quick Start
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FinaquantProtos;
namespace QuickStartProtos
    class Program
        static void Main(string[] args)
            #region "Create data tables"
            // First, create some data tables of type MatrixTable
            // define meta data (all table fields)
            MetaData md = MetaData.CreateEmptyMetaData();
            MetaData.AddNewField(md, "category", FieldType.TextAttribute);
            MetaData.AddNewField(md, "product", FieldType.TextAttribute);
            MetaData.AddNewField(md, "brand", FieldType.TextAttribute);
            MetaData.AddNewField(md, "costs", FieldType.KeyFigure);
            MetaData.AddNewField(md, "price", FieldType.KeyFigure);
            MetaData.AddNewField(md, "margin", FieldType.KeyFigure);
            // define fields of CostTable
            var CostTableFields = TableFields.CreateEmptyTableFields(md);
            TableFields.AddNewField(CostTableFields, "category");
            TableFields.AddNewField(CostTableFields, "brand");
            TableFields.AddNewField(CostTableFields, "product");
            TableFields.AddNewField(CostTableFields, "costs");
            // create CostTable with elements
            MatrixTable CostTable = MatrixTable.CreateTableWithElements_A(CostTableFields,
                "Notebook", "Ignor", "Ignor UX Notebook", 850.0,
                "Notebook", "Ignor", "Ignor AX Notebook", 950.0,
                "Notebook", "Euphor", "Euphor 5 Notebook", 1200.0,
                "Notebook", "Euphor", "Euphor 10 Notebook", 1450.0,
                "Desktop", "Ignor", "Ignor 4D Desktop", 650.0,
                "Desktop", "Ignor", "Ignor 6D Desktop", 800.0,
                "Desktop", "Euphor", "Euphor 2E Desktop", 1050.0,
                "Desktop", "Euphor", "Euphor 5E Desktop", 1300.0
            // define fields of MarginTable
            var MarginTableFields = TableFields.CreateEmptyTableFields(md);
            TableFields.AddNewField(MarginTableFields, "category");
            TableFields.AddNewField(MarginTableFields, "margin");
            // create MarginTable with elements
            MatrixTable MarginTable = MatrixTable.CreateTableWithElements_A(MarginTableFields,
                "Notebook", 0.40,
                "Desktop", 0.30
            // View tables
            MatrixTable.View_MatrixTable(CostTable, "CostTable");
            MatrixTable.View_MatrixTable(MarginTable, "MarginTable1");
            #endregion "Create data tables"
            // EXAMPLE 1: Table-Scalar Multiplication
            // Multiply all key figures (numbers) of CostTable by a scalar number
            MatrixTable CostTable_fractions = CostTable * 1.3333;
            // view table with fractional numbers
            MatrixTable.View_MatrixTable(CostTable_fractions, "CostTable after multiplication by 1.3333");
            // EXAMPLE 2: Rounding all key figures of a table
            // round numbers to 2 digits after decimal point
            MatrixTable CostTable_rounded = MatrixTable.Round(CostTable_fractions, 2);
            // view table with rounded numbers
            MatrixTable.View_MatrixTable(CostTable_rounded, "CostTable after rounding");
            // EXAMPLE 3: Obtain PriceTable by Table Multiplication
            // MarginTable specifies margins per category
            MatrixTable PriceTable = MatrixTable.MultiplySelectedKeyFigures(CostTable, (MarginTable + 1),
                InputKeyFigTbl1: "costs", InputKeyFigTbl2: "margin", OutputKeyFig: "price");
            // view PriceTable
            MatrixTable.View_MatrixTable(PriceTable, "PriceTable: Prices calculated with margins per category");
Note: You may need to add System.Windows.Forms to project’s assembly references.

Run demo queries in LINQPad
You can install the popular development tool LINQPad and begin to test demo scripts with finaquant’s table-valued functions (in C# or VB.NET) within minutes. See required steps..
Table Functions with LINQPad

Building a Web Service with table-valued parameters
You can easily build a web service based on the Web API framework to utilize the power of table-valued functions. Downloads and explanations here..
web service that receive and return data tables

Primary classes of the .NET library finaquant® protos

Class Description
MatrixTable Central class with table-valued functions (Table Functions). Similar to DataTable object of ADO.NET, a MatrixTable object represents a data table, but with a simpler data structure adapted to analytical table operations. A MatrixTable can be converted to a DataTable, and vice versa
MetaData Global field and hiearchy definitions for all data tables of type MatrixTable
TableFields Class for defining the field structure of a table of type MatrixTable
TableRow A TableRow object represents a row (entry) of MatrixTable
DataStore Reading or writing writing whole tables from/to a relational database (MS SQL or MySQL) together with the table instance information
PersistentTableArray Enables operations with persistent array of tables of type MatrixTable.
ConditionCell Condition Cell for defining and applying filtering criteria (range or value-list) for tables
ConditionList Condition List; array of Condition Cells for defining and applying chained filter criteria for tables
DateFunctions Class for static data functions
Utility Class for various static utility functions
KeyMatrix Class for Matrix operations with key figures (numbers) of type double
NumMatrix Class for Matrix operations with numeric attributes of type integer
TextMatrix Class for Matrix operations with text attributes of type string
KeyVector Class for Vector operations with key figures (numbers) of type double
NumVector Class for Vector operations with numeric attributes of type integer
TextVector Class for Vector operations with text attributes of type string
ProtosHelp General product, copyrights and release information

Note: You may download Class Library Document for Finaquant Protos (1345 downloads) for a complete list of classes, methods and properties.

Table Functions in finaquant® protos

finaquant® protos can be used for applications like:

  • Table Computations and Table Mathematics in .NET
  • Analytics: Simulations, Estimations and Optimizations based on historical data
  • Function Trees with data tables as input and output parameters
  • Cause-effect relationships and networks with table-valued parameters

What is new with finaquant® protos:
Table functions and table mathematics. Some table functions like Allocations & Distributions and FOX formulas are embedded in expensive business software like SAP that are used for accounting, financial planning and reporting. These are but only a subset of the table functions that are available in finaquant® protos.
Read: Why finaquant® protos? Listen: Why Table Functions?

More Information

  1. Matrix and vector functions come as a byproduct. See User Manual for the list of available table, matrix and vector functions. []
  2. For commercial use see finaquant® calcs, Calculation Engine based on Table Functions. []
  3. A subtable transformer applies the same table (or matrix) function on every subtable of an input table. []
  4. A function router applies selected table (or matrix) functions on selected subtables of an input table. []