Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

AND Multiple Selectedvalue

Hey!    I wanted to create  a target based on the selections in a slicer.   Target = IF( AND(SELECTEDVALUE('Table A'[Names])="Thomas",SELECTEDVALUE('Table A'[Names])="Nick") ||SELECTEDVALUE('R...
  • Anonymous's avatar
    Anonymous
    5 years ago

    Hey daxer,

     

    thank you very much for your answer. I may be to far away from DAX-Code like in the video, but I somehow figured my own Workaround. It sure is not perfect, but works for me:

     

    Target = IF(
     
    IF(ISFILTERED('Table A'[Names]),CONCATENATEX(VALUES('Table A'[Names]),'Table A'[Names], " | "),"")="Thomas | Nick"
     
    ||SELECTEDVALUE('Table A'[Names])="Thomas"
     
    ||SELECTEDVALUE('Table A'[Names])="Nick"
     
    ,1,2)
     
     
    Best regards
    MSOMME
  • Anonymous's avatar
    Anonymous
    5 years ago
    Target =
    VAR VisibleNames =
        VALUES( 'Table A'[Names] )
    var DesiredNames = 
    	{"Nick", "Thomas"}
    var Union_ =
    	// This union will have 2 elements
    	// only when VisibleNames is a subset
    	// of DesiredSet.
    	DISTINCT(
    		union(
    			VisibleNames,
    			DesiredNames
    		)
    	)
    var DesiredNamesCard =
    	COUNTROWS( DesiredNames )
    var UnionCard =
    	COUNTROWS( Union_ )
    VAR Result =
        IF( UnionCard = DesiredNamesCard,
            1,
            2
        )
    RETURN
        Result

    Here's the code you probably wanted to write. CONCATENATEX is a function which should not be used in your scenario. This is not what it's been meant for. The above code is flexible and expresses clearly your idea. For instance, ff you wanted to put more names in the DesiredNames set, you could do it and the code would behave correctly as well (only one change is needed to DesiredNames). If you wanted to change the names, you'd change them in one place only. This is what's called: CLEAN CODE. No repetitions are present and you probably know that in programming repeated code is the source of all evil.