Since its release, I’ve seen a number of scenarios where Analysis Services Tabular is the analytical engine of the reporting section in a larger system. In these conditions, at least a part of the queries sent to Analysis Services are DAX queries generated by code (as a consequence of user interaction or for other reasons).

Since DAX knowledge is not very common among developers, having a LINQ to DAX Query provider is more than welcome to simplify DAX code generation. Dealogic, which is between the first companies I helped in Tabular adoption a few years ago, invested time in a first version of the LINQ to DAX provider that is now available on CodePlex and open to contributions.

I looked at the features available and at the DAX code generated and it already looks very interesting. You can generate good DAX queries without knowing DAX (which I suggest to study anyway!), and LINQ to DAX does a lot of job splitting conditions between CALCULATETABLE, SUMMARIZE, ADDCOLUMNS and FILTER. Kudos to György Farkas for his effort!

CALCULATETABLE
Context transition

Evaluates a table expression in a context modified by filters.

CALCULATETABLE ( <Table> [, <Filter> [, <Filter> [, … ] ] ] )

SUMMARIZE

Creates a summary of the input table grouped by the specified columns.

SUMMARIZE ( <Table> [, <GroupBy_ColumnName> [, [<Name>] [, [<Expression>] [, <GroupBy_ColumnName> [, [<Name>] [, [<Expression>] [, … ] ] ] ] ] ] ] )

ADDCOLUMNS

Returns a table with new columns specified by the DAX expressions.

ADDCOLUMNS ( <Table>, <Name>, <Expression> [, <Name>, <Expression> [, … ] ] )

FILTER

Returns a table that has been filtered.

FILTER ( <Table>, <FilterExpression> )