# Automation Professionals' Integration Toolkit Module

**URL:** <https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934>\
**Category:** 3rd Party Modules\
**Tags:** ignition83, scripting, ignition81, perspective, vision\
**Created:** [June 13, 2023, 12:42am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934 "2023-06-13T00:42:35Z")\
**Posts on this page:** 1\
**Showing post:** 42

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [July 20, 2023, 1:33am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/42 "2023-07-20T01:33:50Z")

</div>

I had some dead time today. Party!

Anyways, several new functions:

- `alias()` wraps a dataset with a string prefix for each column name

- `nanoTime()` just calls java's `System.nanoTime()` and returns the timestamp.

- `crossJoin()` does what you'd think with two datasets.

- `innerJoin()` takes two datasets, plus pairs of iterator expressions to match up.

- `leftJoin()` as for `innerJoin()`, but includes a null right row if a row on the left has no match on the right.

For Ignition v8.1+: ~~v2.0.6.232010111~~

---

_[View the full topic](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934)._
