Jump to content

John Cox

Seeq Team
  • Posts

    76
  • Joined

  • Last visited

  • Days Won

    27

Everything posted by John Cox

  1. If you simply want the 3 separate signals combined into 1 signal, instead of $TSHShift1 + $TSHShift2 + $TSHShift3, please try: combineWith($TSHShift1,$TSHShift2,$TSHShift3) Does this help?
  2. Hello Benoit, In looking at your trends and results for Monthly evolution and Monthly consumption, it appears to me that the results look good. I'm not sure I completely understand where the error is coming from. The Monthly consumption totals look reasonable to me for August 2024 and September 2024. But, IF during the data gaps you want to assume that the "Initial Meter Signal" is linearly interpolating, you can force a resample of the interpolated signal to a sample frequency that you choose (in my example formula below I chose 2 minutes, but you can choose whatever you want). Please be aware that this approach will fill in "assumed" data values during the data gap time periods based on linearly interpolating during the gaps, so make sure it does what you want. $Initial_Meter_signal.removeOutliers().validValues().setMaxInterpolation(3month).toLinear().resample(2min) As a temporary test, you may want to create a signal with this formula above and trend it with the original meter signal so that you can see what it looks like at the end of a month when there is a data gap.
  3. Hello, To do this, you will need to select a time period basis (a Condition in Seeq) over which to compute the signal (and ignore the meter resets). Often, customers want to do this over a daily or weekly time period, but your time basis may be different. The following Seeq formula will take the signal, ignore the resets to 0, and display the incremental total for the signal over the time period you specify: // Calculate only positive increases in the signal // and then compute the running sum over a // chosen time period (in this example, daily time periods). // The time period can be ANY condition the user selects, // days(), weeks(), months(), etc. It could also be // a condition for production runs, campaigns, or anything the user defines. // The condition inside of runningSum() is the basis for the running total of the signal. $signal.runningDelta().max(0).runningSum(days('US/Eastern'))
  4. Hello, Issue 1: Signal is Missing For this situation, create a new Seeq formula to remove any invalid values in the data gap and then set the max interpolation. The "max interpolation" is the maximum data gap duration over which you want to connect the data points with a line. Set the time parameter (24hr in my example below) to a value longer than any data gaps you want to close. $signal.validValues().setMaxInterpolation(24h) Issue 2: Signal Value = 0 For this case, $signal.removeOutliers() may be a good solution, if there is only a single data point at 0. Something which may work better (and is used more often) is the .remove() function. Create a new Seeq formula and try this: $signal.remove($signal==0) Please see additional information in this seeq.org post on the .remove()function: Data Cleansing Tips Issue 3: Meter Reset to 0 There are several ways to handle signal resets in Seeq, depending on the objectives of your analysis. Can you provide more detail about what you want to do for this issue?
  5. Hello, I do not think this calculation process should take 15 minutes or longer. The settings chosen for window size and window period could be having an effect. I ran a test on example data and this functionality worked well for me, so I think something unexpected is happening. If the data is not confidential, can you: 1) share a screenshot of the calendar time trend view in Seeq Workbench prior to running the Correlation Analysis add-on? What was the total time of data in trend view? 2) show the "table" view of the generated correlation heatmap for both "Coefficients" and "Time Shifts" Output Values?
  6. Hello Sunit, The error seems to indicate you don't have access to the Workbench Analysis containing the worksheet, but I have not seen this error reported before. Please sign up for an upcoming Office Hours appointment (https://outlook.office365.com/book/SeeqOfficeHours@seeq.com/) where you can show a Seeq Analytics Engineer the error and they can help troubleshoot the issue. John
  7. Hi Regie, please see the recommendations on this topic that we gave you on the recent support ticket you submitted. One of our analytics engineers has offered (via the support ticket) to meet with you to discuss this in more detail.
  8. Hi David, I believe the user would need "Write" access to the item that cache is being cleared on. The user's current level of access can be checked via "Access Control" under Item Properties. John
  9. Hi Joel, Here is an idea to try, not sure if it will help. 1. Create a timestamp for "x days ago" using the following Formula, specify the x days ago as you desire: // 2 days ago, formatted to midnight // (modify the -05:00 for the time zone of interest) // (modify the "2d" parameter as needed to avoid uncertain data) (now()-2d).toString() .replace('/(?<year>....)-(?<month>..)-(?<day>..)T(?<hour>..):(?<minute>..):(?<sec>..)(?<dec>.*)Z/' , '${year}-${month}-${day}T00:00-05:00') // next line may be needed to replace ? at end of string .replace('/\\?/','') 2. Use the Formula result from step 1 as a "variable" in your existing Reference Profile formula, and put the variable reference in place of "now()" in your Reference Profile formula. (Also, if you don't really need 5 minute gridded values over the course of each yearly capsule for the profile average calculation, I would consider moving to 1 hour, 24 hours, etc.).
  10. Hello zaky, I suggest that you sign up for an Office Hours appointment where you can share your screen and discuss this with a Seeq Analytics Engineer: Seeq Office Hours There may be a better way to achieve your objectives.
  11. Hello Prachya, To do this you will need to 1) create a new signal whose value represents the reformatted 'Start' time of your condition and 2) then add a new property to your condition using the signal created in step 1: Here is the formula for 1) Signal with Reformatted Start Time: // This formula creates a signal whose value represents the start time // of the condition of interest ($ExistingCondition), reformatted as MMM-DD // change the 10d below to be a bit longer than the maximum duration of capsules in $ExistingCondition $ExistingCondition.removeLongerThan(10d) // Next line is optional as needed to correct // for time zone (in this example I'm correcting to US/Eastern Time) // This may be needed because .toSignal('Start') will give the Start time // in UTC .move(-4hr) // convert 'Start' property to a string signal .toSignal('Start') .toString() // Extract out only the month and day from the 'Start' property .replace('/(?<year>....)-(?<month>..)-(?<day>..)T(?<hour>..):(?<minute>..):(?<sec>..)(?<dec>.*)Z/' , '${month}-${day}') // now, replace the month number with MMM .replace('01-','JAN-') .replace('02-','FEB-') .replace('03-','MAR-') .replace('04-','APR-') .replace('05-','MAY-') .replace('06-','JUN-') .replace('07-','JUL-') .replace('09-','AUG-') .replace('09-','SEP-') .replace('10-','OCT-') .replace('11-','NOV-') .replace('12-','DEC-') // Only need next line if making a time zone correction above. // The 20d should be changed to be a bit longer than the // maximum time BETWEEN capsules in $ExistingCondition. .validValues().setMaxInterpolation(20d) Here is the formula for 2) Condition with a new "Reformatted Start" property defined. The formula uses the signal created in step 1) above: // change the 10d below to be a bit longer than the maximum duration of capsules in $ExistingCondition $ExistingCondition.removeLongerThan(10d) .setProperty('Start Reformatted',$ReformattedStartSignal,startValue())
  12. Yes, Seeq has lookup table functionality directly in Seeq Formula and tables with more than 2 columns are supported. See this article for complete details: https://support.seeq.com/kb/latest/cloud/lookup-tables. Here is an example Formula which "looks up" a Machine Status string value based on a numeric Machine Error Code signal. The "keyColumn" in the lookup table is therefore column A, and the "targetColumn" is column B: $table = lookupTable( "[ [1, 'Normal'], [2, 'No current'], [3, 'Unstable voltage'], [4, 'Liquid detected'], [5, 'Sensor failure'], [6, 'Overheating'] ]", InterpolationMethod.Step) $table .lookup($ErrorCode, 'A', 'B') This screenshot shows implementation of the formula example above. The input to the lookup table is the Machine Error Code signal in lane 1. The resulting Machine Status signal is trended in lane 2: Note that prior to Seeq R66, the lookup functions were prefixed with "experimental": experimental_lookupTable() and experimental_lookup(). For advanced use cases where lookup table values are dynamic in nature, and there is a need to programmatically update the lookup table values in a Seeq Formula, please see this post:
  13. Does Seeq have lookup table functionality? I know that I can use the .splice() function to vary values based on conditions, but I would like to, as one example, implement a table with product codes and and produce a target value signal which varies based on product code.
  14. You can use $signal.setUnits('') on each of the inputs in the Formula. This will remove the units on each signal to prevent Seeq from trying to ensure unit consistency. For example: $Density.setUnits('')*$Velocity.setUnits('')*$Length.setUnits('')/$Viscosity.setUnits('') Note: you can use .setUnits() again at the end of a Formula calculation if you want to force a unit for the output. Also, .setUnits() can be valuable to assign units to a unitless signal in Seeq or to overwrite incorrect units.
  15. In some situations I do not want to enforce units of measure consistency in Seeq Formula calculations, or I simply want to do a series of unit conversions myself in a simplified way. How can I make my formula work as intended when units are not consistent and I still want to calculate the formula as is, because I've verified that it gives the results I need? For example, I want to calculate the Reynolds Number (=ρ*u*L/μ), a dimensionless quantity that helps predict fluid flow patterns, which is a function of 4 variables. I would prefer to check the units myself and leave them out of the formula: ρ = density (lbm /ft3 ) u = velocity based on the actual cross section area of the duct or pipe (ft/s) μ = dynamic viscosity (lbm /s ft) L = characteristic length (ft)
  16. Hi Dan, Thanks for the additional information. The bottom 2 plots you show can be done with Formulas in Seeq Workbench. There is a great post here with additional information that might be useful for creating the formulas, if you haven't seen it: Creating a Control Chart in Seeq The top plot you show can't be done directly in Seeq Workbench, but you could certainly do this with Seeq Data Lab, which with additional development could be turned into a full add-on, and this approach also gives the possibility of pushing the Data Lab visuals/charts to a Seeq Organizer for reporting and monitoring. We have documentation on add-on development here and the Seeq Data Lab AI Assistant can be very helpful in this regard. For the possibility of more advanced options (using the boxplot plug-in mentioned above) and "early development" add-ons that might also help, I'd recommend reaching out to your Seeq account team (let me know if you need help contacting them).
  17. Hello Dan, The 3-way control chart could be done a few ways in Seeq. Depending on your level of interest, we would be happy to discuss options with you. One approach would be to create an add-on which would provide a nice user interface and user selectable parameters, directly in Workbench. If by chance you haven't already used add-ons, here is a link showing a few examples: Seeq Add-on Gallery Another possibility is we have a "Boxplot" plug-in for Seeq (an example visual shown below), which again would be accessed directly from within Workbench. This integrates nicely with recurring time periods or with any condition you define in Seeq Workbench, for defining the time periods for statistical aggregation.
  18. You are welcome! Yes, I can explain the $w variable in the transform. It is a variable name that the user chooses to represent the "capsules" in the condition to the left of .transform. You can think of the .transform as a way to "loop" over all the capsules in the condition to the left of .transform (which in this case is our daily condition, so we loop through all of those daily 24 hour capsules and do some additional logic). I could have chosen any valid variable name I want in place of $w. For example I could have done this and it would work just as well: $FirstTestEachDay = $days.transform($daycapsule -> $repeatTests.toGroup($daycapsule).first()) In summary, we use the .transform to go individually through all the capsules in the daily condition. We convert all the $repeatTests capsules into a group of capsules for each individual day. After we have converted them to a group, we can then do things like pick the first or last capsule in the group. The overall result of the .transform is a set of capsules (one capsule for each day there were repeated tests, and no capsules on days without repeated tests) that make up our $FirstTestEachDay condition. Hope this helps!
  19. Hello, I'm not certain I understand exactly what you want, but I think you want to merge all the time between the first and last sensor test on each daily time period, but only on days where there are 2 or more tests. If this is what you want, please give this formula a try: $days = days('US/Eastern') //When there is more than one test per day, finding the time between those tests as //potential downtime to be safe. //Count Sensor Tests per day $testsPerDay = $sta.aggregate(count(),$days,durationkey()) //Only include tests if more than 1x per day $repeatTests = $sta.inside($testsPerDay > 1) // Find the first test on multiple test days $FirstTestEachDay = $days.transform($w -> $repeatTests.toGroup($w).first()) // Find the last test on multiple test days $LastTestEachDay = $days.transform($w -> $repeatTests.toGroup($w).last()) // Join the first and last tests $FirstTestEachDay.join($LastTestEachDay, 24h, false)
  20. Hi Sean, Here are some thoughts: 1. First and foremost, if you are a new Seeq user and have not taken our Foundations training course, I strongly encourage you to take it. That is the best way to get started using Seeq. Click on the Training link here (https://support.seeq.com/) for more information and let me know if you need additional help accessing training. 2. Seeq has a NOAA Weather connector which enables Seeq to access and trend data from the National Weather Service API. More information here: https://support.seeq.com/kb/latest/cloud/noaa-weather-service I don't think that gets you exactly what you asked for, but it will get you some weather data access you can play around with. 3. You can import any time series data (that you can download from the NWS webpage or anywhere else) into Seeq for trending and analysis using our CSV Import tool in Seeq Workbench. More info here: https://support.seeq.com/kb/latest/cloud/import-csv-files 4. Under the Data tab in Seeq Workbench, within the Asset Trees section there is an Example asset tree with many signals which can be used for building/exploring calculations.
  21. Hello Francois, The treemap features you would like are currently not possible in Seeq Workbench. I encourage you to create a support ticket to request these features (the more customers that add a request, the more likely the features will be added). You can easily create a support ticket by going to https://support.seeq.com/, then click on "Contact Support", then choose "Analytics Help", then fill out the form and click Send. As a workaround for now, you should consider showing your yellow and red conditions in a condition table view in Seeq Workbench, which enables you to see only the assets that would be shown in yellow or red in your treemap. It also gives you the ability to see only the yellow, only the red, sort, add other calculated values for more context, etc. In my example screenshot below, I had "Medium Priority" and "High Priority" conditions I was viewing in a treemap. I switched to a condition table view, and used the Asset scaling button at the top to see all the medium and high priority capsules across all assets in my asset tree/group (the same asset tree I was using for my treemap). In the screenshot, notice I'm only seeing Areas A, G, H, and I, even though I am monitoring a total of 8 area assets. Note: to see the "Severity" column, I added a custom capsule property to the "Medium Priority" and "High Priority" conditions using Seeq Formula and the .setProperty() function, for example: $MediumPriorityCondition.setProperty('Severity','Medium Priority'), and then used the "Columns" button at the top to add the "Severity" property to the table. I hope this is helpful!
  22. Hello Juan, The requested feature has not been implemented yet, due to other development features being a higher priority. This feature is periodically discussed by our development team. If you'd like to submit a support ticket so that you are automatically notified when this feature is added in the future, that would only take a few minutes. John
  23. Hello JohnL, There is a built-in feature for scaling the notification across the assets in your asset group, with a checkbox you can select under the "Advanced" section of the "Create Notification" configuration. With "Asset" also checked under the capsule property selection at the top in the screenshot, the Asset name should be included in the notification email:
  24. Hello Vitor, There is no timeline yet for development of this feature. If you would like to submit a support ticket for this feature request, that could help increase the priority (the more customers who ask for it, the better).
  25. Hello, this sounds like a good use case for Seeq. I suggest you sign up for an upcoming Office Hours time slot: Seeq Office Hours In the Office Hours session, you can share your screen and an Analytics Engineer can assist with these questions.
×
×
  • Create New...