Jump to content

Kristopher Wiggins

Seeq Team
  • Posts

  • Joined

  • Last visited

  • Days Won


Kristopher Wiggins last won the day on May 11

Kristopher Wiggins had the most liked content!

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Kristopher Wiggins's Achievements


Explorer (4/14)

  • Dedicated Rare
  • Reacting Well
  • Conversation Starter
  • First Post
  • Collaborator Rare

Recent Badges



  1. With spy.assets.Tree() there isn't a direct route to reference attributes belonging to child attributes in calculations. Instead you can create a rollup that will create an attribute based on the child attributes, and then use that roll-up attribute as an input into your calculations. For example in the code below, we need to create roll-up attributes that reference the child attributes. In this case I'm looking at a particular Area's but you can refine the roll_up_parameters to find the item you're looking for. Once the roll-up attribute is created you can then include it in other calculations at that level of the tree, as is done in the last tree insertion step. test.insert(name='Cooling Tower Temp', roll_up_statistic='Average', roll_up_parameters='Area B >> Temperature', parent='Cooling Tower 1') test.insert(name='Cooling Tower Temp', roll_up_statistic='Average', roll_up_parameters='Area D >> Temperature', parent='Cooling Tower 2') test.insert(name='Doing Something to Temperature', formula='$temp*100', formula_parameters={'$temp':'Cooling Tower Temp'}, parent='Cooling Tower ?')
  2. Correct the statistic will mirror what's seen in the GUI. To find out which ones are available, I ran the code mentioned above with an incorrect statistic and SPy returned an error with the possible options. Note that just like in the GUI only certain stats can be used for signals and condition Measured Items.
  3. I'd recommend filing a ticket by emailing [email protected] so we can schedule a meeting to troubleshoot. You could also sign up for an Office Hours session.
  4. Typically you'd see a 0000... ID when you have an error in your duplicated workbook. There are probably items in the original workbook that you don't have access to and can't use in your duplicate. Are you the owner of the original workbook or are you able to contact that person so they can look over what you don't have access to
  5. When generating a prediction in Seeq, some users often come across the error The number of target samples is not sufficient to conduct a regression. As the error suggests, there isn't enough data to perform the prediction but it can be difficult to determine the particular cause, especially when there are numerous inputs into the prediction. The steps below can be used to troubleshoot why a prediction is receiving this error and help suggest steps to resolve it. Step 1: Confirm data in your signals Seeq's prediction tool requires there to be interpolatable data at the timestamps of the target signal during the training window at least N+1 times, where N is the number of inputs into the model. These inputs aren't necessarily the number of signals, but the number of terms in the model (so for a polynomial scale, N = 2 * number of signals). In the case of a linear model that has 3 inputs, there needs to be at least 4 times when all of the inputs have data at the target's timestamps. If one of the signals never has data then the above requirement is not possible and that signal should be removed. If there is data in every signal, the next thing to look at if there is data within the training window. Seeq's Prediction tool by default accepts a time range as the training window but this can be further refined by limiting your training window to a condition. To check if the requirement is still met, the formula below can be used, where each $signal_i is a signal used in the model, $conditon is the training window condition and $target is the target of the model. ($signal_1 * $signal_2 ... * $signal_N).within($condition).resample($target).validValues() You can then match your display range with the time range chosen in the prediction and check the count of the resulting formula. This count either be determined using a Simple Scorecard Metric or in the Details Pane to check if it meets the requirement Step 2: Evaluate the Prediction If Step 1 suggests that all of your signals has data and should meet the necessary number of samples, then there could be an issue with the Prediction that prevents the requirement from being met. Some examples of this are Logarithmic Scale and Inputs with Zero or Negative Data: Its mathematically impossible to take a logarithm of zero or negative number so signals with data like this can't have these samples considered. To eliminate data like this from the inputs, formulas like $signal.within($signal > 0) can be used in conjunction with the previously mentioned formula to get an accurate count. Divide By Zero: There are cases when the prediction model can evaluate and fail to include samples due to divide by zero errors. To check if this is the problem, try using Principle Component Regression (PCR) instead of the standard Ordinary Least Squares (OLS) that's used by default in the Prediction tool.
  6. Hey Pat, just confirming that this fix resolved your original problem?
  7. The Users.AuthenticationFailures.Meter only provides as system wide view of how many users login attempts fail. To determine causes of these failures, you'll need to go into the logs as you mentioned. The particular log to look at varies based on your authentication mechanism though. Feel free to send an email to [email protected] and we can dive into the details of how your Seeq server is configured to determine which log file you'll need to look at.
  8. Vibration data is a common ask to be brought into Seeq. It all depends on where the data is stored; if its stored in one of Seeq's supported connections then yes. If its stored as CSV/Excel files, then yes they can be imported via our CSV Import Tool. If neither of the above, we'd need to look into the details of this vibration data to confirm/deny if it possible.
  9. Hi Andrew, Seeq has scripts that would move this condition beneath particular elements of asset trees. If you're still interested in having this done, feel free to email [email protected] and we can provide and customize the script to address your particular needs.
  10. Hi Sivaji, in some cases you can cut this workflow down to two steps. In the spy.pull command, there is an option to include a calculation parameter that would apply a Seeq formula on the pulled data, allowing you to bypass Step 2 of pushing a formula calculation. This only works for calculations with a single input (think taking a weekly average or apply a filter) so if you're looking to make more complex formulas, you'll still need to follow the workflow you mentioned above
  11. I agree Hunter. Please send an email to [email protected] if you're interested in being notified if this feature is incorporated into the product.
  12. Good ideas Eric. Another ask our users have had was to be able to have a default datasource selected since they only ever work with that one. If you'd like to be notified about this suggestion or either of yours feel free to send an email to suppo[email protected] so we can link your request to our ticket system.
  13. Thanks for the feedback Lee. As you've noted Seeq currently doesn't differentiate these different units primarily because standard varies based on process conditions. We're working on ways to improve our unit handling, so if you want to be notified about updates, feel free to send a email to [email protected] and we'll log a ticket for you.
  14. Hi Hunter, This is a common ask from our users and we have a ticket in our system tracking it. If you'd like to be notified when the feature is included in a version of Seeq, please email [email protected] and we'll link your request so you'll get notified. Regards, Kris
  15. Users of OSIsoft Asset Framework often want to filter elements and attributes based on the AF Templates they were built on. At this time though, the spy.search command in Seeq Data Lab only filters based on the properties Type, Name, Description, Path, Asset, Datasource Class, Datasource ID, Datasource Name, Data ID, Cache Enabled, and Scoped To. This post discusses a way in which we can still filter elements and/or attributes based on AF Template. Step 1: Retrieve all elements in the AF Database The code below will return all assets in an AF Database that are based on a AF Template whose name contains Location. asset_search = spy.search({"Path":"Example-AF", "Type":"Asset"}, all_properties=True) #Make sure to include all properties since this will also return the AF Template asset_search.dropna(subset=['Template'], inplace=True) # Remove assets not based on a template since we can't filter with NaN values asset_search_location = asset_search[asset_search['Template'].str.contains('Location')] # Apply filter to only consider Location AF Template assets Step 2: Find all relevant attributes This code will retrieve the desired attributes. Note wildcards and regular expression can be used to find multiple attributes. signal_search = spy.search({"Path":"Example-AF", "Type":"Signal", "Name":"Compressor Power"}) #Find desired attributes Step 3: Filter attributes based on if they come from an element from the desired AF template Last step cross references the signals returned with the desired elements. This is done by looking at their paths. # Define a function to recreate paths, items directly beneath the database asset don't have a Path def path_merger(row): row = row.dropna() return ' >> '.join(row) asset_search_location['Full Path'] = asset_search_location[['Path', 'Asset', 'Name']].apply(lambda row: path_merger(row),axis=1) # Create path for the asset that includes its name signal_search['Parent Path'] = signal_search[['Path', 'Asset']].apply(lambda row: path_merger(row),axis=1) # Create path for the parents of the signals signal_search_location = signal_search[signal_search['Parent Path'].isin((asset_search_location['Full Path']))] # Cross reference parent path in signals with full paths in assets to see if these signals are children of the desired elements
  • Create New...