Forum Discussion
Anonymous
4 years agoNot applicable
return uncommon String after Comparisons
I want to compare two colums. Both of them contain strings. I need to get the un common string in thrid column. Col1 abc|def|ijk|bcd|plk Col2 abc|plk|ijk Col3 [Resulting Column ] def|b...
- 4 years ago
Hi Anonymous
Off the top of my head, whether using M or DAX, I would:
- Split each of Col1 & Col2 into lists List1 & List2
- Take the union of List1 & List2, and remove the intersection of List1 & List2 (and remove duplicates & sort if desired)
- Concatenate the result
Attached PBIX has examples in M & DAX.
The step to add such a column in M in my example is:
= Table.AddColumn(#"Changed Type", "Col3 M", each let List1 = Text.Split([Col1],"|"), List2 = Text.Split([Col2],"|"), Union = List.Union({List1,List2}), Intersection = List.Intersect({List1,List2}), Uncommon = List.Sort(List.Distinct(List.Difference(Union,Intersection))) in Text.Combine(Uncommon,"|"), type text)The DAX calculated column version is:
Col3 DAX = VAR String1 = Test[Col1] VAR String2 = Test[Col2] VAR Length1 = PATHLENGTH ( String1 ) VAR Length2 = PATHLENGTH ( String2 ) VAR List1 = SELECTCOLUMNS ( GENERATESERIES ( 1, Length1 ), "Value", PATHITEM ( String1, [Value] ) ) VAR List2 = SELECTCOLUMNS ( GENERATESERIES ( 1, Length2 ), "Value", PATHITEM ( String2, [Value] ) ) VAR Uncommon = DISTINCT ( EXCEPT ( UNION ( List1, List2 ), INTERSECT ( List1, List2 ) ) ) RETURN CONCATENATEX ( Uncommon, [Value], "|", [Value] )There could be some optimization, but that's what comes to mind ๐
Hope that helps.
Regards,
Owen
OwenAuger
4 years agoSuper User
Hi Anonymous
Off the top of my head, whether using M or DAX, I would:
- Split each of Col1 & Col2 into lists List1 & List2
- Take the union of List1 & List2, and remove the intersection of List1 & List2 (and remove duplicates & sort if desired)
- Concatenate the result
Attached PBIX has examples in M & DAX.
The step to add such a column in M in my example is:
= Table.AddColumn(#"Changed Type", "Col3 M",
each let List1 = Text.Split([Col1],"|"),
List2 = Text.Split([Col2],"|"),
Union = List.Union({List1,List2}),
Intersection = List.Intersect({List1,List2}),
Uncommon = List.Sort(List.Distinct(List.Difference(Union,Intersection)))
in
Text.Combine(Uncommon,"|"), type text)
The DAX calculated column version is:
Col3 DAX =
VAR String1 = Test[Col1]
VAR String2 = Test[Col2]
VAR Length1 = PATHLENGTH ( String1 )
VAR Length2 = PATHLENGTH ( String2 )
VAR List1 =
SELECTCOLUMNS (
GENERATESERIES ( 1, Length1 ),
"Value", PATHITEM ( String1, [Value] )
)
VAR List2 =
SELECTCOLUMNS (
GENERATESERIES ( 1, Length2 ),
"Value", PATHITEM ( String2, [Value] )
)
VAR Uncommon =
DISTINCT (
EXCEPT (
UNION ( List1, List2 ),
INTERSECT ( List1, List2 )
)
)
RETURN
CONCATENATEX (
Uncommon,
[Value],
"|",
[Value]
)
There could be some optimization, but that's what comes to mind ๐
Hope that helps.
Regards,
Owen