Forum Discussion
Usman
8 years agoFrequent Visitor
Matrix
Hi, how we can matrix in Power query? I want dates from a table in rows and all the employees from another table in columns. Basically I want see who is assigned a job and who is free. The table which...
- 8 years ago
Hi Usman,
You need to create a thirt table for a calendar you can do it in Excel or follow this link to make the custom calendar in Power query.
- In Advance Mode on Power query editor create the link to the 3 tables
- On the line of the Projects do the following steps:
- Unpivot Projects columns
- Remove Column attibute (name of the projects)
- Merge the Employes table with the Projects table
- Expand the date table
- Add a custom column with the following code:
Occupation = if [Removed Columns.Date] = null then "Free" else "Busy"
- Pivot Column Occupation using Maximum on Advance options
- Replace Nulls by Free
- Filter out null on column Date
- Merge Dates with previous table
- Expand Table
- Replace null
M code below:
let Employees = Excel.CurrentWorkbook(){[Name="Employees"]}[Content], Emp_Format = Table.TransformColumnTypes(Employees,{{"Employees", type text}}), Projects= Excel.CurrentWorkbook(){[Name="Projects"]}[Content], Format_Projects = Table.TransformColumnTypes(Projects,{{"Date", type date}, {"Project 1", type text}, {"Project 2", type text}, {"Project 3", type text}, {"Project 4", type text}}), Unpivot_Projects = Table.UnpivotOtherColumns(Format_Projects, {"Date"}, "Attribute", "Value"), Remove_Projects = Table.RemoveColumns(Unpivot_Projects,{"Attribute"}), Merge_Emp_Projects = Table.NestedJoin(Emp_Format,{"Employees"},Remove_Projects,{"Value"},"Removed Columns",JoinKind.LeftOuter), Expand_emp_projects = Table.ExpandTableColumn(Merge_Emp_Projects, "Removed Columns", {"Date"}, {"Date"}), Occupation = Table.AddColumn(Expand_emp_projects, "Occupation", each if [Date] = null then "Free" else "Busy" ), Pivot_col = Table.Pivot(Occupation, List.Distinct(Occupation[Employees]), "Employees", "Occupation", List.Max), Replace_Null = Table.ReplaceValue(Pivot_col,null,"Free",Replacer.ReplaceValue,{"John Peters", "Mike Dunsing", "Eric Kessler", "John Morales", "Kody Stahley", "Taran Reinert", "Tony Pedigree"}), Filter_null = Table.SelectRows(Replace_Null, each ([Date] <> null)), Dates= Excel.CurrentWorkbook(){[Name="Calendar"]}[Content], Dates_Format = Table.TransformColumnTypes(Dates,{{"Dates", type date}}), Merge_Date_Free = Table.NestedJoin(Dates_Format,{"Dates"}, Filter_null,{"Date"},"Changed Type",JoinKind.LeftOuter), Expand_Dates_Free = Table.ExpandTableColumn(Merge_Date_Free, "Changed Type", {"John Peters", "Mike Dunsing", "Eric Kessler", "John Morales", "Kody Stahley", "Taran Reinert", "Tony Pedigree"}, {"John Peters", "Mike Dunsing", "Eric Kessler", "John Morales", "Kody Stahley", "Taran Reinert", "Tony Pedigree"}), Replace_Null_free = Table.ReplaceValue(Expand_Dates_Free,null,"Free",Replacer.ReplaceValue,{"Dates", "John Peters", "Mike Dunsing", "Eric Kessler", "John Morales", "Kody Stahley", "Taran Reinert", "Tony Pedigree"}) in Replace_Null_freeSee attach a copy of the excel file (it's a we tranfer link so will only last 7 days).
See the result below:
Regards,
MFelix
MFelix
8 years agoSuper User
Hi Usman,
Although I don't know how you data is setup I assume that both tables are in the format of:
Table Dates: Date
Table Emp: Date ; Employees
- Make a merge of both tables joining by date
- Then expand the table employee
- Replace null by DELETE on colum employee
- Duplicate column employee
- Then pivot by employe copy column with the values from employee
- Delete column named DELETE
- Replace 0 by null
See M language below and result:
let
Source = Excel.CurrentWorkbook(){[Name="Dates"]}[Content],
Format_dates = Table.TransformColumnTypes(Source,{{"Dates", type date}}),
Employees = Excel.CurrentWorkbook(){[Name="Employees"]}[Content],
Format_Emp = Table.TransformColumnTypes(Employees,{{"Employee", type text}, {"Date", type date}}),
Merge = Table.NestedJoin(Format_dates,{"Dates"},Format_Emp,{"Date"},"Changed Type1",JoinKind.LeftOuter),
Expand_Emp = Table.ExpandTableColumn(Merge, "Changed Type1", {"Employee"}, {"Employee"}),
Repace_null = Table.ReplaceValue(Expand_Emp,null,"DELETE",Replacer.ReplaceValue,{"Employee"}),
Duplicate_Emp = Table.AddColumn(Repace_null, "Employee - Copy", each [Employee], type text),
Pivot = Table.Pivot(Duplicate_Emp, List.Distinct(Duplicate_Emp[#"Employee - Copy"]), "Employee - Copy", "Employee", List.Count),
Remove_additional = Table.RemoveColumns(Pivot,{"DELETE"}),
Replace_zero = Table.ReplaceValue(Remove_additional,0,null,Replacer.ReplaceValue,{"A", "B", "D", "C"})
in
Replace_zero
Tables:
Dates
Dates
| 01/01/2018 |
| 02/01/2018 |
| 03/01/2018 |
| 04/01/2018 |
| 05/01/2018 |
| 06/01/2018 |
| 07/01/2018 |
| 08/01/2018 |
| 09/01/2018 |
| 10/01/2018 |
| 11/01/2018 |
| 12/01/2018 |
| 13/01/2018 |
| 14/01/2018 |
| 15/01/2018 |
| 16/01/2018 |
| 17/01/2018 |
| 18/01/2018 |
| 19/01/2018 |
| 20/01/2018 |
| 21/01/2018 |
| 22/01/2018 |
| 23/01/2018 |
| 24/01/2018 |
| 25/01/2018 |
| 26/01/2018 |
| 27/01/2018 |
| 28/01/2018 |
| 29/01/2018 |
| 30/01/2018 |
Employees
Employee Date
| A | 01/01/2018 |
| A | 05/01/2018 |
| A | 06/01/2018 |
| B | 04/01/2018 |
| B | 09/01/2018 |
| B | 10/01/2018 |
| C | 22/01/2018 |
| C | 25/01/2018 |
| C | 26/01/2018 |
| D | 17/01/2018 |
| D | 20/01/2018 |
| D | 21/01/2018 |
Regards,
MFelix