Hello, there is function that I can use on EXPRESSION Binding
to get 2 first row of dataset ?
For exemple, I have :
What I want to show is:
Hello, there is function that I can use on EXPRESSION Binding
to get 2 first row of dataset ?
For exemple, I have :
What I want to show is:
Not directly. The Expression Language dataset operations are limited.
You could script a transform on the data binding.
def transform(self, value, quality, timestamp):
pyDs = system.dataset.toPyDataSet(value)
headers = system.dataset.getColumnHeaders(value)
data = [pyDs[0], pyDs[1]]
return system.dataset.toDataSet(headers, data)
If I don't mention it, Phil will be along to remind me that you should put the script in the Project Library and call it using the Expression Language runScript()
function.
Thank you @Transistor I'am using VISION, I think I can't do transform script into vision
Yes, in my Integraton Toolkit module. The where() expression function, in particular.
If you just want specific row indices, like the first two rows, use idx()
in the condition, like so:
where({path.to.source.dataset}, idx() < 2)
If you actually want to check the content, like matching the 3-letter prefix on ProductCode
, you'd do something like this:
where({path.to.source.dataset}, left(it()['ProductCode'], 3) = 'BAN')
You need to add the Vision tag to your question.
That is mean if I want show 20 values of rows, I must repeat this line 20x ?
Also look at the transform() function.
Yes, using data.append()
in a for
loop.
...but you can, using a custom property for your untransformed binding and a propertyChange script to transform any new value before it's assigned to the actual property.
pyDataSet
supports slicing, so if he just wants the first 20 items, he can use pyDs[:20]
.
Or... what exactly are you filtering for? Specific data? A specific number of rows? If we know that info we can help. Your original post looked like the top 2 rows... so that was the example.
So backup and tell us the constraints for filtering the dataset.
hello @bschroeder I have found solution using idea suggested by @pascal.fragnoud and @Transistor.
Normally what I was searching is filtering somme rows of dataset instead to show all of then.
I recently installed the ingration toolkit. For functions like where() or leftJoin() how can I pass a query result to the expression? I've tried putting db.runQuery scripts in to your {path.to.source.dataset} but can't seem to get that to work. However, I've successfully used them when referencing tags that query the data, but I feel like I should be able to directly use the query in the expression...
Expressions ≠ Scripts.
If you have a query or historian binding supplying data to a component property (likely a custom property), you can reference that property in an expression binding (not a script).
If you have objects in scripts, use the scripting functions my module supplies. If you have objects in UI properties, use the expression functions my module supplies.