*We are using cookies to give you the best experience on our site. Cookies are files stored in your browser and are used by most websites to help personalise your web experience.*

*By continuing to use our website without changing the settings, you are agreeing to our use of cookies.*

# Concept-oriented expression language

**Concept-oriented expression language** (COEL) is a formula language based on the principles of the concept-orientation. It is implemented in the DataCommandr Engine in Java and C#. The main purpose of COEL is to provide syntactic constructs for easily defining new data *columns* in terms of already existing data columns, and in this sense, it is opposed to classical row-oriented approaches where new data tables are defined in terms of existing tables.

## Contents |

## Overview

The general goal of COEL is very similar to that of Data Analysis Expressions (DAX). One difference is that COEL is based on the concept-oriented model of data while DAX is based on the tabular model implemented in Microsoft Power Pivot.

Both approaches proceed from the informal observation that it is very convenient to define new data by defining *formulas* similar to how it is done in classical spreadsheet applications. In other words, instead of querying data we compute data. The main difference from the spreadsheet applications is that instead of defining new *cells*, the language formulas define new *columns*. In other words, a spreadsheet formula represents an expression which describes how a cell depends on other cells. In contrast, a COEL or DAX formula describes how a new column depends on other columns.

## Challenges

This approach works perfectly if all columns belong to one table. The main problem however is to provide conception for working with a set of columns belonging to *different* tables. For example, how to define a new column `Total Amount`

of the table `Purchase Orders`

so that the values of this column depend on the values in other table columns, for example, column `Price`

in the table `Product Catalogue`

.

## Unique features

The main conceptual difference of COEL from the classical approach to data transformations is how new data elements are defined. The classical approach assumes that a query defines how new tables (their rows) are produced from other tables. Normally it is done by describing how an output *row* depends on one or more input rows (from different input tables). Therefore, it is inherently row-oriented approach and it has been implemented in almost all traditional query languages and systems starting from relational DBMSs and ending with MapReduce.

COEL is fundamentally different because its expressions return a single *value* rather than a row (object). Formally, an expression in COEL represents a mathematical function, that is, a mapping from input values to one output value. An output of COEL expressions is not a row of a table - it is a single value from some set.

Another unique feature of COEL is that it gets rid of such relational operations as join and group-by which are known to be quite difficult to comprehend and use.