User Tools

Site Tools


howtos:toolcoding:many_to_one_mapping_with_non_summation_aggregation_rule

Many to One Mapping with Non-Summation Aggregation Rule

The map tool can perform an index mapping in which multiple elements of informant X are mapped to the same element of informant Y. To aggregate multiple elements into one, the map tool sums the values of the composite elements. However, there may be a need to use a different aggregation function such as minimum, maximum, or average.

The following example demonstrates how to implement this logic.

Background

In this example, the variable indexed by the informant unitID will be mapped to a variable indexed by the informant plantID. The contents of these informants are:

plantID[]: set
 version: 3
 desc:    localinformant plantID[] = create (; object=set, data="Plant1 Plant2")
 data:    2 elements
-----------------------------------
1     Plant1          
2     Plant2          

unitID[]: set
 version: 3
 desc:    localinformant unitID[] = create (; object=set, data="Unit1 Unit2 Unit3 Unit4 Unit5")
 data:    5 elements
-----------------------------------
1     Unit1           
2     Unit2           
3     Unit3           
4     Unit4           
5     Unit5           

The variable unitComYr contains commissioning years by unitID

Implementation

1. Create the following desired mapping from unitID to plantID is:

Unit1 → Plant1
Unit2 → Plant2
Unit3 → Plant1
Unit4 → Plant1
Unit5 → Plant2

local unitToPlantMap[uid] = create (; dataType=integer, dim=unitID, data="1 2 1 1 2")

2. Create a mask that will expand unitComYr to include plantID

local pid[pid,pid] = diag (1.0; dim=plantID)
local plantIDMask[uid,pid] = boolne (dimtran (pid[pid,pid]; map1=unitToPlantMap[uid], newDims=1, checkData=off),0)

local unitComYrx[uid,pid] = unitComYr[uid] * plantIDMask[uid,pid]

3. Add offset to remove 0's before taking minimum

local unitComYry[uid,pid] = booleq (unitComYrx[uid,pid],0) * 9999 + unitComYrx[uid,pid]

4. Use coordmin to create a variable that contains online date, which is the earliest commissioning year of the units that comprise the plant, by plantId

local plantOnlineDate[pid] = coordmin (reorder (unitComYry[uid,pid]; plantID, unitID); numDims=1)

Click here to download the tool file that encapsulates the above example.

howtos/toolcoding/many_to_one_mapping_with_non_summation_aggregation_rule.txt · Last modified: 2011/06/13 16:20 by chris.strashok