Jump to content

Engine Exhaust Emissions Database ERD is Circular!

Recommended Posts

I am trying to set up a database to calculate and report exhaust emissions from diesel engines and am stumped at Step #1:  The infamous Entity Relationship Diagram!

I am looking at a few thousand engines and need to calculate how much of what kind of pollutants they kick out into the air.  I have spreadsheets that list the Year of Manufacture, the horsepower, the serial number, how long the engine ran during a given year and how much fuel it consumed during that year.  I also have some spreadsheets that list what the Emission Factors, usually expressed in pounds per hour operated or pounds per gallon of fuel consumed, for each of the two dozen chemical compounds I’m interested in tracking.

Those emissions are relatively simple to calculate:  Multiply the Emission Factor times the number of hours operated (or times the gallons of fuel consumed) and we’re done.  Except for the fact that the Emission Factors are based on the Year of Manufacture and, in some cases, the horsepower rating of the engine, so I have to circle back around to the Engine table:  I don’t know how to connect the emission factor for, say, Arsenic to a specific engine, say a 154 hp Chevy made in 2014,  based on that engine’s year of manufacture and hp rating.

So my ERD keeps looking something like this:  Engines --->Emission Factors--->Engines   or   Engines ---<  Emissions >---Emission Factors--->Engines

My computer keeps puking ones and zeroes all over my keyboard when I try either setup in my Relationship Graph!

The only other way I can think of accomplishing these seemingly simple calculations is to write a boatload of scripts with variables, but I’m not even sure I could come up with all of the combinations/permutations involved.  And, unfortunately, I can’ even spell SQL, let alone know how to execute one of ‘em!

I have attached a (simplified) copy of the spreadsheets I currently use to better explain my problem.  I hope one of you will find this to be mind-numbingly simple and explain how it should be done.  Thanks very much for your time and consideration.



Engine Emissions Calc Sheet MOD for FMF.xlsx

Share this post

Link to post
Share on other sites
On 03/22/2017 at 1:13 AM, Guy_Smith said:

the Emission Factors are based on the Year of Manufacture and, in some cases, the horsepower rating of the engine

You have to start by splitting this into individual records in an EmissionFactors table that has fields for:

• Substance
• YearOfManufacture
• MinimumHorsePower
• EmissionFactor
• Units

Then for your report generate a record in a third Emissions table for each Engine/Substance combination, and let it calculate the total emission. So your structure would be:

Engines -< Emissions >- EmissionFactors

and the relationship between Emissions and EmissionFactors would be defined as:

Emissions::Substance = EmissionFactors::Substance
Emissions::YearOfManufacture = EmissionFactors::YearOfManufacture
Emissions::HorsePower ≤ EmissionFactors::MinimumHorsePower

with the records on the EmissionFactors side sorted by MinimumHorsePower, descending.


On 03/22/2017 at 1:13 AM, Guy_Smith said:

how long the engine ran during a given year

I don't see a given year in the example. If you have  year-by-year data, this may affect the structure.






Edited by comment
  • Like 1

Share this post

Link to post
Share on other sites

Comment:  Thank you so much for the help on this!  And, of course, you're a step ahead of me already - I am currently only collecting data for 2016, but I anticipate that it will turn into an annual event and I will need to modify my database to include multiple reporting years.  Any helpful hints on how to tweak the solution to handle that?

Thanks again,



Share this post

Link to post
Share on other sites
1 hour ago, Guy_Smith said:

I will need to modify my database to include multiple reporting years.

Again, you will need a table where the yearly engine consumption data is stored using an individual record for each engine/year combination. I don't know how you're getting your data, but ideally you would have:

Engines -< EngineYearlyConsumptions -< Emissions >- EmissionFactors

Note that a record in Emissions table must lookup the YearOfManufacture and HorsePower values from its ancestor in Engines, in order to link to the correct record in EmissionFactors.

Share this post

Link to post
Share on other sites

That actually makes sense to me - who'd have thunk it?!

Thanks again, Comment - your willingness to help us neophytes is a true blessing!

Share this post

Link to post
Share on other sites

Rats! Phooey!  I'm still stuck - I can't get the emissions join table to populate.  I split the emission factor data into individual records, I've verified that I have the box checked to allow creation of records in the Emissions table and I've tried using a portal from the Engine table to display the emissions, but still nothing.  I maybe shouldn't be pulling the data for the Engine bhp and Tier from the Engine table or the CAS and Pollutant Names from the Emissions Factor table (for the Emissions table), but I don't know how else to do that (I also tried to do automatic lookups for those fields, but it didn't work, either). Any chance of looking at my file and seeing where I went wrong?

And, by the way, you will see the word "Tier" used in place of Year of Manufacture:  Tiers are basically groups of years used by the EPA. Using them in this instance saves me some time as I only have to enter emission factor records for one Tier instead of three or four records, one for each year in the Tier.


Thanks again for all of your assistance,


HARP DICE EmsInv Calc Sheet.fmp12

Share this post

Link to post
Share on other sites

I am afraid I cannot look at your file. In case it wasn't clear, you need to run a script that will create a record in the Emissions table for each combination of  EngineYearlyConsumptions and Substance (i.e. every row in your report). There is no other way to populate the table (unless you want to do it manually, or you have an outside source you can import)).


Edited by comment
  • Like 1

Share this post

Link to post
Share on other sites

Yeah, I sorta missed the "generate a record" part of your first response :B

I got the script to work and my database is up and running thanks to your guidance - thanks so much and have a great afternoon!

Share this post

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By Oyseka
      Hi All, I have a database where the relationship between the Quotes table and the QuoteItems table is set up such that if a record is deleted in the Quotes table, the related records in the QuoteItems table are also deleted. I have now been shown an instance on one Customer where there are four Quotes missing from the Quotes table but all the QuoteItems are still in the QuoteItems table. How can this be done, I am unable to recreate a circumstance where I can delete a quote and leave the quoteitems in place.
      Any help appreciated
    • By H
      i have 3 Tables Property , Units , Tenant.
      Each property has many units , Each unit has one tenant active but may have many inactive tenants from previous years.
      All working fine BUT.....
      i would need to show a table in the property layout of the units and each one only with its active tenant.
      The portal is based on the units table. 
      However the tenant just show up the tenant that was first input to the unit.
      My question is , how could i get that only the active tenant should show to the unit?
      i would really appreciate it someone could guide me on this.
    • By Hproth
      I'm sure there is a simple solution to this problem, but I can't seem to figure it out!
      I have a custom app that allows the user to write letters amongst other things. 
      Each patient is linked to a GP and a Consultant, when writing a letter to a patient there is the option to CC both the linked GP and Consultant. However, occasionally another GP or Consultant might need to be CC'd in the letter (in addition to the ones already linked to the patient). So I would need the address of this additional consultant/GP to also be CC'd in the letter. For the life of me I can't work out a simple way to do this. 
      Does anyone have any suggestions?
      Thanks in advance.
    • By fumblewinter
      The Problem:
      I have a filterable portal (1) displaying contact names from a staff table. I need to click on a contact to add them to a separate portal of invitees (portal 2)  on the same layout (Events) . I then need the original portal to either hide (or in some other way denote) the people already added to the second portal. In other words, it needs to be clear that a person already invited can't be invited again.
      The layout is from the table: Events
      Portal 1 is showing records from Staff (filterable via a global search field)
      Portal 2 is showing records from EventInvitees
      I need Portal 1 to only filter through those staff who haven't been invited yet.
      Any help would be gratefully received.
      I am struggling around using 'conditional formatting', 'hiding when…' options and non-matching field relationships!!
      Thanks in advance!
    • By Lowermountain
      New to Filemaker and new to this forum. Hoping someone can help me out.
      I am working on a personnel planning system with, among others, the tables Employees, Shifts and Availability. 
      tblEmployees has fields like Employee ID
      tblShifts has the fields Employee ID, Start Timestamp, End Timestamp
      tblAvailability has the fields Employee ID, Start Timestamp, End Timestamp and Status
      When in the layout Shifts I want to open a portal in a popup and I want this portal to be sorted by Availability and I want the portal rows with employees to be 'greyed out' when status = 0, green when status = 1 and normal when no Availability is given.
      I basically need to know which records from tblAvailability match records from tblShifts and then which records from tblEmployees match records from tblAvailability.
      How do I go about this? Do I need SQL?
      Hope this is a somewhat clear question. Many thanks!
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.