Jump to content

All Activity

This stream auto-updates

  1. Today
  2. Hi Micah, you can do this with a transform: $inputB.transform($capsule -> { $capsulesOfInputA = $inputA.removeLongerThan(1wk).toGroup($capsule) $start = $capsulesOfInputA.first().startKey() $end = $capsulesOfInputA.last().endKey() capsule(max($start, $capsule.startKey()), min($end, $capsule.endKey())) }) As the capsules for the output can only be as long as the capsules of Input B, I am using max() and min() to reduce the capsule length if capsules of Input A overlap with the beginning or end of a capsule of Input B (see first result). Regards, Thorsten
  3. Hi, Is it possible to restrict the usage of the 'Send Support Request' button in the GUI? Would be nice if we could lock it down to specific users, or worst case just disable it altogether. Cheers, Justin
  4. Yesterday
  5. Hi All, I'm trying to merge/join a group of capsules when they occur within another capsule/condition. For example, I would like to merge capsule A when they occur within capsule B. C is the desired output. Input A: |--A--| |---A---| |--A--| |-A-| |---A---| |--A--| |---A---| Input B: |-------------B-----------------| |----------------B-----------------| Output: |-------------C-------------| |---------------C-------------| It seems like it should be relatively simple but I can't figure out how to achieve this. Any help is appreciated!
  6. Last week
  7. Hello Kemi, Thank you for your question. This chart can be created as follows; 1. Calculate the moving range in the formula tool; abs($signal.runningDelta()) 2. Create the monthly condition using Identify > Periodic Condition tool and select a monthly duration. 3. Use Quantify > Signal from Condition tool to find the average moving range over each month. This is “CL” as shown in the video. 4. In the formula tool, calculate the UCL parameter as follows 3.268*$average_movingrange Alternatively, create a new Signal from Condition to calculate the standard deviation of the moving average, and in formula use the following; 3*$stddev_movingrange 5. Add the signals to one lane and align their y-axis. We also have a very comprehensive blog post on creating a Control Chart and applying SPC run rules which may be of interest to you.
  8. Hello! Does anyone know how to create an individual moving range chart or graph in Seeq? This is the video I referenced create one in excel.
  9. Maren, I recommend trying to avoid setting the problem up in a way that it depends on an initial value if you can. Initial values lead to excessive calculations because it will need to calculate from the initial value to your current window. If finding the instantaneous residence time and averaging that over an hour is an option, it would be much more performant even when including mass weighted averaging. If you still want to go down the initial value route you will want to look at the reduce() function in formula. Regards, Teddy
  10. Hi Nurhaz, You need to look for the particular folder in the "Shared" and ensure you have the necessary access. Regards, Sharlinda
  11. Depending on the details of the use case, adding properties from one condition to another (during a join or some type of combination of the 2 conditions) can be achieved with at least 2 approaches: The mergeProperties() Formula function, introduced in Seeq R56 can be used. You can look up example uses of mergeProperties() in Seeq Formula's documentation. Also note that mergeProperties() has functionality for quantitatively merging numerical property values (max, average, etc.) if the 2 conditions have conflicting values for the same property. The setProperty() Formula function can be used to add property values from one condition to another. It may be necessary to use getProperty() in conjunction with setProperty(): please see the highlighted sections in the screenshot below, which is included here only to show an example of using setProperty() inside of a transform(). Another alternative with setProperty(): you may also consider converting a property value (to be retained from the second condition) to a signal with $condition.toSignal(propertyName), and then use the signal result with setProperty(). You can see examples of adding a signal aggregation as a capsule property in Seeq's Formula documentation for setProperty(). I think one of these approaches should help with your use case.
  12. A question came up recently that I thought would be of wider interest: how can I prevent interpolation across batch/capsule boundaries? In batch processes, lab samples are often taken periodically throughout the course of a batch. When viewing these samples in Seeq, you may encounter times when samples are interpolating between batches rather than just within a batch. In the image below, the periods highlighted in yellow correspond to this unwanted interpolation. The following formula is one way of preventing this interpolation. $signal corresponds to your signal of interest and $condition corresponds to your batches you want to prevent interpolation across. combineWith( $signal, Scalar.Invalid.toSignal().aggregate(startValue(), $condition.removeLongerThan(40h), startKey()) ) This results in the following signal that has our desired behavior:
  13. The above examples were helpful to select the capsule of A when there are multiple A capsules intersecting with B: A + first B after A: $md = 10d $a.join($b, $md, false) A when first B starts before end of A: $nodata = '2000-01-01T00:00:00Z' $bafa.removeLongerThan($md).transform($capsule -> $a.removeLongerThan($md).toGroup($capsule, CAPSULEBOUNDARY.INTERSECT) .pick(1, // if there are multiple capsules, grab the first capsule($nodata, $nodata)) // otherwise a default capsule ) B could be offline samples of the A process. @John Cox suppose B has properties. How can they be added to (other properties of) A when first B starts before end of A ?
  14. Hi, I am trying to move folder from "My folder" to "Shared" but it does not work. Anyone could help me with this problem? Thanks
  15. Glad to help, Pat. This is expected behavior for Datafiles that are locally scoped. If you're ok with making the Datafile and associated Signals globally scoped, you can open the Item Properties for the Datafile and set the scope to global; note that setting the scope to global cannot be undone. Once the Datafile is global, workbook duplication should work as expected.
  16. Thanks James, that is the answer. I duplicated the workbook and got the Error Report. I assume this always happens when you have a CSV import?
  17. Was this a duplicated analysis? If so, I suspect that the IDs you're seeing are associated to items that couldn't be cloned successfully. If this is the case, you should find a journal in the (new) first worksheet of the cloned analysis, which will list items that couldn't be cloned successfully for some reason. Often this has to do with permissions. These items are created in the cloned analysis, but they're assigned placeholder IDs that are serial numbers preceded by an appropriate number of 0s to make a GUID. If that's what happened here, examining the journal on the first worksheet of the analysis should provide clues as to what needs to be fixed before a subsequent attempt at duplication.
  18. Earlier
  19. I have items imported from a CSV, and they show up in Workbench and I can create signals from Value Search. However, if I try to use any of the item in a formula it says The item with ID 00000000-0000-0000-0000-000000000276 could not be found
  20. It is better to correlate the calculation variables with the stored signals by using the ID -- the name of the variable can be anything, so it is not a reliable link between the two.
  21. That's great! Thanks, Mark. I wanted to start writing a formula using Stored Signals in Data Lab. In this case, I will get the following: I tried to write a function for converting "Name" to "Variable Name": from re import split def create_formula_variable_name(names): formula_name = [] for name_i in names: name_i_lower = name_i.lower() name_i_list = split("_| | ", name_i_lower) f_name = '$' cnt = 0 if len(name_i_list) > 1: for i in name_i_list: f_name += i[0] else: if len(name_i_list[0]) > 4: f_name += name_i_list[0][0] else: f_name += name_i_list[0] formula_name.append(f_name) return formula_name However, this is not a perfect solution.
  22. Hi Mohammad, When you include the "all_properties=True" argument in spy.search(), you will receive a "Formula Parameters" column that has the variables as a list of strings in the form "variable_name=item_id" like so: To get exactly the DataFrame you're asking for in your original post, you can then use the following DataFrame manipulation code and another call to spy.search(): variables_df = pd.DataFrame([{'Variable Name': f"${fp.split('=')[0]}", 'ID': fp.split('=')[1]} for fp in search_df.iloc[0]['Formula Parameters']]) merged_df = spy.search(variables_df) merged_df = merged_df[['ID', 'Name', 'Type']] merged_df = merged_df.merge(variables_df, on='ID') merged_df It'll look like this:
  23. Hi, Can users access the signal's variable name in the data lab? It would be great to have it as a column when calling spy.search(worksheet_url ...). For example:
  24. Hi - we have some solutions where the datalab pushes html / pictures to an Organizer topic. Typically the push happens every 15 minutes. Two requests 1) This functionality may exist but can an organizer page auto-refresh on a frequency such as if someone was looking at 1 page it would update without needing to manually refresh the browser. 2) Could a view be shared so that when someone is in this view there is a rotation of selected screens e.g. rotating every 30seconds (configurable by the viewer or creator). e.g. This could enable a view with e.g. 3 screens relevant to a particular Manufactuing area to be displayed in that area on a common screen. The operators in the area would see the 3 displays rotating through. Thanks in advance
  25. Thank you @Allison Buenemann. Method 2 worked great for monitoring my compressor station glycol regen unit temperatures.
  26. The third example in your documentation image seems to be the equivalent... It's pretty evident why .setProperty() was enhanced! Until your server is upgraded, you'll likely have to use that $condition.transform() method to add signal-referenced, statistical property values to capsules.
  27. Note that the below statement, $condition.keep(...) OR $condition.keep(...), will no longer maintain capsule properties as of version R57. Capsule properties persisting when using an OR statement was actually unintended behavior, i.e. a bug. The behavior after R57 is now aligned with expected behavior. An OR statement in Seeq is equivalent to the union() function. In the search documentation, you can see that it explicitly states "Capsule properties are not preserved in the output capsules“, even in versions before R57. See screenshots from R55 and R56 formula documentation demonstrating this. There are many other methods available to achieve similar behavior, such as mergeProperties() or using combineWith(). See example below when using an OR vs CombineWith() in R57.
  28. Hello! Checking the version was both very obvious and very smart. Up to this point I had assumed my organization was using the latest version, lol. I will inquire about an upgrade, but my organization is fairly large and consequently slow to change. I'll try to find some V50 examples and make another attempt. Thanks again!
  1. Load more activity
  • Create New...