Jump to content

Joe Reckamp

Seeq Team
  • Posts

    127
  • Joined

  • Last visited

  • Days Won

    36

Everything posted by Joe Reckamp

  1. Hi David, You could either: (1) subtract 1 from the count as it will always have the starting value as a capsule, meaning the value will always be number of changes + 1 or (2) use $signal.tocondition().starts(), which will make the capsule only appear at the start (or specifically the time when a change is made)
  2. Hi David, You could do the following to create a capsule per each change in signal value (regardless of string or numeric): $signal.tocondition() And then you could count the capsules that are created.
  3. Hi David, The typical way that we would recommend doing this is with individual Value Searches (where you could select between the various values) and then use Composite Condition to combine those. However, you could also do this in a single formula. For example, you may do something like: ($signal > 10 and $signal < 20) or ($signal > 50 and $signal < 100) However, if you want those to be distinct capsules, the "or" operator (equivalent to "union") would combine the capsules if you had back-to-back capsules where the end of one range started another. In this case, you could use the "combinewith" operator to combine the different logics: combinewith( ($signal > 10 and $signal < 20), ($signal > 50 and $signal < 100), ($signal > 100 and $signal < 200) ) Another option would be to add some logic as to where they came from where a property (in this case named "Position") would tell you something about the capsules being formed. For example: combinewith( ($signal > 10 and $signal < 20).setproperty('Position', '10-20'), ($signal > 50 and $signal < 100).setproperty('Position', '50-100'), ($signal > 100 and $signal < 200).setproperty('Position', '100-200') )
  4. Hi Majed, If you've already identified when the peaks are above the threshold, you can create a table of those instances by using the Condition Table: https://support.seeq.com/kb/latest/on-premise/tables-charts#id-(R64)Tables&Charts-ConditionTables For the second option, one way to do this might be the following: 1. Find the duration between each of the events with the following formula: $peaks.inverse().aggregate(totalduration('h'), $peaks.inverse().removelongerthan(7d), durationkey()) Note that this will give the duration in hours and assumes that the max duration between peaks is 7 days. If you want different units or have more time between peaks, I would recommend changing those values. 2. Use the above calculation to identify the peaks that have a duration (from step 1) greater than X before or after the event (in this example, I used X = 15 hours): $peaks.touches(($duration > 15h).grow(1s)) That should result in only the peaks with durations of 15h before or after them to be identified.
  5. Hi Dayyan, I'm not sure if I'm fully understanding the question, but if you make a condition where each capsule represents the time in between seal replacements, you could then use that condition to reset the counters. To do this, you could do something like $sealreplacement.inverse().intersect(past()) Note that you'll need the $sealreplacement to be a condition so if you just have a discrete signal for when the seal is replaced, you may need a $signal.tocapsules() first. From there, you could follow the post below using the above condition as the $reset and $signal as the counter that you want to reset.
  6. Would recommend taking a look at the "join" option in Composite Condition under Identify - this will allow you to join from one condition to the next. You can see more visually in the skills explorer here under Identify Events >> Composite Conditions: https://skill-explorer.seeq.com/
  7. If they already have the property on the conditions, you could just do: combinewith($r1tr, $r2tr, $r3tr) If they don't already have the property, would recommend doing the setproperty in the same method as above: combinewith($r1tr.setproperty('Reactor', '1'), $r2tr.setproperty('Reactor', '2'), $r3tr.setproperty('Reactor', '3'))
  8. Hello, You can use the replace function in formula to do this. Alternately, a lot of customers use the manual signal option: https://support.seeq.com/kb/latest/cloud/manual-signal to just input bed height at various timestamps.
  9. Hi Michael, For CSV files, you have to change the scope on the CSV file itself rather than the items within the CSV file. It looks like for your scenario, you should have a CSV file named "Lab Cell Build Dates - Manual Upload Sheet - Cell 7 (2).csv" so if you search for that in the Data Tab and then click on the "i" for that file instead of the condition inside it, you should see the Scope option to change. Regards, Joe
  10. Hi Tyler, What I mean by a formula built on top of the item in the tree is to not create the formula in Asset Group Editor Mode, but once you have the asset group built, add the item from the tree to the display, then simply use the formula tool to make a formula referencing that item from the asset group. As long as you are creating a NEW formula and not editing the one that's in the Asset Group, it will build on top of the asset group item.
  11. Hi Tyler, Is the item that you are editing in the asset tree directly? If so, when you swap, you're swapping to new items that you haven't edited that probably just include the original $signal formula. If that's the case, you have two options: 1. Edit the formulas for each of the equivalent items (if it's an asset group, that may be easy to edit all of the items. If not, this may be tedious) 2. The easier method in my mind is to create a separate calculation on top of the item in the tree. If you use the item in the tree and then do the $signal.validvalues() in a signal pointing at the item in the tree, it will then swap and perform that same validvalues to each item in the tree when swapped. Basically, if there's an equivalently named item in the other asset tree, it will swap to that specific item rather than applying the formula you set. If you build a formula on top of the item in the tree, it will then instead swap the items in the tree and apply whatever formula you create on top of the items in the tree.
  12. Hi Jacob, You currently cannot export the table itself, but most table results you can recreate as a calculation and then export those items via OData. OData works with signals or conditions. With OData, you can use the auto-update option and then schedule the refresh rate in PowerBI and it will always grab the last X days/weeks/months/etc. of data.
  13. Hi Joseph, If you look at the SPy Documentation under "Asset Trees 1 - Introduction", you'll see this comment when working with spy.assets.tree: An optional ID column can help SPy find items from Seeq Server that don't have unique names. Because you don't have unique names, you'll likely need to add this ID column to make sure you get the correct item. You can grab the IDs from the Item Properties for each item or by doing a spy.search on the items (https://seeq.atlassian.net/wiki/spaces/KB/pages/141623511/Item+Properties)
  14. Hi KOKI, Generally for both #2 and #3, we often will bring the data in as capsules with capsule properties. It ultimately depends on how your system reports it, but typically the data is often reported as a time series of when the test is run (e.g. when the material property is recorded or quality data is run) and/or when the material is used (e.g. when you add a material to the batch, it will record what lot number you used and how much). Obviously it depends a bit on what and when your data is recorded, but Seeq has a number of tools to move the timeseries to align with when you want them as long as there is some logic that we can attach to (such as X batch ID had Y material number, which then had Z property value. There's some examples of this time alignment available at the article below - you specifically may want to look at #4:
  15. Hi Baishun, Do the capsules already have both properties or is the mergeproperties bringing the two properties together? Your formula seems to work in an example I've made so you may want to split up the different parts of the formula (e.g. output the results before the transform to ensure that looks as you'd expect).
  16. Hi Jason, I assume you have a Batch ID tag for each piece of equipment that the batch may go through? And that you'd like to find which assets have seen a particular batch ID? You could set up calculations that would find all Batch IDs for each asset by doing a $signal.toCondition() formula on the batch ID tags. That will create a capsule for each batch ID for each asset, which could then be filtered to the Batch ID of interest to see which assets have that Batch ID value in a given time window.
  17. Hi Francesco, When you use a calculation in a spy.pull, the calculation string needs to be something you can do in Seeq Formula and it can only reference the individual item being pulled. Based on this, if you look in the formula documentation for totalized, you can see that there's an example similar to your formula, but it is actually: $signal.totalized($capsule) Seeq doesn't know that you want the start and end to be the $capsule so you need to tell it that. For example, changing to this calculation instead should work: $signal.totalized(capsule('2023-06-06T10:00Z', '2023-06-07T10:00Z'))
  18. Hi Ruby, You'll need to add a .removelongerthan() before the .transform. I don't know how long your $r could possibly be (+30 days for the move), but I'd guess something like .removelongerthan(90d) would be more than sufficient and could probably be even shorter.
  19. Hi Ruby, Here's an example of the transform method: $step.move(-30d,0) .transform($capsule -> { $capEnd = $capsule.endKey() capsule($capEnd-$durationsignal.valueAt($capEnd), $capEnd) }) Some notes about this: You can only make a capsule that's within the capsule that goes into the transform. That's why I started with the .move(-30d,0). Basically what I'm doing there is saying I'd like to keep the end of the capsule (because that's what your new capsule will be based off of) and in worst case scenario, the capsule would be 30 days long so I move it 30 days to start. Adjust this as necessary to match your use case. Then inside the transform I'm saying make a new capsule that ends where my previous capsule ended and starts the amount of time of the $durationsignal at the point where my original capsule ended before the end of the capsule. Hopefully this makes sense, but let me know if you have any questions or difficulties with implementing this.
  20. Hi nurhazx, There is not currently a method of displaying the value above the bars. We often see users combine the bar chart with a table that shows the values in Organizer so that you have the two together.
  21. Hi Jacob, You can do this without Data Lab and Python, but it would be manual to either (1) build a condition for each signal or (2) string together all the signals in a single formula. For example, the formula may look like this: ($temperature1.derivative()>10).removeshorterthan(1h) or ($temperature2.derivative()>10).removeshorterthan(1h) ... or ($temperatureN.derivative()>10).removeshorterthan(1h) I used derivative in the above, but you could also use runningdelta or equivalent depending on exactly how you want to define your rate of change. In Data Lab, you could automate the process by spy.search-ing for your list of temperature tags, and then either combining them into a single formula as above or creating the same formula for each tag, then using spy.push to create it in Seeq Workbench. If you're less fluent with computers, I'd probably recommend the non-Data Lab manual approach, unless you have a colleague that might be more fluent that could help you.
  22. Hi David, The count should be accurate in the Tables and Charts view. Are you using the "ungridded original timestamps" option in the export to Excel? If not, it could be exporting gridded samples, which could result in interpolated values coming out in your Excel export that aren't actually raw data points in your signal.
  23. There's a periods() function in formula where you can do however long of time frames you want. For example periods(12h) or periods(6h). Or you can get even more complex if you (for example) want to do 12 hour time blocks, but every hour. Then from there, you can just average the signal during those time periods using Signal from Condition.
  24. It sounds like you want data when the condition is present, but no data when it isn't present. In that case, I would use $signal.within($condition)
  25. Hi Kate, The easiest way is to rename the tag by making a Formula that is just a formula of: $signal That way it will just reference your original tag, but you can give it whatever name you would like.
×
×
  • Create New...