# Rearrange Column Order in dataset

**URL:** <https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332>\
**Category:** Ignition\
**Tags:** vision\
**Created:** [August 24, 2023, 1:46pm UTC](https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332 "2023-08-24T13:46:57Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![AJBerera](https://avatars.discourse-cdn.com/v4/letter/a/9fc29f/32.png) [@AJBerera](https://forum.inductiveautomation.com/u/AJBerera)\
**Post date:** [August 24, 2023, 1:46pm UTC](https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332/1 "2023-08-24T13:46:58Z")

</div>

I have a dataset coming from a query where it is basically a SELECT \* from varying different tables, and I can always count on my timestamp column being the same, but it is in a different order in the various tables which means sometimes its the second column in my dataset and something the nth.

I would like to take the dataset and find the timestamp column wherever it may be and fix it to always be the second column and display in a power table (vision) version 8.1.25. I am creating the ds and manipulating it in propertyChange script already so it would be great to have some code to do this.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [August 24, 2023, 1:52pm UTC](https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332/2 "2023-08-24T13:52:30Z")

</div>

The name is a bit misleading, but you can use the filter columns function to rearrange as well:

[https://docs.inductiveautomation.com/display/DOC81/system.dataset.filterColumns](https://docs.inductiveautomation.com/display/DOC81/system.dataset.filterColumns)

---

<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:** [August 24, 2023, 1:55pm UTC](https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332/3 "2023-08-24T13:55:14Z")

</div>

> [@AJBerera](#):
>
> I am creating the ds and manipulating it in propertyChange script already

This is the right place to also do the re-arranging, so you only do the dataset creation once (it isn't terribly light-weight). Share your code.

---

<div class="post-metadata">

**Author:** ![AJBerera](https://avatars.discourse-cdn.com/v4/letter/a/9fc29f/32.png) [@AJBerera](https://forum.inductiveautomation.com/u/AJBerera)\
**Post date:** [August 24, 2023, 3:13pm UTC](https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332/4 "2023-08-24T15:13:17Z")

</div>

I can't use filter columns because I don't know the column names, and they are different from table to table.

```auto
if event.propertyName == 'rawData' or event.propertyName == 'page':
	preview = event.source
	ads = event.source.rawData

	page = event.source.page
	pageRows = event.source.pageRows
	lowRange = pageRows * page
	highRange = (pageRows * page) + pageRows
	
	rowsToDelete = [i for i in range(ads.rowCount) if i not in range(lowRange, highRange)]
	ads = system.dataset.deleteRows(ads, rowsToDelete)
	ads = system.dataset.sort(ads, "TimeStamp", False)
	
	#Need to rearrange the TimeStamp column to be at the beginning
	
	preview.pageData = ads
	

```

---

<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:** [August 24, 2023, 3:20pm UTC](https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332/5 "2023-08-24T15:20:58Z")

</div>

You can build the list of new columns from the dataset's list of columns. Like so, starting with your line 14:

```auto
.....
	#Need to rearrange the TimeStamp column to be at the beginning
	colNames = list(ads.columnNames)
	# We don't care where the timestamp column currently is, we're unconditionally moving it.
	colNames.remove('TimeStamp') 
	# New columns are prior first column, timestamp column, then all the rest of the original columns
	newColumns = colNames[:1] + ['TimeStamp'] + colNames[1:]
	ads = system.dataset.filterColumns(ads, newColumns)
	
	preview.pageData = ads
.....

```

---

<div class="post-metadata">

**Author:** ![justin.brzozoski](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/justin.brzozoski/32/13452_2.png) [@justin.brzozoski](https://forum.inductiveautomation.com/u/justin.brzozoski)\
**Post date:** [August 24, 2023, 3:28pm UTC](https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332/6 "2023-08-24T15:28:07Z")

</div>

Wouldn't something like `colNames.insert(1, 'TimeStamp')` be faster than slicing and adding with `newColumns = colNames[:1] + ['TimeStamp'] + colNames[1:]`? Even if that's a wash, it's at least more readable to me.

---

<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:** [August 24, 2023, 3:29pm UTC](https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332/7 "2023-08-24T15:29:31Z")

</div>

> [@justin.brzozoski](#):
>
> colNames.insert(1,

Yeah, probably better. For some reason, I never think of this method.

---

<div class="post-metadata">

**Author:** ![pascal.fragnoud](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pascal.fragnoud/32/24728_2.png) [@pascal.fragnoud](https://forum.inductiveautomation.com/u/pascal.fragnoud)\
**Post date:** [August 24, 2023, 3:43pm UTC](https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332/8 "2023-08-24T15:43:12Z")

</div>

> [@AJBerera](#):
>
> `if i not in range(lowRange, highRange)`

Even if you end up not using this method at all (because there's a better way, as Phil showed you), python allows `low < x < hi`.

---

<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:** [August 24, 2023, 3:45pm UTC](https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332/9 "2023-08-24T15:45:39Z")

</div>

> [@pascal.fragnoud](#):
>
> not using this method at all

The code I supplied replaced just three original lines, not including the part you reference. So, still applicable.

---

<div class="post-metadata">

**Author:** ![pascal.fragnoud](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pascal.fragnoud/32/24728_2.png) [@pascal.fragnoud](https://forum.inductiveautomation.com/u/pascal.fragnoud)\
**Post date:** [August 24, 2023, 3:55pm UTC](https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332/10 "2023-08-24T15:55:27Z")

</div>

Didn't read the whole thing :X

---

<div class="post-metadata">

**Author:** ![AJBerera](https://avatars.discourse-cdn.com/v4/letter/a/9fc29f/32.png) [@AJBerera](https://forum.inductiveautomation.com/u/AJBerera)\
**Post date:** [August 24, 2023, 4:11pm UTC](https://forum.inductiveautomation.com/t/rearrange-column-order-in-dataset/78332/11 "2023-08-24T16:11:28Z")

</div>

Thanks Phil and Justin
