Example of Calculation Syntax for MCE

Value Calculator Template Functions 

These calculations can use either the original legacy simplified naming convention or the MCE Item DataItem naming convention. For simplicity, all these examples use the simplified legacy naming convention.

Function Description Example
Single Value Functions Determine the single point aggregate value of the specified DataItem Data Point List at the specified time
rawdata(dataItemName, today) Returns the raw data value for the relevant dataItemName rawdata(12345.today)
data(dataItemName, today) Returns the calculated data value for the relevant dataItemName data(12345,today)
target(dataItemName, today) Returns the target value for the relevant dataItemName target(12345,today)
cost(dataItemName, today) Returns the cost value for the relevant dataItemName cost(12345,today)
targetcost(dataItemName, today) Returns the target cost value for the relevant dataItemName targetcost(12345, today)
Function Description Example
DataSet Functions Provides a time range of Data Points from the specified Data Item Data Point List
rawdataset(dataItemName, startTime, endTime) Returns the mean of the rawdataset between the relevant start and end times mean(rawdataset(12345, today-3, today))
dataset(dataItemName, startTime, endTime) Returns the mean of the calculated dataset between the relevant start and end times mean(dataset(12345, today-3, today))
targetset(dataItemName, startTime, endTime) Returns the mean of the target dataset between the relevant start and end times mean(targetset(12345, today-3, today))
costset(dataItemName, startTime, endTime) Returns the mean of the target dataset between the relevant start and end times mean(costset(12345, today-3, today))
lowcalcset(dataItemName, startTime, endTime) Returns the mean of the low calc dataset between the relevant start and end times mean(lowcalcset(12345, today-3, today))
highcalcset(dataItemName, startTime, endTime) Returns the mean of the high calc dataset between the relevant start and end times mean(highcalcset(12345, today-3, today))
DataSet Functions referencing period as well as today Returns the value of the dataset but using aggregation periods as well as date. This allows us to specify the average of, say the last the last 7 aggregation periods for a meter mean(dataset(12345, today – (7 * period(12345)), today – period(12345)))
Dataset functions using period in a date range Returns the dataset function of the data for the period in the day defined between the two period ranges. If meter 12345 has 30 min aggregations then 48 periods in day so this is averaging data for tomorrow (today+1) – 46 periods takes this 1:00 am today to period 38 which is 5.00 am today mean(dataset(12345, today+1-period(12345)*46, today+1-period(12345)*37)).
Remove specific values from a dataset Excludes the second value from a dataset defined by the 1st value mean(Remove(dataset(12345, today, today+1), 0)) This will calculate a mean of the dataset for meter 12345 excluding any values of 0. Note – can exclude multiple values by seperating with a comma so mean( Remove(dataset(12345, today, today+1), 0,10,99)) will calculate the mean excluding any values of 0, 10 or 99
Remove calculated values from a dataset Excludes the values from another calculation in the dataset defined by the 1st value sum(Remove(dataset(12345, today-1,dataset(23456, today-1, today))) This calculates the sum of dataset for meter 12345 excluding any values that are found in the meter 23456
RemoveGET (v161+) Excludes all values greater or equal to the value passed mean(RemoveGET(dataset(12345, today–7, today-1),100)) Removes all values greater than or equal to 100
RemoveLET (v161+) Excludes all values lower or equal to the value passed mean(RemoveLET(dataset(12345, today–7, today-1),0)) Removes all value less than or equal to 0
Function Description Example
choose(condition, trueValue, falseValue) Conditional statement returning the false or true value dependent on the logical result of evaluating the specified condition. choose(data(12345, today)>X, 10, 100)
and(condition1,condition2) Conditional statement returning the true or false value depending on the logical result of evaluating the specified conditions choose(3<4&&5<6, 1, 0)
or(condition1,condition2) Conditional statement returning the true or false value depending on the logical result of evaluating the specified conditions choose(3<4||5<6, 1, 0)
Pow(value, power) Value raised to the specified power Pow(data(12345,today),2)
choose((StartTime > dateserial(yyyy,mm,dd)), truevalue,falsevalue) Conditional statement returning the false or true value dependant on the logical result of the dateserial condition. choose((today >= dateserial(2010,01,05)), 10.0, 1.0)
choose((StartTime > dateserial(yyyy,mm,dd)) && (StartTime > dateserial(yyyy,mm,dd)), truevalue, falsevalue) Returns the value of the false or true value dependant on the logical value of the And statement choose((today >= dateserial(2010,01,05)) && (today < dateserial(2010,01,07)), 10.0, 1.0)
valueattime Allows you to apply different values at different times of the day. Example will enter value of 10 between 06:00 and 21:00 and a value of 20 outside these times valueattime(timeserial(06,0,0), timeserial(21,0,0),10,20)
Function Description Example
stddev(dataItemName) Standard deviation of the specified Data Item Data Point List. stddev(rawdataset(12345,today-3,today))
mean(dataItemName) Mean value of the specified Data Item Data Point List mean(rawdataset(12345,today-3,today))
median(dataItemName) Median value of the specified Data Item Data Point List median(dataset(12345,today-3, today))
min(dataItemName) Minimum value of the specified Data Item Data Point List min(costset(12345,today-3, today))
max(dataItemName) Maximum value of the specified Data Item Data Point List max(lowcalcset(12345,today-3, today))
sum(dataItemName) Summation of the specified Data Item Data Point List sum(highcalcset(12345,today-3,today))
EWMA(dataItemName, alpha value) Returns the Exponential Weighted Moving Average value of the dataItemName using the specified alpha value which MUST be between 0 and 1 EWMA(dataset(12345), 0.5)
cum(dataItemName, dateString) Returns the cumulative total of the specified meter from the date entered. Partial dates/times are allowed, leave that part blank ie 2012/04/01/00/00 could be /04/01/00/00 to do 1st april every year, or ///06/00 would reset the counter everyday at 6am cum([ItemName|CALC], “/04/01/00/00”) gives cumulative total of meter which resets on 1st april each year. You can also use the meterid in place of the ItemName ie cum([12345|CALC], “/04/01/00/00”) would work
Lookup(string, value) Returns the lookup value given the lookup specified by name and input value. String can be: FullName, FullMeterName, Company, Site, ItemName, SubType. This performs a lookup in the StandardValueCalcualatorTemplate and gives the flexibility to define multiple lookups throughout the database structure. Lookup(Company, 3) will return the 3rd value from the Lookup that is named as per the relevant Company. Lookup(FullName, data(23456,today)) will place the value from meter 23456 into the Lookup called Company|Site|Meter|CALC i.e. the full Itemname
The MCE format to define an ItemName is completely different to the legacy IPMS but essentially the MCE format takes the format [CompanyName|SiteName|MeterName|CALC].XXXX where XXX is the command. The MCE format for Date and Time uses the principle of Ticks where a single Tick represents one ten millionth of a second. There are 10,000 ticks in a millisecond.
This list is not exhaustive in any way and ther are plenty of additional MCE functions that have not been included.
Function Description Example
period(dataItemName) Returns the aggregation period of the meter in ticks period(12345)
Time Returns the value of the date in ticks but Item MUST have an Start and End Time associated with it otherwise the data will not be calculated Time
Index Returns the Index of the value in the database with the first reading in the database having a value of 0. Very useful for initiating counts that are to be used with the .GetValue command but Item MUST have an Start and End Time associated with it otherwise the data will not be calculated Index
Index-value Returns the Index of the value in the database with the first reading in the database having a value of 0 less the value shown. Very useful for initiating counts that are to be used with the .GetValue command but Item MUST have an Start and End Time associated with it otherwise the data will not be calculated Index-30
MCEdataItemName
.Last.Value
Gets the last value for the Item in the database [Meniscus|Brewery|Inlet flow|Calc].Last.Value
MCEdataItemName
.EndTime
Gets the last time for the meter in the database in ticks [Meniscus|Brewery|Inlet flow|Calc].EndTime
MCEdataItemName
.Count
Counts the total number of points in the database [Meniscus|Brewery|Inlet flow|Calc].Count
(MCEdataItemName
.Count) – Index
Counts total number of readings and then subtracts the index from this. Creates a declining index counting to 1 at the most recent value in the database ([Meniscus|Brewery|Inlet flow|Calc].Count)-Index
choose(Index < MCEdataItemName .Count-30 ,0,1) If the current Index of the Item < than the total number of points in the Item -30 then 0 else 1 choose(Index < [Meniscus|Brewery|Inlet flow|Calc].Count-30,0,1)
MCEdataItemName
.GetValueAtTime( Time)
This acts in the same way as the IPMS format data(12345,today) and is the MCE syntax version of this. Except it interpolates between readings if the aggregation period is different [Meniscus|Brewery|Inlet flow|Calc] .GetValueAtTime(Time)
MCEdataItemName
.GetValueAtTime( dateserial( yyyy,mm,dd))
Gets the value at the date specified in the dateserial expression Meniscus|Brewery|Inlet flow|Calc] .GetValueAtTime( dateserial(2010,03,25))
MCEdataItemName
.GetValueAtTime( dateserial(new DateTime (today).Year, month(today), day(today))
Gets the value of the MCE DataItem at the day, month and year of the calculation as it is processed. Useful for taking a value for a daily aggregated data item and passing to, say, an hourly aggregated DataItem. There is currently no year(today) syntax and the new DateTime(today).Year is the c# equivalent to achieve this MCEdataItemName .GetValueAtTime( dateserial(new DateTime(today).Year, month(today),day(today)))
MCEdataItemName
.GetValueAtTime.(DateTime.Now
.Ticks)
Gets the value for just today’s exact date and time. Will interpolate between points on a linear basis if no exact point is found [Meniscus|Brewery|Inlet flow|Calc] .GetValueAtTime.(DateTime.Now.Ticks)
MCEdataItemName
.GetValueAtTime( dateserial( DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day))
Gets the value for the Item using today’s actual Year, Month and Day values. If we use Now.Year-1 this would use data for Last year, Month-1 would be last month etc. Meniscus|Brewery|Inlet flow|Calc].GetValueAtTime( dateserial(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day))
MCEdataItemName1
.GetItem( MCEdataItemName2
.Count-1).Value
Gets the last value from Item1 using the counter in Item2 [Meniscus|Brewery|Inlet flow|Calc].GetItem( [Meniscus|Brewery|Inlet flow|Calc].Count-1).Value
MCEdataItemName1
.GetItem( MCEdataItemName2
.Count-30).Value
Gets the value from Item1 using the counter in Item2 less 30 [Meniscus|Brewery|Inlet flow|Calc].GetItem( [Meniscus|Brewery|Inlet flow|Calc].Count-30).Value
MCEdataItemName1
.GetItem( (int)data(meterid2, today) +offset).Value
Gets the value from a Itemcalled Itemid2 and adds an offset of 48. This value is then used to get the value from the RawData of MCEDataItemName1. This is creating a calculated offset from a rawdata list. Can feed in the offset from a Lookup and the use this method to get the rawdata values [Profile|RAW].GetItem( (int)data(counter,today-period(counter)*1)+48).Value
counter( [MCEdataItemName|
CALC] .GetItem( Index).Time, true/false, period
Creates a counter that counts forward if the boolean value is set to true and counts backwards if set to false. Counts forward the number of aggregation periods defined in the period element.