Here is the SQL that the view I built (by populating the view based by dragging all the fields from my query into it) is using. This view returns all 36 rows correctly when I open it. The SSRS report uses the exact same query, but only has 12 rows, some of which are unpopulated. It is the difference between these two that is most confusing.
SELECT T1.BACKORDERSTATUS,
T1.DLVDATE,
T1.INVENTDIMID,
T1.INVENTREFID,
T1.INVENTREFTYPE,
T1.ITEMID,
T1.NAME,
T1.PRODID,
T1.QTYSTUP,
T1.RECID AS RECID1,
T1.STUPDATE,
T1.ROUTEID,
T1.DATAAREAID,
T1.PARTITION,
T1.RECID,
T2.DATAAREAID AS DATAAREAID#2,
T2.PARTITION AS PARTITION#2,
T2.INVENTDIMID AS INVENTDIMID1,
T2.ITEMID AS ITEMID1,
T2.OPRNUM,
T2.POSITION,
T2.QTYINVENTCALC,
T2.QTYINVENTSTUP,
T2.REMAININVENTPHYSICAL,
T2.UNITID,
T2.BOMID,
T2.INVENTTRANSID,
T2.BACKORDERSTATUS AS BACKORDERSTATUS1,
T3.DATAAREAID AS DATAAREAID#7,
T3.PARTITION AS PARTITION#7,
T3.BACKORDERSTATUS AS BACKORDERSTATUS2,
T3.CALCPROC,
T3.CALCSETUP,
T3.FROMDATE,
T3.FROMTIME,
T3.OPRID,
T3.OPRNUM AS OPRNUM1,
T3.OPRNUMNEXT,
T3.PROCESSCATEGORYID,
T3.PRODID AS PRODID1,
T3.SETUPCATEGORYID,
T3.TODATE,
T3.TOTIME,
T3.PROCESSPERQTY,
T3.PROCESSTIME,
T3.OPRFINISHED,
T4.DATAAREAID AS DATAAREAID#9,
T4.PARTITION AS PARTITION#9,
T4.ITEMID AS ITEMID2,
T4.PRODUCT,
T5.DATAAREAID AS DATAAREAID#10,
T5.PARTITION AS PARTITION#10,
T5.CONFIGID AS CONFIGID1,
T5.INVENTBATCHID,
T6.DATAAREAID AS DATAAREAID#11,
T6.PARTITION AS PARTITION#11,
T6.NAME AS NAME2,
T7.DATAAREAID AS DATAAREAID#12,
T7.PARTITION AS PARTITION#12,
T7.NAME AS NAME3,
T7.BOMID AS BOMID1,
T8.DATAAREAID AS DATAAREAID#3,
T8.PARTITION AS PARTITION#3,
T8.NAME AS NAME1,
T9.DATAAREAID AS DATAAREAID#4,
T9.PARTITION AS PARTITION#4,
T9.CONFIGID,
T10.DATAAREAID AS DATAAREAID#5,
T10.PARTITION AS PARTITION#5,
T10.ABCCONTRIBUTIONMARGIN,
T11.DATAAREAID AS DATAAREAID#6,
T11.PARTITION AS PARTITION#6,
T11.LINENUM,
T11.INVENTCONSUMP,
T11.INVENTTRANSID AS INVENTTRANSID1,
T12.DATAAREAID AS DATAAREAID#8,
T12.PARTITION AS PARTITION#8,
T12.HOURS,
T12.QTYGOOD,
T12.QTYERROR,
T12.OPRFINISHED AS OPRFINISHED1,
CAST(NULL AS NUMERIC(32, 16)) AS PDSCWBATCHSTUP,
CAST(NULL AS NUMERIC(32, 16)) AS PDSCWINVENTCALC,
CAST(NULL AS NUMERIC(32, 16)) AS PDSCWINVENTSTUP,
CAST(NULL AS NUMERIC(32, 16)) AS PDSCWREMAINPHYSICAL
FROM dbo.PRODTABLE AS T1
LEFT OUTER JOIN dbo.PRODBOM AS T2
ON T1.PRODID = T2.PRODID
AND T1.DATAAREAID = T2.DATAAREAID
AND T1.PARTITION = T2.PARTITION
LEFT OUTER JOIN dbo.PRODROUTE AS T3
ON T1.PRODID = T3.PRODID
AND T1.DATAAREAID = T3.DATAAREAID
AND T1.PARTITION = T3.PARTITION
INNER JOIN dbo.INVENTTABLE AS T4
ON T1.ITEMID = T4.ITEMID
AND T1.DATAAREAID = T4.DATAAREAID
AND T1.PARTITION = T4.PARTITION
INNER JOIN dbo.INVENTDIM AS T5
ON T1.INVENTDIMID = T5.INVENTDIMID
AND T1.DATAAREAID = T5.DATAAREAID
AND T1.PARTITION = T5.PARTITION
INNER JOIN dbo.ROUTETABLE AS T6
ON T1.ROUTEID = T6.ROUTEID
AND T1.DATAAREAID = T6.DATAAREAID
AND T1.PARTITION = T6.PARTITION
INNER JOIN dbo.BOMTABLE AS T7
ON T1.BOMID = T7.BOMID
AND T1.DATAAREAID = T7.DATAAREAID
AND T1.PARTITION = T7.PARTITION
INNER JOIN dbo.BOMTABLE AS T8
ON T2.BOMID = T8.BOMID
AND T2.DATAAREAID = T8.DATAAREAID
AND T2.PARTITION = T8.PARTITION
INNER JOIN dbo.INVENTDIM AS T9
ON T2.INVENTDIMID = T9.INVENTDIMID
AND T2.DATAAREAID = T9.DATAAREAID
AND T2.PARTITION = T9.PARTITION
INNER JOIN dbo.INVENTTABLE AS T10
ON T2.ITEMID = T10.ITEMID
AND T2.DATAAREAID = T10.DATAAREAID
AND T2.PARTITION = T10.PARTITION
INNER JOIN dbo.PRODJOURNALBOM AS T11
LEFT OUTER JOIN dbo.PRODJOURNALROUTE AS T12
ON T3.OPRPRIORITY = T12.OPRPRIORITY
AND T3.DATAAREAID = T12.DATAAREAID
AND T3.PARTITION = T12.PARTITION
AND T3.OPRNUM = T12.OPRNUM
AND T3.DATAAREAID = T12.DATAAREAID
AND T3.PARTITION = T12.PARTITION
AND T3.PRODID = T12.PRODID
AND T3.DATAAREAID = T12.DATAAREAID
AND T3.PARTITION = T12.PARTITION
ON T2.INVENTTRANSID = T11.INVENTTRANSID
AND T2.DATAAREAID = T11.DATAAREAID
AND T2.PARTITION = T11.PARTITION