Improve Mondrian MDX usability with user defined functions

21
Improve Mondrian MDX usability with user defined functions Raimonds Simanovskis @rsim

Transcript of Improve Mondrian MDX usability with user defined functions

Improve Mondrian MDX usability with

user defined functions

Raimonds Simanovskis@rsim

http://github.com/rsim/mondrian-olap

https://eazybi.com

We create a lot of calculated members….

Mondrian 3.x

Properties

[Issue].CurrentMember.Properties('Created at')

#ERR: mondrian.olap.fun.MondrianEvaluationException: Property 'Created at' is not valid for member '[Issue].[ABC]'

Properties

CASE WHEN [Issue].CurrentMember.Level.Name = 'Issue' THEN [Issue].CurrentMember.Properties('Created at') END

Get properties

[Issue].CurrentMember.get('Created at')

UDF

[Issue].CurrentMember.getDate('Created at') [Issue].CurrentMember.getBoolean('Resolved') [Issue].CurrentMember.getNumber('Story Points') [Issue].CurrentMember.getString('Summary')

Debug all properties

[Issue].CurrentMember.AllProperties

KEY: JSD-1 Created at: 2013-10-03 01:01:35 Updated at: 2015-07-23 10:40:12 Resolved at: 2013-10-03 01:10:39 Due date: Parent issue key: Sub-task keys: Open sub-task keys: Story Points: Closed at: Sprint: (no sprint) Epic Link: Reporter name: [email protected] Assignee name: jpendleton ...

UDF

Current hierarchy[Time].CurrentMember [Time.Weekly].CurrentMember

CASE WHEN NOT [Time].CurrentMember IS [Time].DefaultMember THEN ... WHEN NOT [Time.Weekly].CurrentMember IS [Time.Weekly].DefaultMember THEN ... END

Current hierarchy[Time].CurrentHierarchy

[Time].CurrentMember or [Time.Weekly].CurrentMember

[Time].CurrentHierarchyMember

[Time] or [Time.Weekly]

UDF

Current hierarchy member properties

[Issue].CurrentHierarchyMember.get('Created at')

UDF

Current Time period

CurrentDateMember([Time], '["Time"]\.[yyyy]\.["Q"q]\.[m]\.[d]')

[Time].[Day].CurrentDateMember UDF

Date parsing

DateParse('2016-11-12') DateParse('Nov 12 2016')

DateParse('today') DateParse('3 months ago') DateParse('10 days from now')

UDF

Time period start and end dates

[Time].CurrentHierarchyMember.StartDate [Time].CurrentHierarchyMember.NextStartDate

UDF

Date calculationsDateCompare DateAddDays

DateDiffDays DateDiffHours DateDiffMinutes

DateBetween

DateDiffWorkdays DateAddWorkdays

DateInPeriod DateAfterPeriodEnd DateBeforePeriodEnd AnyDateInPeriod

[Time].[Month].DateMember('3 months ago')

UDF

Cumulative totalsSum( [Time].CurrentHierarchyMember.Level.Members.Item(0):

[Time].CurrentHierarchyMember, expression )

Sum( PeriodsToDate([Time].[(All)], [Time].CurrentHierarchyMember), expression )

Cumulative totals

Sum( { Generate( Ascendants([Time].CurrentHierarchyMember), IIF([Time].CurrentHierarchyMember IS [Time].CurrentHierarchyMember.FirstSibling, {}, { [Time].CurrentHierarchyMember.FirstSibling: [Time].CurrentHierarchyMember.PrevMember } ) ), [Time].CurrentHierarchyMember }, expression )

Cumulative totals

Sum( { PreviousPeriods([Time].CurrentHierarchyMember), [Time].CurrentHierarchyMember }, expression )

UDF

Aggregated calculated members

[Project].[A and B] = Aggregate({[Project].[A], [Project].[B]})

UDF ChildrenSet([Project].[A and B]) = {[Project].[A], [Project].[B]}

Default contextDefaultContext( (measure, member_2) ) =

(measure, member_2, default_member_3, ..., default_member_N)

UDF

DefaultContext( ( [Measures].[Store Sales], [Customers].CurrentMember ) )

https://docs.eazybi.com/display/EAZYBI/MDX+Function+Reference

https://github.com/rsim/mondrian_udf