The ultimate Microsoft Fabric, Power BI, Azure AI, and SQL learning event: Join us in Stockholm, September 24-27, 2024.
Save €200 with code MSCUST on top of early bird pricing!
Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
Hi
I have a table with a field "source_id". Can anyone help me with how to create a new column "new_source_id" extracting the data as it appears in the example below. Data will vary for each source id but this is pretty much all there is in terms of combinations:
source_id | new_source_id |
delete_A1 | |
delete_EAI_A_1 | |
delete_sandbox | |
0107 | 0107 |
0107-sandbox | 0107 |
0107-imports | 0107 |
0107-QTeachPD | 0107 |
0107-teaching | 0107 |
0107-profdev | 0107 |
delete_0107 | 0107 |
delete_0107-imports | 0107 |
delete_0107-sandbox | 0107 |
delete_0107-teaching | 0107 |
delete_0107-QTeachPD | 0107 |
2351 | 2351 |
2351-sandbox | 2351 |
2351-imports | 2351 |
2351-QTeachPD | 2351 |
2351-teaching | 2351 |
2351-profdev | 2351 |
delete_2351 | 2351 |
delete_2351-imports | 2351 |
delete_2351-sandbox | 2351 |
delete_2351-teaching | 2351 |
delete_2351-QTeachPD | 2351 |
A182 | A182 |
A182-sandbox | A182 |
A182-imports | A182 |
A182-QTeachPD | A182 |
A182-teaching | A182 |
delete_A182 | A182 |
delete_A182-imports | A182 |
delete_A182-sandbox | A182 |
delete_A182-teaching | A182 |
delete_A182-QTeachPD | A182 |
0018-0107-profdev | 0018-0107 |
A092-A092-profdev | A092-A092 |
Thanks 🙂
Solved! Go to Solution.
Hi @onedayover
If you wish to create a new column using dax you can use the following code (attached sample file)
new_source_id =
VAR Digits = SELECTCOLUMNS ( GENERATESERIES ( 0, 9, 1 ), "@Digit", [Value] & "" )
VAR String = Data[source_id]
VAR Items1 = SUBSTITUTE ( String, "_", "|" )
VAR Items2 = SUBSTITUTE ( Items1, "-", "|" )
VAR Length = PATHLENGTH ( Items2 )
VAR T1 = GENERATESERIES ( 1, Length, 1 )
VAR T2 = ADDCOLUMNS ( T1, "@Item", PATHITEM ( Items2, [Value] ) )
VAR T3 =
FILTER (
T2,
VAR Length2 = LEN ( [@Item] )
VAR T4 = GENERATESERIES ( 1, Length2, 1 )
VAR T5 = ADDCOLUMNS ( T4, "@Letter", MID ( [@Item], [Value], 1 ) )
VAR T6 = FILTER ( T5, [@Letter] IN Digits )
RETURN
COUNTROWS ( T6 ) > 1
)
RETURN
CONCATENATEX ( T3, [@Item], "-" )
Hi @onedayover
If you wish to create a new column using dax you can use the following code (attached sample file)
new_source_id =
VAR Digits = SELECTCOLUMNS ( GENERATESERIES ( 0, 9, 1 ), "@Digit", [Value] & "" )
VAR String = Data[source_id]
VAR Items1 = SUBSTITUTE ( String, "_", "|" )
VAR Items2 = SUBSTITUTE ( Items1, "-", "|" )
VAR Length = PATHLENGTH ( Items2 )
VAR T1 = GENERATESERIES ( 1, Length, 1 )
VAR T2 = ADDCOLUMNS ( T1, "@Item", PATHITEM ( Items2, [Value] ) )
VAR T3 =
FILTER (
T2,
VAR Length2 = LEN ( [@Item] )
VAR T4 = GENERATESERIES ( 1, Length2, 1 )
VAR T5 = ADDCOLUMNS ( T4, "@Letter", MID ( [@Item], [Value], 1 ) )
VAR T6 = FILTER ( T5, [@Letter] IN Digits )
RETURN
COUNTROWS ( T6 ) > 1
)
RETURN
CONCATENATEX ( T3, [@Item], "-" )
Hi tamerj1, this is great work, thank you. Just one thing, how would I ensure that the leading zero isn't dropped in the new column? For example, row 4 the 107 should be 0107 as will all souce ids that start with 0.
Hi @onedayover
leading zero is never dropped in this solution. Row 4 originally does not contain a leading zero.
@onedayover , Try this code, paste this in a blank query in power bi, This will work only for numbers.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("hZJRC4IwFIX/Suw5YRqRPQ7qobeC3kTEcpVQKirRz0/NbefqhV4c9/vGztkwikSmn7rVifLFUixEvLRkrw6JSma4SYvsUn4slr7cdMOwmNlzmyjPX1VZt82Mn846vT6Ou5loe54X95mo6vKW6TfyseC0EGAuHzVTGzVXBj13i2C17p9wWMwMOZS7epTDwVRAIyrc81g+Np0WAszlo2Zqo+bKoOduofww6OZhMTPkUO7qUQ4HUwGNrLD/Ow0GzOWgZuqh/hPKtpXSD73pf23Y7z5yG3jDx+2wTMTxFw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [source_id = _t, new_source_id = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"source_id", type text}, {"new_source_id", type text}}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type", "source_id", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"source_id.1", "source_id.2", "source_id.3"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"source_id.1", type text}, {"source_id.2", type text}, {"source_id.3", type text}}),
#"Split Column by Delimiter1" = Table.SplitColumn(#"Changed Type1", "source_id.1", Splitter.SplitTextByDelimiter("_", QuoteStyle.Csv), {"source_id.1.1", "source_id.1.2", "source_id.1.3", "source_id.1.4"}),
#"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"source_id.1.1", type text}, {"source_id.1.2", type text}, {"source_id.1.3", type text}, {"source_id.1.4", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type2", "Custom", each Text.Combine ({if (try Number.FromText([source_id.1.1]) otherwise null) <> null then [source_id.1.1] else null ,
if (try Number.FromText([source_id.1.2]) otherwise null) <> null then [source_id.1.2] else null,
if (try Number.FromText([source_id.1.3]) otherwise null) <> null then [source_id.1.3] else null,
if (try Number.FromText([source_id.1.4]) otherwise null) <> null then [source_id.1.4] else null,
if (try Number.FromText([source_id.2]) otherwise null) <> null then [source_id.2] else null,
if (try Number.FromText([source_id.3]) otherwise null) <> null then [source_id.3] else null
}, "-"))
in
#"Added Custom"
Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.
Check out the August 2024 Power BI update to learn about new features.
Learn from experts, get hands-on experience, and win awesome prizes.
User | Count |
---|---|
21 | |
18 | |
15 | |
14 | |
13 |
User | Count |
---|---|
38 | |
34 | |
21 | |
19 | |
18 |