I have a design challenge for allowing users to create unions, intersections, and subtractions of groups. The end goal of this is to create a subset of the different group contents, which can be cumbersome for a user to decipher without a strong understanding of the system.
As challenging as it is for the user to read these strings, I have found it equally (if not more so) challenging to find a pattern that makes the interaction of a union, an intersection and/or a subtraction clear to the user.
Take, for example, the following.
- The user "allows" two groups. The end result is a boolean "or" state: "allow the contents of P1 or P2".
- The user "requires" a third, which is interpreted as a boolean "and": "allow the contents that are part of P1+P2 and P3".
There could be any number of groups added to either "allow" or "require", and one could be left blank as well.
Another option to the user is to "exclude" the contents of another group. Combing the example above with a 4th group, we end up with: "allow the contents that are part of P1+P2 and P3, minus those items in P4".
The combinations could be much simpler, or could group more complicated depending on the desired results.
The interactions between the groups is not building up a boolean logic set to a final "true" or "false" statement. The result of these interactions is a subset of P1, P2, P3 and P4 -- this could be nothing, something or a lot of somethings.
How can represent the construction of this complex interaction to users, allowing them to understand the final subset of items which results?
Some original wireframes I put together for discussion show the items in a list form. Language next to each grouping would need to indicate how the different items interact with each other.
An alternative to the above was to combine the "allow" and "require" lists, to make the the "require" a subset of the complete set.