Jump to content

Aggregation with multiple signals in histogram


Recommended Posts

  • Seeq Team

While Seeq is working towards enhancing our features in the Histogram tool, here are a simple workaround commonly used to create a histogram for multiple signals with display times in chronological order.

Step 1: Start by loading all of the signals we want to include in the matrix into the display.

image.png.3786aa122308e1bccb9693aca2094c27.png

 

Step 2: Create a monthly condition with a property that split the years and months (YYYY-MM) from the initial date format (YYYY-MM-DDT00:00:00Z) using the formula tool.

Formula 1 - month_withProperty

$monthly = months("Asia/Kuala_Lumpur")

//split the years and month of the data
$monthly
.move(8hrs) //move based on specific timezone example the timezone used here is UTC+8
.transform($capsule ->
$capsule.setProperty('month_year',$capsule.property('start').tostring().replace('/(.*)(-..T.*)/','$1'))) 

Step 3: Combine the aggregate calculation for the multiple signals in a formula.

Formula 2 -combine the aggregate calculations, example here is based on average.

//Step 1: calculate monthly average for each signals
$monthlyaverageA = $t1.aggregate(average(),$month_withProperty, startKey(),0s)
$monthlyaverageB = $t2.aggregate(average(),$month_withProperty, startKey(),0s)
$monthlyaverageC = $t3.aggregate(average(),$month_withProperty, startKey(),0s)

//Step2: combine all the discrete points and move each signal by 1,2 and 3 hours to have different time stamp. Please refer combinewith() formula documentation. 

combinewith(
$monthlyaverageA.move(1hr),
$monthlyaverageB.move(2hr),
$monthlyaverageC.move(3hr))

Step 4 : Create condition for each average temperature signals and use setProperty() function to set the naming for each signal.

//Step 1: calculate monthly average for each signals
$monthlyaverageA = $t1.aggregate(average(), $month_withProperty, startKey(),0s)
$monthlyaverageB = $t2.aggregate(average(), $month_withProperty, startKey(),0s)
$monthlyaverageC = $t3.aggregate(average(), $month_withProperty, startKey(),0s)

//Step2: combine all and create condition for each discrete points and set the property accordingly.

combinewith(
$monthlyaverageA.move(1hr).toCapsules().setProperty('Mode','Area A'),
$monthlyaverageB.move(2hr).toCapsules().setProperty('Mode','Area B'),
$monthlyaverageC.move(3hr).toCapsules().setProperty('Mode','Area C'))

Step 5: Create the histogram as shown in the screenshot below. The colour for each signal can be changed by selecting the legend box on the top right side of the histogram.

image.png.efb19d5990c2536af444f07090b5c9c7.png

 

For users who would like to split the quarter_year or year_week, please refer to the formula below.

  • Formula to split quarter_year
$quarter = quarters(Month.January, 1, "Asia/Kuala_Lumpur")

$quarter.move(8hrs)//move based on specific timezone, example used here is UTC+8
.transform($cap -> {
 $year  = $cap.startKey().toString().replace('/-.*/','')
 $quart = $cap.property('Quarter').toString()
 
$cap.setproperty('Quart',$year+' '+'Q'+$quart)})
  • Formula to split year_week

//Set up formula for 
$week_counter = (timesince(years("UTC"),1wk)+1).round()
 
//The aim is to add '0' in front of single digit number so that the sequence in histogram 01, 02,....10,
$weekLessThan10 = $week_counter < 10
$signal1 = $week_counter.toString()
$signal2 = toString('0').toSignal() + $signal1 
$new_week_counter = $signal1.splice($signal2,$weekLessThan10 )
 
$weekly_capsule_embedded_property = $new_week_counter.toCondition()

//Setting the year and week property
//$year - the function here meant to extract the year
//$week - the embedded Value is XX.0wk - remove the .0wk
//set new property of year_week

$weekly_capsule_embedded_property.removeLongerThan(8d).transform($cap -> {

$year = $cap.startKey().toString().replace('/-.*/','')

$week = $cap.property('Value').toString().replace('/\wk/','')

 $cap.setproperty('Year_Week',$year+' '+'W'+$week)})

You can also check this post to create histogram with hourly bins.

Edited by Nuraisyah Rosli
  • Like 2
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...