Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!Vote for your favorite vizzies from the Power BI Dataviz World Championship submissions. Vote now!
HI all
Currently we have an excel file with customer details and a CUID with a unique number. CID is unique for the whole customer
What I need is from that file to create a table where we keep
Same row information for the Project Type = COuntry Project
And for the rest of rows (Integrations) we keep the first one with the closest date and CUID finish -i (instead of -wd or -sf)
any suggestions would be welcome
| WHAT WE HAVE | |||||||||||
| Name | CID | Customer | CUID | Country Long Name | Project Type | Project Scope | Contract Signed Date | LOA Signature Date | Implementation Window End Date | Planned # of EEs | Segment |
| Amore SA - BR - 1001141BR01 | 1001141 | Amore SA | 1001141BR01 | Brazil | Country Project | Payroll | 2022-03-31 | 50 | -- | ||
| Amore SA - BR - 1001141BR01 | 1001141 | Amore SA | 1001141BR01-wd | Brazil | Integration Project | Integration 1 | 2022-03-31 | 50 | -- | ||
| Amore SA - BR - 1001141BR01 | 1001141 | Amore SA | 1001141BR01-sf | Brazil | Integration Project | Integration 2 | 2025-05-30 | 50 | -- | ||
| WHAT WE WANT | |||||||||||
| Amore SA - BR - 1001141BR01 | 1001141 | Accor SA | 1001141BR01 | Brazil | Country Project | Payroll | 2022-03-31 | 50 | -- | ||
| Amore SA - BR - 1001141BR01 | 1001141 | Amore SA | 1001141BR01i | Brazil | Integration Project | ADP Celergo Integration 1 | 2022-03-31 | 50 | -- |
Solved! Go to Solution.
Hello @romovaro ...
It is possible to solve this using Power Query in Excel or Power BI (Microsoft Fabric), by creating a transformation logic to consolidate the rows according to your rule. I will explain how to do it. Try this:
--
let
// 1. Source: adjust to your table name
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
// 2. Change column types (adjust as needed)
ChangedTypes = Table.TransformColumnTypes(Source,
{
{"Name", type text},
{"CID", type text},
{"Client", type text},
{"CUID", type text},
{"Country Long Name", type text},
{"Project Type", type text},
{"Project Scope", type text},
{"Contract Signing Date", type date},
{"LOA Signing Date", type date},
{"Implementation Window End Date", type date},
{"Planned # of EEs", Int64.Type},
{"Segment", type text}
}
),
// 3. Filter Country Projects
CountryProjects = Table.SelectRows(ChangedTypes, each [Project Type] = "Country Project"),
// 4. Filter Integration Projects
IntegrationProjects = Table.SelectRows(ChangedTypes, each [Project Type] = "Integration Project"),
// 5. Group by CID and keep the row with the earliest Contract Signing Date
Grouped = Table.Group(IntegrationProjects, {"CID"},
{
{"EarliestDate", each Table.Sort(_, {{"Contract Signing Date", Order.Ascending}}){0}, type table}
}
),
// 6. Expand the selected row
Expanded = Table.ExpandTableColumn(Grouped, "EarliestDate",
{"Name", "CID", "Client", "CUID", "Country Long Name", "Project Type", "Project Scope",
"Contract Signing Date", "LOA Signing Date", "Implementation Window End Date",
"Planned # of EEs", "Segment"}
),
// 7. Adjust CUID to end with "i"
AdjustedCUID = Table.TransformColumns(Expanded,
{
{"CUID", each Text.BeforeDelimiter(_, "-") & "i", type text}
}
),
// 8. Combine Country Projects + Adjusted Integration Projects
FinalResult = Table.Combine({CountryProjects, AdjustedCUID})
in
FinalResult
--
Hoe to use:
I think this code will help you.
Don’t forget the kudos, it costs you nothing and we help each other. Cheers.
Hi @romovaro,
Thank you for posting your query in the Microsoft Fabric Community Forum. Just replace your current Step 5 (the Grouped step) with these two lines:
IntegrationFuture = Table.SelectRows(IntegrationProjects, each [Actual/Schedule Go Live] <> null and [Actual/Schedule Go Live] > Date.From(DateTime.LocalNow())),
Grouped = Table.Group(IntegrationFuture, {"CID"}, { {"EarliestDate", each Table.FirstN(Table.Sort(_, {{"Actual/Schedule Go Live", Order.Ascending}}), 1), type table} })
That will fix the error and give you exactly the earliest future Go Live date per CID.
If you still get any error after this change, please share the exact error message or a screenshot.
Best regards,
Ganesh Singamshetty.
Hello @romovaro ...
It is possible to solve this using Power Query in Excel or Power BI (Microsoft Fabric), by creating a transformation logic to consolidate the rows according to your rule. I will explain how to do it. Try this:
--
let
// 1. Source: adjust to your table name
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
// 2. Change column types (adjust as needed)
ChangedTypes = Table.TransformColumnTypes(Source,
{
{"Name", type text},
{"CID", type text},
{"Client", type text},
{"CUID", type text},
{"Country Long Name", type text},
{"Project Type", type text},
{"Project Scope", type text},
{"Contract Signing Date", type date},
{"LOA Signing Date", type date},
{"Implementation Window End Date", type date},
{"Planned # of EEs", Int64.Type},
{"Segment", type text}
}
),
// 3. Filter Country Projects
CountryProjects = Table.SelectRows(ChangedTypes, each [Project Type] = "Country Project"),
// 4. Filter Integration Projects
IntegrationProjects = Table.SelectRows(ChangedTypes, each [Project Type] = "Integration Project"),
// 5. Group by CID and keep the row with the earliest Contract Signing Date
Grouped = Table.Group(IntegrationProjects, {"CID"},
{
{"EarliestDate", each Table.Sort(_, {{"Contract Signing Date", Order.Ascending}}){0}, type table}
}
),
// 6. Expand the selected row
Expanded = Table.ExpandTableColumn(Grouped, "EarliestDate",
{"Name", "CID", "Client", "CUID", "Country Long Name", "Project Type", "Project Scope",
"Contract Signing Date", "LOA Signing Date", "Implementation Window End Date",
"Planned # of EEs", "Segment"}
),
// 7. Adjust CUID to end with "i"
AdjustedCUID = Table.TransformColumns(Expanded,
{
{"CUID", each Text.BeforeDelimiter(_, "-") & "i", type text}
}
),
// 8. Combine Country Projects + Adjusted Integration Projects
FinalResult = Table.Combine({CountryProjects, AdjustedCUID})
in
FinalResult
--
Hoe to use:
I think this code will help you.
Don’t forget the kudos, it costs you nothing and we help each other. Cheers.
Thanks CPCARDOSO
I tried. this is my code:
let
// 1. Source: adjust to your table name
Source = Excel.Workbook(File.Contents("C:\Users\rmontem\OneDrive - Automatic Data Processing Inc\Desktop\testdata.xlsx"), null, true),
Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]),
// 2. Change column types (adjust as needed)
ChangedTypes = Table.TransformColumnTypes(#"Promoted Headers",{{"Name", type text}, {"CID", Any.Type}, {"Customer", type text}, {"CUID", type any}, {"Local Entity Name", type text}, {"Country Long Name", type text}, {"Work Type", type text}, {"Project Type", type text}, {"Project Scope", type text}, {"Contract Signed Date", type date}, {"LOA Signature Date", type any}, {"Implementation Window End Date", type any}, {"Planned # of EEs", Int64.Type}, {"Segment", type text}, {"Client Segment", type text}, {"Delivery Owner", type text}, {"Work Region", type text}, {"No. of Regular Cycles", type text}, {"Number of payruns per year", type any}, {"Roll Call Status", type text}, {"Roll Call Date", type date}, {"GV in client scope", type any}, {"Kick Off Date", type any}, {"Status", type text}, {"Actual/Schedule Go Live", type date}, {"Go live risk level", type text}, {"SR no. of GLD Change Request", type any}, {"Reason no SGLD/changed SGLD or project not green", type text}, {"Backlog assessment", type text}, {"Phase of change", type any}, {"GMV Portal Setup", type text}, {"Comment", type text}, {"Invoicing Requirements", type text}, {"Date T2S accepted", type any}, {"Sync/Desync with payroll project", type text}, {"Optional Integration Features", type any}, {"Sales Representative", type any}, {"Sales Office", type any}, {"Project Manager / Coordinator", type text}, {"Implementation Manager", type text}, {"Regional PM", type any}, {"Regional PM Manager", type any}, {"Implementation Consultant", type text}, {"Implementation Consultant Manager", type any}, {"Partner Name ", type text}, {"Global Solution Designer (GSD)", type any}, {"HQ Country", type text}, {"CAM Region", type text}, {"Client Distinction for NPS", type any}, {"T2S Type", type any}, {"CAM office", type text}, {"Client Account Manager (CAM)", type any}, {"Service Delivery Manager (SDM)", type any}, {"Currency", type text}, {"Start Value", type text}, {"Recurrent Starts Fee per Country (RSFC)", type text}, {"Recurrent Starts Fee per Entity (RSFE)", type text}, {"Implementation Fees", type text}, {"Sequence ID", Int64.Type}}
),
// 3. Filter Country Projects
CountryProjects = Table.SelectRows(ChangedTypes, each [Project Type] = "Country Project"),
// 4. Filter Integration Projects
IntegrationProjects = Table.SelectRows(ChangedTypes, each [Project Type] = "Integration Project"),
// 5. Group by CID and keep the row with the earliest Contract Signing Date / Actual/Schedule Go Live
Grouped = Table.Group(IntegrationProjects, {"CID"},
{
{"EarliestDate", each Table.Sort(_, {{"", Order.Ascending}}){0}, type table}
}
),
// 6. Expand the selected row
Expanded = Table.ExpandTableColumn(Grouped, "EarliestDate",
{"Name", "CID", "Client", "CUID", "Country Long Name", "Project Type", "Project Scope",
"Contract Signing Date", "LOA Signing Date", "Implementation Window End Date",
"Planned # of EEs", "Segment"}
),
// 7. Adjust CUID to end with "i"
AdjustedCUID = Table.TransformColumns(Expanded,
{
{"CUID", each Text.BeforeDelimiter(_, "-") & "i", type text}
}
),
// 8. Combine Country Projects + Adjusted Integration Projects
FinalResult = Table.Combine({CountryProjects, AdjustedCUID})
in
FinalResult
it seems getting error in Step5
BTW the date I need to show is the earliest Actual/Schedule Go Live", type date
earliest date but in the future.
thanks
Please show an example of the result you want so we know exactly what data you want to keep and how you want it arranged.
Regards
Phil
Proud to be a Super User!
HI Philip
see below table sample:
| Name | CID | Customer | CUID | Country Long Name | Project Type | Project Scope | Contract Signed Date | LOA Signature Date | Kick Off Date | Status | Actual/Schedule Go Live |
Renor SA - BR - 1001141BR01 | 1001141 | Renor SA | 1001141BR01 | Brazil | Country Project | Payroll | 3/31/2025 | On hold | |||
Renor SA - BR - 1001141BR01i | 1001141 | RenorSA | 1001141BR01-wd | Brazil | Integration Project | Integration WD | 3/31/2025 | On hold | 12/31/2025 | ||
| Renor SA - BR - 1001141BR01i | 1001141 | Renor SA | 1001141BR01-sf | Brazil | Integration Project | Integration SF | 5/30/2026 | On hold | 5/30/2026 |
| AMOR SA - BR - 1001141BR01 | 1001142 | Amor SA | 1001142BR01 | Brazil | Country Project | Payroll | 5/31/2024 | On hold | |||
AMOR SA - BR - 1001141BR02 | 1001142 | Amor SA | 1001142BR01-wd | Brazil | Integration Project | Integration WD | 3/31/2025 | Live | 3/31/2025 | ||
| AMOR SA - BR - 1001141BR03 | 1001142 | Amor SA | 1001142BR01-or | Brazil | Integration Project | Integration OR | 5/30/2027 | Under Implementation | 3/31/2026 |
I started with a split: Integration and not integration
| RenorSA | 1001141BR01-wd |
| Renor SA | 1001141BR01-sf |
I created a formula counting the days
| Name | CID | Customer | CUID | Country Long Name | Project Type | Project Scope | Contract Signed Date | LOA Signature Date | Kick Off Date | Status | Actual/Schedule Go Live |
Renor SA - BR - 1001141BR01 | 1001141 | Renor SA | 1001141BR01 | Brazil | Country Project | Payroll | 3/31/2025 | On hold |
Renor SA - BR - 1001141BR01i | 1001141 | RenorSA | 1001141BR01-wd | Brazil | Integration Project | Integration WD | 3/31/2025 | On hold | 12/31/2025 |
vvv
I would use Power Query to separate the whole table into different tables (queries), one for each customer. Then sort it descending by date, delete all rows keeping only the first one, and then replace the value of the one column.
And after that you can append all the queries into a new one. Set all other queries to not load to the model.
Vote for your favorite vizzies from the Power BI World Championship submissions!
If you love stickers, then you will definitely want to check out our Community Sticker Challenge!
Check out the January 2026 Power BI update to learn about new features.
| User | Count |
|---|---|
| 64 | |
| 53 | |
| 42 | |
| 20 | |
| 17 |
| User | Count |
|---|---|
| 121 | |
| 103 | |
| 47 | |
| 30 | |
| 24 |