Yes, and you're on the right track.
Change the Return all rows option to Return excluding duplicate rows at the top of the column list window.
Use the "any of the following" option to get the dataset for all computers with either product installed.
Use the "all of the following" option to get the dataset for all computers with both products installed.
And, in the process of editing my reply, I left out the important step . . .
Remove the Software Name column from the column list so that the rows will be recognized as duplicate and suppress the extra rows for each computer.
Hmm...I must be doing something wrong.
Return excluding duplicate rows of ... Limit # of rows to All
-> TCP/IP Address Sort Ascending (1)
-> Computer Name Not Sorted
+-> Domain or Workgroup Not Sorted
Choose records where all of the following apply
-> Display Name contains Software A and
+-> Display Name contains Software B
I get no results. If I remove one or the other software names, I get a list of machines with the other software installed (as expected).
Oopss.. I make this mistake all of the time... the 'and' option won't actually work in this manner because Display Name can only have one value in each row, so there will never be a case where both options will return rows.
In order to get just the rows with both option, what you'll need to do is build an Aggregate on Count for the Display Name column (keep the column in the display), and then in the report viewer filter that column for Count=2.
That did it! Thanks for your help. This will save me a ton of time.