Check your eligibility for this 50% exam voucher offer and join us for free live learning sessions to get prepared for Exam DP-700.
Get StartedDon't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.
I am struggling with how to organize the data from the database I can connect to and wondering if someone has any suggestions. I have attached some sample data
The database has 8 columns with answers to form questions. Each answer is it's own line. I need to pivot the table so it is one line with the answers all one one line based on the formcode-seq. The issue I am running into is if a mistake is made on an answer and the person goes back and fixes it, there are two lines with the same answer code and I only need the LAST answer. In the sample data - the code Stop1 has two answers for the same form-seq.
Then the date should be the date from the first entry on that form.
Solved! Go to Solution.
Hi @kattlees ,
this code should do if your data is not too large:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("rdNRa4MwEAfwryI+C96lxuR8dg/tViZzb6UP0gYsrComfv9FNphp52xkL+FIyI/Lkf/hEDIuhYAwCrHo2xPaAmQMFDNACoAyEHbraV9kDAWRrRlKuz6/kBxPxgvF0J/qSqtzoIeu+7goHR6jqazNPl8ll9eLqaNg19bNHVm+ryLzVlmwapQL5pVRD3l040kgu+dafdvdWzxdtIgnrrRt3q7rukrAlV4H8z8tFdWg102KAF2qNCvnhMTZ75SMcfMl4SZDuJUYLD1vmgKEbyrN4IciPtZMTD8W80yBn/xQCvzI5RT4eRLhjxT4WZgizMbAl4LZHPhKCZ8PgndXM9/XnxLMtnX8BA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [customer = _t, code = _t, #"Entry Date Time" = _t, nurse = _t, seq = _t, formcd = _t, formseq = _t, ans = _t]), ChangeType = Table.TransformColumnTypes(Source,{{"customer", Int64.Type}, {"code", type text}, {"Entry Date Time", type text}, {"nurse", type text}, {"seq", Int64.Type}, {"formcd", type text}, {"formseq", Int64.Type}, {"ans", type text}}), #"Sorted Rows" = Table.Buffer(Table.Sort(ChangeType,{{"Entry Date Time", Order.Descending}})), #"Removed Duplicates" = Table.Distinct(#"Sorted Rows", {"customer", "code", "formcd", "formseq"}), #"Changed Type with Locale" = Table.TransformColumnTypes(#"Removed Duplicates", {{"Entry Date Time", type datetime}}, "en-US"), #"Changed Type1" = Table.TransformColumnTypes(#"Changed Type with Locale",{{"Entry Date Time", type date}}), #"Removed Columns" = Table.RemoveColumns(#"Changed Type1",{"Entry Date Time", "nurse", "seq"}), #"Pivoted Column" = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns"[code]), "code", "ans"), #"Merged Queries" = Table.NestedJoin(#"Pivoted Column", {"customer", "formcd", "formseq"}, #"Changed Type1", {"customer", "formcd", "formseq"}, "Pivoted Column", JoinKind.LeftOuter), #"Added Custom" = Table.AddColumn(#"Merged Queries", "Date", each List.Min([Pivoted Column][Entry Date Time])), #"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"Pivoted Column"}) in #"Removed Columns1"
Imke Feldmann (The BIccountant)
If you liked my solution, please give it a thumbs up. And if I did answer your question, please mark this post as a solution. Thanks!
How to integrate M-code into your solution -- How to get your questions answered quickly -- How to provide sample data -- Check out more PBI- learning resources here -- Performance Tipps for M-queries
Hi there,
Could you please copy your data in here so I can model it for you ?
Regards,
robbe
Thanks so much. I am open to any ideas.
customer | code | Entry Date Time | nurse | seq | formcd | formseq | ans |
258770 | 1Proc1 | 8/9/2019 9:07 | EMP:21799 | 218 | KL987 | 1 | Purchased supplies |
258770 | 1stMD1 | 8/9/2019 9:07 | EMP:21799 | 218 | KL987 | 1 | Smith, John |
258770 | 1stST1 | 8/9/2019 9:07 | EMP:21799 | 218 | KL987 | 1 | Doe, Jane |
258770 | Date1 | 8/9/2019 9:07 | EMP:21799 | 219 | KL987 | 1 | 080919 |
258770 | Drop1 | 8/9/2019 9:56 | EMP:21799 | 219 | KL987 | 1 | 0954 |
258770 | InRm1 | 8/9/2019 9:07 | EMP:21799 | 219 | KL987 | 1 | 0840 |
258770 | Out1 | 8/9/2019 9:56 | EMP:21799 | 219 | KL987 | 1 | 0954 |
258770 | Pause1 | 8/9/2019 9:07 | EMP:21799 | 219 | KL987 | 1 | 0901 |
258770 | Stop1 | 8/9/2019 9:56 | EMP:21799 | 219 | KL987 | 1 | 01952 |
258770 | Stop1 | 8/13/2019 13:10 | EMP:21799 | 220 | KL987 | 1 | 0954 |
258770 | 1Proc1 | 8/10/2019 16:00 | EMP:21950 | 278 | KL987 | 2 | Purchased supplies |
258770 | 1stMD1 | 8/10/2019 16:00 | EMP:21950 | 278 | KL987 | 2 | Smith, John |
258770 | 1stST1 | 8/10/2019 16:00 | EMP:21950 | 278 | KL987 | 2 | Doe, Jane |
258770 | Date1 | 8/10/2019 16:00 | EMP:21950 | 278 | KL987 | 2 | 081019 |
258770 | Drop1 | 8/10/2019 16:00 | EMP:21950 | 278 | KL987 | 2 | 1610 |
258770 | InRm1 | 8/10/2019 16:00 | EMP:21950 | 278 | KL987 | 2 | 1600 |
258770 | Out1 | 8/10/2019 16:00 | EMP:21950 | 278 | KL987 | 2 | 1645 |
258770 | Pause1 | 8/10/2019 16:00 | EMP:21950 | 278 | KL987 | 2 | 1602 |
258770 | Stop1 | 8/10/2019 16:00 | EMP:21950 | 278 | KL987 | 2 | 1725 |
1 More thing.
How do you identify a mistake correction? --> 2 times the same value in a row?
What is the nurse field? should be taken into account?
@ImkeF Helped me with some advanced M query in the past. If you're lucky she will have a look here! 🙂
A mistake correction is one with the same form, formseq and code but a different time.
If I have multiple entries for the same customer with the same form, form seq and code, i always want the value with the LAST entry date time. Would also be a higher seq #.
The nurse field doesn't have to be taken into account. There can be multiple ones for the same customer/form seq code unless you can put that value next to the entry so we know what nurse did it.
Hi @kattlees ,
this code should do if your data is not too large:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("rdNRa4MwEAfwryI+C96lxuR8dg/tViZzb6UP0gYsrComfv9FNphp52xkL+FIyI/Lkf/hEDIuhYAwCrHo2xPaAmQMFDNACoAyEHbraV9kDAWRrRlKuz6/kBxPxgvF0J/qSqtzoIeu+7goHR6jqazNPl8ll9eLqaNg19bNHVm+ryLzVlmwapQL5pVRD3l040kgu+dafdvdWzxdtIgnrrRt3q7rukrAlV4H8z8tFdWg102KAF2qNCvnhMTZ75SMcfMl4SZDuJUYLD1vmgKEbyrN4IciPtZMTD8W80yBn/xQCvzI5RT4eRLhjxT4WZgizMbAl4LZHPhKCZ8PgndXM9/XnxLMtnX8BA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [customer = _t, code = _t, #"Entry Date Time" = _t, nurse = _t, seq = _t, formcd = _t, formseq = _t, ans = _t]), ChangeType = Table.TransformColumnTypes(Source,{{"customer", Int64.Type}, {"code", type text}, {"Entry Date Time", type text}, {"nurse", type text}, {"seq", Int64.Type}, {"formcd", type text}, {"formseq", Int64.Type}, {"ans", type text}}), #"Sorted Rows" = Table.Buffer(Table.Sort(ChangeType,{{"Entry Date Time", Order.Descending}})), #"Removed Duplicates" = Table.Distinct(#"Sorted Rows", {"customer", "code", "formcd", "formseq"}), #"Changed Type with Locale" = Table.TransformColumnTypes(#"Removed Duplicates", {{"Entry Date Time", type datetime}}, "en-US"), #"Changed Type1" = Table.TransformColumnTypes(#"Changed Type with Locale",{{"Entry Date Time", type date}}), #"Removed Columns" = Table.RemoveColumns(#"Changed Type1",{"Entry Date Time", "nurse", "seq"}), #"Pivoted Column" = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns"[code]), "code", "ans"), #"Merged Queries" = Table.NestedJoin(#"Pivoted Column", {"customer", "formcd", "formseq"}, #"Changed Type1", {"customer", "formcd", "formseq"}, "Pivoted Column", JoinKind.LeftOuter), #"Added Custom" = Table.AddColumn(#"Merged Queries", "Date", each List.Min([Pivoted Column][Entry Date Time])), #"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"Pivoted Column"}) in #"Removed Columns1"
Imke Feldmann (The BIccountant)
If you liked my solution, please give it a thumbs up. And if I did answer your question, please mark this post as a solution. Thanks!
How to integrate M-code into your solution -- How to get your questions answered quickly -- How to provide sample data -- Check out more PBI- learning resources here -- Performance Tipps for M-queries
Wow - where do I begin! I have never done the advanced editor before so I am excited to try this.
one big thing is that the entry date and entry time are actually two columns combined nsma1_dt and nsma1_tm. I had merged them in the database prior to getting the data for you so my apologies there.
Since i have never done the editor before which part do I change to pull from my actual database? I'm assuming it's the very first part and I change my source to the actual database?
Thank you so much for your help!
Hi @kattlees ,
once you've pasted the code into the advanced editor, you can leave it and edit the steps from the UI where needed. You have to edit the first step "Source" to connect to your DB. Please check this video - hopefully it helps: http://community.powerbi.com/t5/Webinars-and-Video-Gallery/Power-BI-Forum-Help-How-to-integrate-M-co...
Not sure about your remark about the date and time: Do you need a new code here?
Imke Feldmann (The BIccountant)
If you liked my solution, please give it a thumbs up. And if I did answer your question, please mark this post as a solution. Thanks!
How to integrate M-code into your solution -- How to get your questions answered quickly -- How to provide sample data -- Check out more PBI- learning resources here -- Performance Tipps for M-queries
@ImkeF I was super excited for your code and got it to connect to database and pivot as I wanted. But I just noticed it isn't keeping the last entered record. See attached screenshots when I put it to just one record.
When I click on Remove Duplicates - it removed the wrong one. Should always KEEP the one with the higher seq #.
Hi @kattlees
Thats because I've sorted by Entry Date Time and not by that number, sorry about that. So you have to adjust the 3rd step like so:
#"Sorted Rows" = Table.Buffer(Table.Sort(ChangeType,{{"nsma1_formsec", Order.Descending}})),
Imke Feldmann (The BIccountant)
If you liked my solution, please give it a thumbs up. And if I did answer your question, please mark this post as a solution. Thanks!
How to integrate M-code into your solution -- How to get your questions answered quickly -- How to provide sample data -- Check out more PBI- learning resources here -- Performance Tipps for M-queries
You have been a huge help so thank you, but one more question. Is there a way to keep the earliest entry date and time for a patnum-form-code as a column?
Thank you
Thank you for the video. I will watch it right away.
As for the date and time - not sure if it matters but in the database, there are TWO Columns. nsma1_dt and nsma1_tm so the date and time are separated - not a combined field.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Prices go up Feb. 11th.
Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.
User | Count |
---|---|
144 | |
85 | |
65 | |
51 | |
45 |
User | Count |
---|---|
217 | |
88 | |
81 | |
65 | |
56 |