<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wikido.isoftdata.com//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jwoody</id>
	<title>ISoft Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wikido.isoftdata.com//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jwoody"/>
	<link rel="alternate" type="text/html" href="https://wikido.isoftdata.com//index.php?title=Special:Contributions/Jwoody"/>
	<updated>2026-04-28T01:12:39Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.2</generator>
	<entry>
		<id>https://wikido.isoftdata.com//index.php?title=Presage/User_Guide/ITrackLX_Mobile_App&amp;diff=14862</id>
		<title>Presage/User Guide/ITrackLX Mobile App</title>
		<link rel="alternate" type="text/html" href="https://wikido.isoftdata.com//index.php?title=Presage/User_Guide/ITrackLX_Mobile_App&amp;diff=14862"/>
		<updated>2025-04-09T13:54:43Z</updated>

		<summary type="html">&lt;p&gt;Jwoody: /* Install the ITrack Mobile App on the iPod. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==How to insert the iPod in the Linea Pro scanner.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Presageattachipodtoscanner.png|thumb|center|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Install the ITrack Mobile App on the iPod.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;#039;&amp;#039;&amp;#039;App Store&amp;#039;&amp;#039;&amp;#039; icon on the iPod.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Type in &amp;#039;&amp;#039;isoftdata&amp;#039;&amp;#039;, and swipe from right to left until the following app shows up: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp.jpg|thumb|center|300px]]&lt;br /&gt;
 *&amp;#039;&amp;#039;The button may look different.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Click on the cloud button to install the app.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following icon pops-up.  Click &amp;#039;&amp;#039;&amp;#039;Use Existing Apple ID&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp1.jpg|thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enter the Apple ID and password.  (A Presage representative will provide you with this information.  It will be used across all plants in your companies, unless requested otherwise.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp2.jpg|thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Home Screen, find the ITrackLX Mobile app icon and click on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp4.jpg|thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enter the Server URL provided by the Presage representative.&lt;br /&gt;
Presage URLs:&lt;br /&gt;
https://COMPANY.presageanalytics.com/scanner&lt;br /&gt;
&lt;br /&gt;
Most presage deployments still have the old subdomain url&amp;#039;s as well:&lt;br /&gt;
COMPANY-scan.presageanalytics.com&lt;br /&gt;
New deployments won&amp;#039;t have them, and the existing ones will start getting redirected to the subdirectory url&amp;#039;s as we update them&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp3.jpg|thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Login with Presage username and password and click &amp;#039;&amp;#039;&amp;#039;Log in!&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Perform Sample==&lt;br /&gt;
&lt;br /&gt;
To time-stamp when a sample was taken, click on the first button &amp;#039;&amp;#039;&amp;#039;Perform Sample&amp;#039;&amp;#039;&amp;#039;.  &lt;br /&gt;
&lt;br /&gt;
Press the button on the right side of the Linea Pro. &lt;br /&gt;
&lt;br /&gt;
Place the red ray on the barcode.  Hold until a sound comes out validating that the barcode was read.&lt;br /&gt;
&lt;br /&gt;
A notification will appear confirming that the sample was marked.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Add Image&amp;#039;&amp;#039;&amp;#039; to attach an image to the sample.&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039; to go back to the main menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The above steps will automatically update the work order in Presage.&lt;br /&gt;
&lt;br /&gt;
1) The &amp;#039;&amp;#039;Status&amp;#039;&amp;#039; will change from &amp;#039;&amp;#039;Open&amp;#039;&amp;#039; to &amp;#039;&amp;#039;Sampled&amp;#039;&amp;#039;.&lt;br /&gt;
2) &amp;#039;&amp;#039;Performed On&amp;#039;&amp;#039; will be filled with the scan date and time.&lt;br /&gt;
3) &amp;#039;&amp;#039;Performed By&amp;#039;&amp;#039; will be filled with the user who logged in to the mobile app.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Incubate Sample==&lt;br /&gt;
&lt;br /&gt;
To time-stamp when a test is going in and out of the incubator, click on the second button &amp;#039;&amp;#039;&amp;#039;Incubate Sample&amp;#039;&amp;#039;&amp;#039;.  &lt;br /&gt;
&lt;br /&gt;
Press the button on the right side of the Linea Pro. &lt;br /&gt;
&lt;br /&gt;
Place the red ray on the barcode.  Hold until a sound comes out validating that the barcode was read.&lt;br /&gt;
&lt;br /&gt;
A notification will appear confirming that the sample was marked.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Add Image&amp;#039;&amp;#039;&amp;#039; to attach an image to the sample.&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039; to go back to the main menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The above steps will automatically update the work order in Presage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) &amp;#039;&amp;#039;Testing Began&amp;#039;&amp;#039; will be filled with the date and time the barcode was scanned the first time.&lt;br /&gt;
2) &amp;#039;&amp;#039;Testing Ended&amp;#039;&amp;#039; will be filled with the date and time the barcode was scanned the second time.&lt;br /&gt;
3) &amp;#039;&amp;#039;Tested By&amp;#039;&amp;#039; will be filled with the user who logged in to the mobile app.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Record Analysis==&lt;br /&gt;
&lt;br /&gt;
To enter the result for a sample, click on the third button &amp;#039;&amp;#039;&amp;#039;Record Analysis&amp;#039;&amp;#039;&amp;#039;.  &lt;br /&gt;
&lt;br /&gt;
Press the button on the right side of the Linea Pro. &lt;br /&gt;
&lt;br /&gt;
Place the red ray on the barcode.  Hold until it beeps and sample appears on the screen.&lt;br /&gt;
&lt;br /&gt;
All the options for the sample will show up.  Select or type in the results.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039; to save and go back to the main menu. &lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Cancel&amp;#039;&amp;#039;&amp;#039; to delete changes and go back to the main menu.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:PresageAddImagetomobile.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The above steps will automatically update the work order in Presage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is a setting in the software which turn on automatic investigation creation.  When an out of spec result is entered, the mobile app will prompt for an initiation of an investigation sample. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Investigationmobile.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For steps on how to turn on this setting, click [[How to turn on the auto-investigation creation feature.]]&lt;br /&gt;
&lt;br /&gt;
==Work Orders==&lt;br /&gt;
&lt;br /&gt;
This option opens a list of all open work orders.&lt;br /&gt;
&lt;br /&gt;
[[File:PresageScannerOpenworkorders.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Open and edit a work order.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Work Order&amp;#039;&amp;#039;&amp;#039; in the &amp;#039;&amp;#039;Main Menu&amp;#039;&amp;#039;.  If you have a work order barcode, go ahead and scan that now to open the work order.  If not, click &amp;#039;&amp;#039;&amp;#039;Menu&amp;#039;&amp;#039;&amp;#039; &amp;gt;&amp;gt; &amp;#039;&amp;#039;&amp;#039;Manual input: Work Order&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To create a new work order, click &amp;#039;&amp;#039;&amp;#039;Menu&amp;#039;&amp;#039;&amp;#039; &amp;gt;&amp;gt; &amp;#039;&amp;#039;&amp;#039;New Work Order&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Click on the link below to watch a VIDEO TUTORIALS for the Work Order screen.&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=kCcdj8-yK9k/ Create a New Work Order]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=-XOWb98dFRM/ Find an Existing Work Order]&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
&lt;br /&gt;
For the laser to be on at all times (instead of having to click on the button to bring up the laser), on the mobile setting, tap on ITrack LX then turn on the &amp;#039;&amp;#039;Always On&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Alwaysonsetting.jpg|center]]&lt;/div&gt;</summary>
		<author><name>Jwoody</name></author>
	</entry>
	<entry>
		<id>https://wikido.isoftdata.com//index.php?title=Presage/User_Guide/ITrackLX_Mobile_App&amp;diff=14585</id>
		<title>Presage/User Guide/ITrackLX Mobile App</title>
		<link rel="alternate" type="text/html" href="https://wikido.isoftdata.com//index.php?title=Presage/User_Guide/ITrackLX_Mobile_App&amp;diff=14585"/>
		<updated>2024-09-06T14:12:28Z</updated>

		<summary type="html">&lt;p&gt;Jwoody: /* Install the ITrack Mobile App on the iPod. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==How to insert the iPod in the Linea Pro scanner.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Presageattachipodtoscanner.png|thumb|center|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Install the ITrack Mobile App on the iPod.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;#039;&amp;#039;&amp;#039;App Store&amp;#039;&amp;#039;&amp;#039; icon on the iPod.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Type in &amp;#039;&amp;#039;isoftdata&amp;#039;&amp;#039;, and swipe from right to left until the following app shows up: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp.jpg|thumb|center|300px]]&lt;br /&gt;
 *&amp;#039;&amp;#039;The button may look different.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Click on the cloud button to install the app.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following icon pops-up.  Click &amp;#039;&amp;#039;&amp;#039;Use Existing Apple ID&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp1.jpg|thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enter the Apple ID and password.  (A Presage representative will provide you with this information.  It will be used across all plants in your companies, unless requested otherwise.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp2.jpg|thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Home Screen, find the ITrackLX Mobile app icon and click on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp4.jpg|thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enter the Server URL provided by the Presage representative.&lt;br /&gt;
Presage URLs:&lt;br /&gt;
COMPANY.presageanalytics.com/scanner&lt;br /&gt;
&lt;br /&gt;
Most presage deployments still have the old subdomain url&amp;#039;s as well:&lt;br /&gt;
COMPANY-scan.presageanalytics.com&lt;br /&gt;
New deployments won&amp;#039;t have them, and the existing ones will start getting redirected to the subdirectory url&amp;#039;s as we update them&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp3.jpg|thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Login with Presage username and password and click &amp;#039;&amp;#039;&amp;#039;Log in!&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Perform Sample==&lt;br /&gt;
&lt;br /&gt;
To time-stamp when a sample was taken, click on the first button &amp;#039;&amp;#039;&amp;#039;Perform Sample&amp;#039;&amp;#039;&amp;#039;.  &lt;br /&gt;
&lt;br /&gt;
Press the button on the right side of the Linea Pro. &lt;br /&gt;
&lt;br /&gt;
Place the red ray on the barcode.  Hold until a sound comes out validating that the barcode was read.&lt;br /&gt;
&lt;br /&gt;
A notification will appear confirming that the sample was marked.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Add Image&amp;#039;&amp;#039;&amp;#039; to attach an image to the sample.&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039; to go back to the main menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The above steps will automatically update the work order in Presage.&lt;br /&gt;
&lt;br /&gt;
1) The &amp;#039;&amp;#039;Status&amp;#039;&amp;#039; will change from &amp;#039;&amp;#039;Open&amp;#039;&amp;#039; to &amp;#039;&amp;#039;Sampled&amp;#039;&amp;#039;.&lt;br /&gt;
2) &amp;#039;&amp;#039;Performed On&amp;#039;&amp;#039; will be filled with the scan date and time.&lt;br /&gt;
3) &amp;#039;&amp;#039;Performed By&amp;#039;&amp;#039; will be filled with the user who logged in to the mobile app.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Incubate Sample==&lt;br /&gt;
&lt;br /&gt;
To time-stamp when a test is going in and out of the incubator, click on the second button &amp;#039;&amp;#039;&amp;#039;Incubate Sample&amp;#039;&amp;#039;&amp;#039;.  &lt;br /&gt;
&lt;br /&gt;
Press the button on the right side of the Linea Pro. &lt;br /&gt;
&lt;br /&gt;
Place the red ray on the barcode.  Hold until a sound comes out validating that the barcode was read.&lt;br /&gt;
&lt;br /&gt;
A notification will appear confirming that the sample was marked.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Add Image&amp;#039;&amp;#039;&amp;#039; to attach an image to the sample.&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039; to go back to the main menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The above steps will automatically update the work order in Presage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) &amp;#039;&amp;#039;Testing Began&amp;#039;&amp;#039; will be filled with the date and time the barcode was scanned the first time.&lt;br /&gt;
2) &amp;#039;&amp;#039;Testing Ended&amp;#039;&amp;#039; will be filled with the date and time the barcode was scanned the second time.&lt;br /&gt;
3) &amp;#039;&amp;#039;Tested By&amp;#039;&amp;#039; will be filled with the user who logged in to the mobile app.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Record Analysis==&lt;br /&gt;
&lt;br /&gt;
To enter the result for a sample, click on the third button &amp;#039;&amp;#039;&amp;#039;Record Analysis&amp;#039;&amp;#039;&amp;#039;.  &lt;br /&gt;
&lt;br /&gt;
Press the button on the right side of the Linea Pro. &lt;br /&gt;
&lt;br /&gt;
Place the red ray on the barcode.  Hold until it beeps and sample appears on the screen.&lt;br /&gt;
&lt;br /&gt;
All the options for the sample will show up.  Select or type in the results.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039; to save and go back to the main menu. &lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Cancel&amp;#039;&amp;#039;&amp;#039; to delete changes and go back to the main menu.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:PresageAddImagetomobile.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The above steps will automatically update the work order in Presage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is a setting in the software which turn on automatic investigation creation.  When an out of spec result is entered, the mobile app will prompt for an initiation of an investigation sample. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Investigationmobile.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For steps on how to turn on this setting, click [[How to turn on the auto-investigation creation feature.]]&lt;br /&gt;
&lt;br /&gt;
==Work Orders==&lt;br /&gt;
&lt;br /&gt;
This option opens a list of all open work orders.&lt;br /&gt;
&lt;br /&gt;
[[File:PresageScannerOpenworkorders.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Open and edit a work order.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Work Order&amp;#039;&amp;#039;&amp;#039; in the &amp;#039;&amp;#039;Main Menu&amp;#039;&amp;#039;.  If you have a work order barcode, go ahead and scan that now to open the work order.  If not, click &amp;#039;&amp;#039;&amp;#039;Menu&amp;#039;&amp;#039;&amp;#039; &amp;gt;&amp;gt; &amp;#039;&amp;#039;&amp;#039;Manual input: Work Order&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To create a new work order, click &amp;#039;&amp;#039;&amp;#039;Menu&amp;#039;&amp;#039;&amp;#039; &amp;gt;&amp;gt; &amp;#039;&amp;#039;&amp;#039;New Work Order&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Click on the link below to watch a VIDEO TUTORIALS for the Work Order screen.&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=kCcdj8-yK9k/ Create a New Work Order]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=-XOWb98dFRM/ Find an Existing Work Order]&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
&lt;br /&gt;
For the laser to be on at all times (instead of having to click on the button to bring up the laser), on the mobile setting, tap on ITrack LX then turn on the &amp;#039;&amp;#039;Always On&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Alwaysonsetting.jpg|center]]&lt;/div&gt;</summary>
		<author><name>Jwoody</name></author>
	</entry>
	<entry>
		<id>https://wikido.isoftdata.com//index.php?title=Presage/User_Guide/ITrackLX_Mobile_App&amp;diff=14584</id>
		<title>Presage/User Guide/ITrackLX Mobile App</title>
		<link rel="alternate" type="text/html" href="https://wikido.isoftdata.com//index.php?title=Presage/User_Guide/ITrackLX_Mobile_App&amp;diff=14584"/>
		<updated>2024-09-06T14:11:13Z</updated>

		<summary type="html">&lt;p&gt;Jwoody: /* Install the ITrack Mobile App on the iPod. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==How to insert the iPod in the Linea Pro scanner.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Presageattachipodtoscanner.png|thumb|center|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Install the ITrack Mobile App on the iPod.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;#039;&amp;#039;&amp;#039;App Store&amp;#039;&amp;#039;&amp;#039; icon on the iPod.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Type in &amp;#039;&amp;#039;isoftdata&amp;#039;&amp;#039;, and swipe from right to left until the following app shows up: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp.jpg|thumb|center|300px]]&lt;br /&gt;
 *&amp;#039;&amp;#039;The button may look different.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Click on the cloud button to install the app.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following icon pops-up.  Click &amp;#039;&amp;#039;&amp;#039;Use Existing Apple ID&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp1.jpg|thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enter the Apple ID and password.  (A Presage representative will provide you with this information.  It will be used across all plants in your companies, unless requested otherwise.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp2.jpg|thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Home Screen, find the ITrackLX Mobile app icon and click on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp4.jpg|thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enter the Server URL provided by the Presage representative.&lt;br /&gt;
Presage URLs&lt;br /&gt;
COMPANY.presageanalytics.com/scanner&lt;br /&gt;
&lt;br /&gt;
Most presage deployments still have the old subdomain url&amp;#039;s as well.&lt;br /&gt;
COMPANY-scan.presageanalytics.com&lt;br /&gt;
New deployments won&amp;#039;t have them, and the existing ones will start getting redirected to the subdirectory url&amp;#039;s as we update them&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Itrackapp3.jpg|thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Login with Presage username and password and click &amp;#039;&amp;#039;&amp;#039;Log in!&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Perform Sample==&lt;br /&gt;
&lt;br /&gt;
To time-stamp when a sample was taken, click on the first button &amp;#039;&amp;#039;&amp;#039;Perform Sample&amp;#039;&amp;#039;&amp;#039;.  &lt;br /&gt;
&lt;br /&gt;
Press the button on the right side of the Linea Pro. &lt;br /&gt;
&lt;br /&gt;
Place the red ray on the barcode.  Hold until a sound comes out validating that the barcode was read.&lt;br /&gt;
&lt;br /&gt;
A notification will appear confirming that the sample was marked.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Add Image&amp;#039;&amp;#039;&amp;#039; to attach an image to the sample.&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039; to go back to the main menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The above steps will automatically update the work order in Presage.&lt;br /&gt;
&lt;br /&gt;
1) The &amp;#039;&amp;#039;Status&amp;#039;&amp;#039; will change from &amp;#039;&amp;#039;Open&amp;#039;&amp;#039; to &amp;#039;&amp;#039;Sampled&amp;#039;&amp;#039;.&lt;br /&gt;
2) &amp;#039;&amp;#039;Performed On&amp;#039;&amp;#039; will be filled with the scan date and time.&lt;br /&gt;
3) &amp;#039;&amp;#039;Performed By&amp;#039;&amp;#039; will be filled with the user who logged in to the mobile app.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Incubate Sample==&lt;br /&gt;
&lt;br /&gt;
To time-stamp when a test is going in and out of the incubator, click on the second button &amp;#039;&amp;#039;&amp;#039;Incubate Sample&amp;#039;&amp;#039;&amp;#039;.  &lt;br /&gt;
&lt;br /&gt;
Press the button on the right side of the Linea Pro. &lt;br /&gt;
&lt;br /&gt;
Place the red ray on the barcode.  Hold until a sound comes out validating that the barcode was read.&lt;br /&gt;
&lt;br /&gt;
A notification will appear confirming that the sample was marked.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Add Image&amp;#039;&amp;#039;&amp;#039; to attach an image to the sample.&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039; to go back to the main menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The above steps will automatically update the work order in Presage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) &amp;#039;&amp;#039;Testing Began&amp;#039;&amp;#039; will be filled with the date and time the barcode was scanned the first time.&lt;br /&gt;
2) &amp;#039;&amp;#039;Testing Ended&amp;#039;&amp;#039; will be filled with the date and time the barcode was scanned the second time.&lt;br /&gt;
3) &amp;#039;&amp;#039;Tested By&amp;#039;&amp;#039; will be filled with the user who logged in to the mobile app.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Record Analysis==&lt;br /&gt;
&lt;br /&gt;
To enter the result for a sample, click on the third button &amp;#039;&amp;#039;&amp;#039;Record Analysis&amp;#039;&amp;#039;&amp;#039;.  &lt;br /&gt;
&lt;br /&gt;
Press the button on the right side of the Linea Pro. &lt;br /&gt;
&lt;br /&gt;
Place the red ray on the barcode.  Hold until it beeps and sample appears on the screen.&lt;br /&gt;
&lt;br /&gt;
All the options for the sample will show up.  Select or type in the results.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039; to save and go back to the main menu. &lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Cancel&amp;#039;&amp;#039;&amp;#039; to delete changes and go back to the main menu.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:PresageAddImagetomobile.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The above steps will automatically update the work order in Presage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is a setting in the software which turn on automatic investigation creation.  When an out of spec result is entered, the mobile app will prompt for an initiation of an investigation sample. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Investigationmobile.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For steps on how to turn on this setting, click [[How to turn on the auto-investigation creation feature.]]&lt;br /&gt;
&lt;br /&gt;
==Work Orders==&lt;br /&gt;
&lt;br /&gt;
This option opens a list of all open work orders.&lt;br /&gt;
&lt;br /&gt;
[[File:PresageScannerOpenworkorders.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Open and edit a work order.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click &amp;#039;&amp;#039;&amp;#039;Work Order&amp;#039;&amp;#039;&amp;#039; in the &amp;#039;&amp;#039;Main Menu&amp;#039;&amp;#039;.  If you have a work order barcode, go ahead and scan that now to open the work order.  If not, click &amp;#039;&amp;#039;&amp;#039;Menu&amp;#039;&amp;#039;&amp;#039; &amp;gt;&amp;gt; &amp;#039;&amp;#039;&amp;#039;Manual input: Work Order&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To create a new work order, click &amp;#039;&amp;#039;&amp;#039;Menu&amp;#039;&amp;#039;&amp;#039; &amp;gt;&amp;gt; &amp;#039;&amp;#039;&amp;#039;New Work Order&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Click on the link below to watch a VIDEO TUTORIALS for the Work Order screen.&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=kCcdj8-yK9k/ Create a New Work Order]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=-XOWb98dFRM/ Find an Existing Work Order]&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
&lt;br /&gt;
For the laser to be on at all times (instead of having to click on the button to bring up the laser), on the mobile setting, tap on ITrack LX then turn on the &amp;#039;&amp;#039;Always On&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Alwaysonsetting.jpg|center]]&lt;/div&gt;</summary>
		<author><name>Jwoody</name></author>
	</entry>
	<entry>
		<id>https://wikido.isoftdata.com//index.php?title=Brother_Printer_Driver_Installation_%26_Configuration&amp;diff=13487</id>
		<title>Brother Printer Driver Installation &amp; Configuration</title>
		<link rel="alternate" type="text/html" href="https://wikido.isoftdata.com//index.php?title=Brother_Printer_Driver_Installation_%26_Configuration&amp;diff=13487"/>
		<updated>2022-02-03T16:04:41Z</updated>

		<summary type="html">&lt;p&gt;Jwoody: /* Configure the Printer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Download the Brother Driver=&lt;br /&gt;
&lt;br /&gt;
The driver can be downloaded from the Brother Support page: &lt;br /&gt;
https://support.brother.com/g/b/downloadtop.aspx?c=us&amp;amp;lang=en&amp;amp;prod=lpql820nwbeus&amp;amp;_ga=2.206996560.2128116515.1611171424-1589914554.1584728565&lt;br /&gt;
&lt;br /&gt;
Once the driver is downloaded, run through the installer, following the prompts. &lt;br /&gt;
&lt;br /&gt;
=Adding the Printer=&lt;br /&gt;
First, we need to set up the printer so the Presage server can print to it. &lt;br /&gt;
&lt;br /&gt;
# Get the IP of the printer.&lt;br /&gt;
# In Control Panel &amp;gt; Devices and Printers, click Add a Printer. &lt;br /&gt;
# Click &amp;quot;The Printer I want isn&amp;#039;t listed&amp;quot;, then click &amp;quot;Add a local or network printer as an administrator&amp;quot; on the following screen.&lt;br /&gt;
# Click &amp;quot;The Printer I want isn&amp;#039;t listed&amp;quot; again.&lt;br /&gt;
# Select &amp;quot;Add a printer using a TCP/IP address or hostname&amp;quot; and click Next. &lt;br /&gt;
# In the next screen, enter the IP of the printer in the &amp;quot;Hostname or IP Address&amp;quot; field. The rest of the settings in that window can stay as defaults.&lt;br /&gt;
# Give the printer a descriptive name that includes the plant name. Avoid spaces. &lt;br /&gt;
# After adding the printer, we need to edit the default paper size. Set it to &amp;quot;Small Address Label&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
(Printer can also be installed as USB, but networked is more common.) &lt;br /&gt;
&lt;br /&gt;
=Configure the Printer=&lt;br /&gt;
Once the printer is installed on the server, we need to change the default paper size. &lt;br /&gt;
&lt;br /&gt;
# In the Printer control panel, r-click on the printer and select Printing Properties.&lt;br /&gt;
# Go to the Advanced tab, and click the Printing Defaults button. &lt;br /&gt;
# Set &amp;quot;Paper Size&amp;quot; to:&lt;br /&gt;
#*Small Address Label for the standard DK-1209 (orientation: Landscape)&lt;br /&gt;
#*Return Address Label (DK-1204) for the tiny (0.66x2.1) labels (orientation: Landscape)&lt;br /&gt;
#*2.4&amp;quot; for continuous rolls.  Additionally for continuous rolls, set length to 1.10 and orientation to Portrait.  Note: Unlike the other sizes, the preview diagram in the corner will look wrong.  But it is labeled correctly.&lt;br /&gt;
#*2.4&amp;quot; for Work Order &amp;#039;&amp;#039;Testing&amp;#039;&amp;#039; Tags.  Additionally for Testing Tags, set length to 0.5 and orientation to Portrait.  These have report.type &amp;quot;Work Order Testing Tags&amp;quot; instead of &amp;quot;Work Order Tags&amp;quot; and have a separate field for print quantity override.  They are for wrapping around the circumference surface of a petri dish.&lt;br /&gt;
# Change the &amp;quot;Quality&amp;quot; to &amp;quot;Give priority to print &amp;#039;&amp;#039;&amp;#039;quality&amp;#039;&amp;#039;&amp;#039; 300 x 300 dpi&amp;quot; (it starts out as giving priority to print &amp;#039;&amp;#039;&amp;#039;speed&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
# New addition as of 3/4/20: in the Advanced tab, select &amp;quot;Halftone: For logo and text Binary&amp;quot; to solve an issue of some barcodes looking okay but not scanning&lt;br /&gt;
# Click OK to save changes. (I like to reopen the print preferences window to ensure my changes saved)&lt;/div&gt;</summary>
		<author><name>Jwoody</name></author>
	</entry>
	<entry>
		<id>https://wikido.isoftdata.com//index.php?title=The_GROUPing_pitfall&amp;diff=12622</id>
		<title>The GROUPing pitfall</title>
		<link rel="alternate" type="text/html" href="https://wikido.isoftdata.com//index.php?title=The_GROUPing_pitfall&amp;diff=12622"/>
		<updated>2020-09-21T15:55:27Z</updated>

		<summary type="html">&lt;p&gt;Jwoody: /* The short version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GROUPing pitfall is a very common logical error in SQL queries, especially among people getting familiar with a [http://en.wikipedia.org/wiki/Relational_model relational database].&lt;br /&gt;
&lt;br /&gt;
This is what will happen - you&amp;#039;ll be writing a query with a couple JOINs in it.  You add a GROUP BY for the correct columns, and everything looks peachy.  Then, at some point in the future (could be 5 minutes, could be a month), BOOM!  Your query is returning random shit, and you have no clue why.&lt;br /&gt;
&lt;br /&gt;
Considering that we here at [[ISoft]] pay the bills by writing queries that DON&amp;#039;T return random shit, this is something you should probably care about.&lt;br /&gt;
&lt;br /&gt;
== The short version ==&lt;br /&gt;
If your query joins on more than one table with a one-to-many relationship with the row you&amp;#039;re grouping by, you CANNOT use any [https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html aggregate functions] in your query.&lt;br /&gt;
&lt;br /&gt;
If you do, then any time that more than one of those JOINs matches more than one row, all of your aggregate functions will break.&lt;br /&gt;
&lt;br /&gt;
== The long version ==&lt;br /&gt;
You know how JOINs work, right?  Let&amp;#039;s say you have two tables:&lt;br /&gt;
&lt;br /&gt;
{|- class=&amp;quot;wikitable&amp;quot; border=1 &lt;br /&gt;
|+ Monkey&lt;br /&gt;
! id (primary key)&lt;br /&gt;
! name&lt;br /&gt;
! weight&lt;br /&gt;
|- style=&amp;quot;color:blue&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| Bobo&lt;br /&gt;
| 220&lt;br /&gt;
|- style=&amp;quot;color:blue&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| Bimbo&lt;br /&gt;
| 200&lt;br /&gt;
|- style=&amp;quot;color:blue&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| The Hooker&lt;br /&gt;
| 375&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|- class=&amp;quot;wikitable&amp;quot; border=1&lt;br /&gt;
|+ Poop&lt;br /&gt;
! id (primary key)&lt;br /&gt;
! monkeyid&lt;br /&gt;
! date&lt;br /&gt;
! size&lt;br /&gt;
|- style=&amp;quot;color:red&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2010-01-01 13:43:04&lt;br /&gt;
| 4.3&lt;br /&gt;
|- style=&amp;quot;color:red&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 2010-01-02 06:12:44&lt;br /&gt;
| 3.8&lt;br /&gt;
|- style=&amp;quot;color:red&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| 2010-01-02 09:14:56&lt;br /&gt;
| 4.0&lt;br /&gt;
|- style=&amp;quot;color:red&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 2010-01-02 15:05:33&lt;br /&gt;
| 2.6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As you can infer, there is a one-to-many relationship between &amp;quot;monkey&amp;quot; and &amp;quot;poop&amp;quot;.  That is to say, one monkey can have any number of poops.&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m sure you understand what happens when they are joined together:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT monkey.name AS monkey_name, poop.size AS poop_size&lt;br /&gt;
FROM monkey&lt;br /&gt;
JOIN poop ON poop.monkeyid = monkey.id&lt;br /&gt;
ORDER BY monkey.id&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You get this!&lt;br /&gt;
&lt;br /&gt;
{| border = 1&lt;br /&gt;
|+ Query results&lt;br /&gt;
! monkey_name&lt;br /&gt;
! poop_size&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bobo&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 4.0&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bimbo&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 4.3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bimbo&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 2.6&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | The Hooker&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 3.8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
But you already knew that.  I mean, that&amp;#039;s kid stuff!  I didn&amp;#039;t even write it out, I actually got one of my younger siblings to type it out because I was so bored by it.&lt;br /&gt;
&lt;br /&gt;
You see that Bimbo shows up twice - the one row in the monkeys table got multiplied by all the matching rows in the poop table that it got joined to.  You&amp;#039;ve seen it before, and if you wanted to use this data in a report that displayed one record per monkey, you would know what to do - use a GROUP BY!&lt;br /&gt;
&lt;br /&gt;
=== A completely valid query ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT monkey.name AS monkey_name, AVG(poop.size) AS average_poop_size, SUM(poop.size) AS total_poop, &lt;br /&gt;
 COUNT(DISTINCT poop.id) AS number_of_poops &lt;br /&gt;
FROM monkey&lt;br /&gt;
JOIN poop ON poop.monkeyid = monkey.id &lt;br /&gt;
GROUP BY monkey.id&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border = 1&lt;br /&gt;
|+ Query results&lt;br /&gt;
! monkey_name&lt;br /&gt;
! average_poop_size&lt;br /&gt;
! total_poop&lt;br /&gt;
! number_of_poops&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bobo&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 4.00&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 4.0&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bimbo&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 3.45&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 6.9&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | The Hooker&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 3.80&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 3.8&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Boom, bitches.  Fire up [[Crystal Reports|Crystal]] and turn that sucker into a report, amirite?&lt;br /&gt;
&lt;br /&gt;
=== BUT WAIT! ===&lt;br /&gt;
Thanks to my narrative-writing powers, you remember another table that contains data relevant to this report!&lt;br /&gt;
&lt;br /&gt;
{| border = 1&lt;br /&gt;
|+ Meal&lt;br /&gt;
! id&lt;br /&gt;
! monkeyid&lt;br /&gt;
! description&lt;br /&gt;
! weight&lt;br /&gt;
! date&lt;br /&gt;
|- style=&amp;quot;color:green&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| A delicious spaghetti dinner with a side of garlic bread.&lt;br /&gt;
| 1.5&lt;br /&gt;
| 2010-01-01 19:24:00&lt;br /&gt;
|- style=&amp;quot;color:green&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| Shoots&lt;br /&gt;
| 4.7&lt;br /&gt;
| 2010-01-01 08:45:55&lt;br /&gt;
|- style=&amp;quot;color:green&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| Leaves&lt;br /&gt;
| 3.4&lt;br /&gt;
| 2010-01-01 13:17:00&lt;br /&gt;
|- style=&amp;quot;color:green&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| 3&lt;br /&gt;
| Monkey food&lt;br /&gt;
| 5.1&lt;br /&gt;
| 2010-01-01 17:43:19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dude, the eating habits of these monkeys are totally the sort of thing you would want to use in your report on pooping frequency.  Let&amp;#039;s join that shit into your query!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT monkey.name AS monkey_name, AVG(poop.size) AS average_poop_size, SUM(poop.size) total_poop, &lt;br /&gt;
 COUNT(DISTINCT poop.id) AS number_of_poops, COUNT(DISTINCT meal.id) AS number_of_meals&lt;br /&gt;
FROM monkey&lt;br /&gt;
JOIN poop ON poop.monkeyid = monkey.id &lt;br /&gt;
JOIN meal ON meal.monkeyid = monkey.id # This other table has useful data, too!&lt;br /&gt;
GROUP BY monkey.id&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border = 1&lt;br /&gt;
|+ Query results&lt;br /&gt;
! monkey_name&lt;br /&gt;
! average_poop_size&lt;br /&gt;
! total_poop&lt;br /&gt;
! number_of_poops&lt;br /&gt;
! number_of_meals&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bobo&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 4.00&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 4.0&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bimbo&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 3.45&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 6.9&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | The Hooker&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 3.80&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 7.6&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Well aren&amp;#039;t you a query-writing beast!  Time to put this query into production code, eh?&lt;br /&gt;
&lt;br /&gt;
=== WRONG! ===&lt;br /&gt;
If you were observant, you would have noticed something is amiss with those results - the total_poop of The Hooker is different than it was in the last query!  What the junk?&lt;br /&gt;
&lt;br /&gt;
Debugging time - let&amp;#039;s run the query without GROUP BY (or the aggregate functions) and see what data we&amp;#039;re working with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;MySQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT monkey.name AS monkey_name, poop.size AS poop_size, poop.id AS poop_id, meal.id AS meal_id&lt;br /&gt;
FROM monkey&lt;br /&gt;
JOIN poop ON poop.monkeyid = monkey.id &lt;br /&gt;
JOIN meal ON meal.monkeyid = monkey.id&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Query results&lt;br /&gt;
! monkey_name&lt;br /&gt;
! monkey_id&lt;br /&gt;
! poop_id&lt;br /&gt;
! meal_id&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bimbo&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 1&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bimbo&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | The Hooker&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | The Hooker&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 4&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bobo&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Or, to try to show how the JOINs work a bit more clearly:&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Query results&lt;br /&gt;
! monkey_name&lt;br /&gt;
! monkey_id&lt;br /&gt;
! poop_id&lt;br /&gt;
! meal_id&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; rowspan=&amp;quot;2&amp;quot; | Bimbo&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; rowspan=&amp;quot;2&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 1&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; rowspan=&amp;quot;2&amp;quot; | The Hooker&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; rowspan=&amp;quot;2&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; rowspan=&amp;quot;2&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 4&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bobo&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Duh! ===&lt;br /&gt;
Of course!  As you can see by the poop_id column, poop #2 is getting counted twice!  And not only that, but meal #1 is also being counted twice - if we had used any aggregate functions on columns from the meal table, they would have returned fux0red data as well!&lt;br /&gt;
&lt;br /&gt;
By drawing on your basic understanding of how JOINs work, you should quickly see what causes this.  Every row that is related to a monkey id is going to be multiplied by the number of matching rows from tables are joined to that monkey id.&lt;br /&gt;
&lt;br /&gt;
Of course, all those multiplied rows disappear from sight as soon as you GROUP BY some column - but the first aggregate function you use will expose the dirty truth: you didn&amp;#039;t put any thought into how these tables related!&lt;br /&gt;
&lt;br /&gt;
== How to NOT make the mistake ==&lt;br /&gt;
For EVERY SINGLE JOIN you make, you must go through this thought process:&lt;br /&gt;
# What is this query grouping by - what is the &amp;quot;primary key&amp;quot; of my result set?&lt;br /&gt;
# This table/subquery I&amp;#039;m joining on - what is its relationship to that &amp;quot;primary key&amp;quot; (one-to-one, one-to-many)?&lt;br /&gt;
# Does my (pre-GROUP) dataset already have a one-to-many relationship with my final result set?&lt;br /&gt;
&lt;br /&gt;
If it does, then stop what you&amp;#039;re doing - you&amp;#039;re about to fuck up your results, and probably confuse yourself horribly in the process.&lt;br /&gt;
&lt;br /&gt;
As someone who (I&amp;#039;m assuming) is going to be writing a lot of queries in the future (I don&amp;#039;t see us moving to using flat-files as a storage engine any time soon), this is something that will need to become automatic for you.&lt;br /&gt;
&lt;br /&gt;
Brain farts happen, but if you put effort into keeping track of which columns are unique on both sides of your joins, you should be able to make sense of what&amp;#039;s going on in your results.&lt;br /&gt;
&lt;br /&gt;
== Protip: write that query correctly ==&lt;br /&gt;
How do you make sure that your aggregate functions return the data you want?  Well, until MySQL starts reading minds (7.0?), you make sure that &amp;#039;&amp;#039;&amp;#039;only one of the data sources in your query has a one-to-many relationship with your result.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Like most of life&amp;#039;s difficulties, this was made easier with the release of MySQL 4.1!&lt;br /&gt;
&lt;br /&gt;
Want to join some phat data into your query, but don&amp;#039;t want to risk multiplying your data set by all the matching rows in another table?  Join a subquery!&lt;br /&gt;
&lt;br /&gt;
Subqueries can be joined (and even selected from) just like you would a table:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;MySQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT monkey.name AS monkey_name, poop_grouped.average_poop_size, poop_grouped.total_poop, poop_grouped.poops,&lt;br /&gt;
 meal_grouped.average_meal_weight, meal_grouped.total_meal_weight, meal_grouped.number_of_meals&lt;br /&gt;
FROM monkey&lt;br /&gt;
JOIN&lt;br /&gt;
(&lt;br /&gt;
	SELECT poop.monkeyid, AVG(poop.size) AS average_poop_size, SUM(poop.size) AS total_poop, COUNT(*) AS poops&lt;br /&gt;
	FROM poop&lt;br /&gt;
	GROUP BY poop.monkeyid&lt;br /&gt;
) AS poop_grouped ON poop_grouped.monkeyid = monkey.id &lt;br /&gt;
JOIN &lt;br /&gt;
(&lt;br /&gt;
	SELECT meal.monkeyid, AVG(meal.weight) AS average_meal_weight, SUM(meal.weight) AS total_meal_weight, &lt;br /&gt;
	 COUNT(*) AS number_of_meals&lt;br /&gt;
	FROM meal&lt;br /&gt;
	GROUP BY meal.monkeyid&lt;br /&gt;
) AS meal_grouped ON meal_grouped.monkeyid = monkey.id &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Query results&lt;br /&gt;
! monkey_name&lt;br /&gt;
! average_poop_size&lt;br /&gt;
! total_poop&lt;br /&gt;
! poops&lt;br /&gt;
! average_meal_weight&lt;br /&gt;
! total_meal_weight&lt;br /&gt;
! number_of_meals&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bobo&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 4.00000&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 4.0&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 3.40000&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 3.4&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | Bimbo&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 3.45000&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 6.9&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 1.50000&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 1.5&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue&amp;quot; | The Hooker&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 3.80000&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 3.8&lt;br /&gt;
| style=&amp;quot;color:red&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 4.90000&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 9.8&lt;br /&gt;
| style=&amp;quot;color:green&amp;quot; | 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That&amp;#039;s right - every data set (the original table, as well as those subqueries) has a 1-to-1 relationship with our final result set.  Because of this, we don&amp;#039;t even need a GROUP BY in the main query!&lt;br /&gt;
&lt;br /&gt;
This query is also valid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;MySQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT monkey.name AS monkey_name, AVG(poop.size) AS average_poop_size, SUM(poop.size) AS total_poop, &lt;br /&gt;
 COUNT(poop.id) AS poops, meal_grouped.average_meal_weight, meal_grouped.total_meal_weight, &lt;br /&gt;
 meal_grouped.number_of_meals&lt;br /&gt;
FROM monkey&lt;br /&gt;
JOIN poop ON poop.monkeyid = monkey.id &lt;br /&gt;
JOIN &lt;br /&gt;
(&lt;br /&gt;
	SELECT meal.monkeyid, AVG(meal.weight) AS average_meal_weight, SUM(meal.weight) AS total_meal_weight, &lt;br /&gt;
	 COUNT(*) AS number_of_meals&lt;br /&gt;
	FROM meal&lt;br /&gt;
	GROUP BY meal.monkeyid&lt;br /&gt;
) AS meal_grouped ON meal_grouped.monkeyid = monkey.id &lt;br /&gt;
GROUP BY monkey.id&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You just have to bear in mind that in your main query, the rows in `monkey` are being multiplied by the number of matches in `poop`, and the GROUP BY combines them safely.&lt;br /&gt;
&lt;br /&gt;
Adding another JOIN with a one-to-many relationship to any of the data already in the query would result in a massive fail.&lt;br /&gt;
&lt;br /&gt;
== To summarize ==&lt;br /&gt;
Logical errors in your queries are easy to miss.  If something looks wrong in your results, check all the places that data is coming from - look at the relationships between the data sets that contribute to your final results.&lt;br /&gt;
&lt;br /&gt;
If you don&amp;#039;t pay close attention, and don&amp;#039;t happen to catch problems during testing, your bad query will sit in production until some customer calls up wondering why some of the numbers on their screen &amp;quot;look weird&amp;quot;.  And that&amp;#039;s just embarrassing.&lt;/div&gt;</summary>
		<author><name>Jwoody</name></author>
	</entry>
	<entry>
		<id>https://wikido.isoftdata.com//index.php?title=User:Jwoody&amp;diff=12610</id>
		<title>User:Jwoody</title>
		<link rel="alternate" type="text/html" href="https://wikido.isoftdata.com//index.php?title=User:Jwoody&amp;diff=12610"/>
		<updated>2020-09-14T18:43:17Z</updated>

		<summary type="html">&lt;p&gt;Jwoody: Woody&amp;#039;s Employee Page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;**placeholder**&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;ll come up with something witty after finishing onboarding stuffs.&lt;/div&gt;</summary>
		<author><name>Jwoody</name></author>
	</entry>
</feed>