The performance monitor in the Data Services Management Console will provide you with detailed execution stats for each data flow.
It only shows data flows as these are the only components that actually “do” something in terms of data loading, transformations etc. Except for scripts in work flows of course but these should never do any massive data massaging that would take any amount of time.
However, you can also query the repository database (in particular the AL_HISTORY table), where all the metadata is contained.
The table is not really setup for easy querying - but here’s a query I am using against our repository databases to extract additional stats for monitoring purposes etc.
Please bear in mind that our repository databases are located on SQL Server 2008 - you may have to make tweaks to the syntax to make it work on other RDMS’.
As the AL_HISTORY table also contains the stats of many internal data flows and jobs etc (a lot of BODS processes, like profiling, are actually internal BODS jobs!), you probably want to filter by your job name to ensure you extract the relevant stats.
You can change the query to retrieve the status by object type - it’s currently to work flows but you can change this to data flows etc. I wrote the query to get the results per data flows, not work flows, but I changed the object type to suit your needs as described in your post.
It’s not perfect but it’s all I have at the moment 
SELECT dfstats.OBJECT_KEY,
dfstats.KEY2,
dfstats.DATAFLOW_NAME,
dfstats.START_TIME,
dfstats.END_TIME,
dfstats.EXECUTION_TIME,
h.START_TIME as JOB_START_TIME,
DATEDIFF(ss, H.START_TIME, dfstats.START_TIME) as JOB_LAPSETIME_SEC,
dfstats.OBJECT_ID,
dfstats.PARENT_ID
FROM
(select df.OBJECT_KEY,
df.KEY2,
df.value as DATAFLOW_NAME,
(select z.value from AL_STATISTICS z where z.OBJECT_KEY = df.OBJECT_KEY AND z.KEY2 = df.KEY2 and z.NAME = 'START_TIME') as START_TIME,
(select z.value from AL_STATISTICS z where z.OBJECT_KEY = df.OBJECT_KEY AND z.KEY2 = df.KEY2 and z.NAME = 'END_TIME') as END_TIME,
(select z.value from AL_STATISTICS z where z.OBJECT_KEY = df.OBJECT_KEY AND z.KEY2 = df.KEY2 and z.NAME = 'EXECUTION_TIME') as EXECUTION_TIME,
(select z.value from AL_STATISTICS z where z.OBJECT_KEY = df.OBJECT_KEY AND z.KEY2 = df.KEY2 and z.NAME = 'OBJECT_ID') as OBJECT_ID,
(select z.value from AL_STATISTICS z where z.OBJECT_KEY = df.OBJECT_KEY AND z.KEY2 = df.KEY2 and z.NAME = 'PARENT_ID') as PARENT_ID
from AL_STATISTICS df inner join
(select OBJECT_KEY, KEY2
from AL_STATISTICS
WHERE OBJECT_KEY = (select MAX(OBJECT_KEY)-1 from AL_HISTORY WHERE SERVICE = 'YOUR_JOB_NAME')
AND NAME = 'OBJECT_TYPE'
AND VALUE = 'Workflow'
GROUP BY OBJECT_KEY, KEY2) obj
on df.OBJECT_KEY = obj.OBJECT_KEY
and df.KEY2 = obj.KEY2
where df.[NAME] = 'OBJECT_NAME' ) dfstats inner join AL_HISTORY h
on dfstats.OBJECT_KEY = h.OBJECT_KEY
ORDER BY START_TIME, KEY2
ErikR
(BOB member since 2007-01-10)