Jump to content

Joe Reckamp

Seeq Team
  • Posts

  • Joined

  • Last visited

  • Days Won


Everything posted by Joe Reckamp

  1. 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.
  2. 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.
  3. 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.
  4. 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)
  5. 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:
  6. 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).
  7. 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.
  8. 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'))
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. 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.
  14. 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.
  15. 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)
  16. 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.
  17. Hi Kemi, Using the derivative can be very helpful to find peaks in your data. It appears your data seems to increase without too much noise (in terms of small peaks on the way towards the main peak) so I doubt you would need too much data cleansing first. So you may be able to simply do a derivative by using the Formula tool: $signal.derivative() That will then show a positive value when you are increasing, a negative value when you are decreasing, which means that the point at which it goes from positive through zero to negative would be the high point of your peak. Therefore, I would then find when the derivative is positive (> 0) using a Value Search. You'll also want to make a Periodic Condition for "Daily" that represents when you want your days to start and end. From there, you should be able to use Signal from Condition to count the ends (remembering that the end of the positive section is when the peak occurs) each day.
  18. You should be able to do a Formula using toCondition to turn that into capsules: $signal.toCondition('Batch ID')
  19. What does your Batch Data look like? Do you have a Batch ID that tells you what batch is currently running?
  20. Hi Matia, If you have already made a capsule for the batch, you can simply use the timesince function in Formula to make a counter for the current batch duration: timeSince($condition, 1h)
  21. Hi Matia, Can you clarify a bit as to exactly what you are looking for? For example, when Batch 2 is running, are you wanting to see the remaining time for Batch 2 assuming it would operate at the same duration as Batch 1 (e.g. (batch 1 duration) - (running time of batch 2))? Or are you just wanting to see the previous batch's duration? Or something else?
  22. Hi Pat, Can you try making the spy.search line include all properties so that hopefully it brings in the maximum duration for you: RampCond_Tags = spy.search({'Name': '*_RampCond'}, all_properties=True)
  23. Hi Pat, Did you spy.push the dataframe back to Seeq after the Data Lab screenshots you show here? You set the Archived value in Data Lab, but it doesn't actually occur in Seeq until you push that metadata back to Seeq. So you'll want to add a line of spy.push(metadata=RampCond_Tags)
  24. Here's a quick example of setting the width to 5 for all signals on the display for a single worksheet:
  25. Hi Surendra, You could modify the widths programmatically in Seeq Data Lab by looping through each worksheet and changing the display items dataframe in python, but no way currently to do this across multiple worksheets directly in Workbench.
  • Create New...