The Eisenhower Matrix is a task prioritization framework that helps decision-makers focus on what truly matters instead of reacting to everything.
- It classifies work using two dimensions:
- Urgency – How time-sensitive the task is
- Importance – How much business impact the task has
- The 4 Quadrants
-
Quadrant Meaning Action Urgent + Important Critical tasks Do Now Important, Not Urgent Strategic work Plan Urgent, Not Important Interruptions Delegate Not Urgent, Not Important Low value Remove
-
- Business Examples
- Do Now → Production server down
- Plan → Employee training roadmap
- Delegate → Routine reporting emails
- Remove → Unproductive meetings
- This project implements an advanced Eisenhower Matrix in Power BI to help organizations prioritize tasks dynamically based on urgency and importance, instead of relying on static rules or scatter plots.
- Unlike traditional Eisenhower visuals, this solution:
- Uses What-If thresholds for urgency & importance
- Avoids scatter-plot legend limitations
- Implements a 4-quadrant canvas layout
- Provides actionable KPIs, task tables, and drill-through insights
- Automatically adapts recommendations as thresholds change
- The result is a manager-ready prioritization dashboard that answers:
- What needs immediate action, what should be planned, what can be delegated, and what should be eliminated—right now?
- Source Files
- Tasks are stored department-wise as separate Excel files.
- Each file contains similar data but may have inconsistent column names, which are standardized during ingestion.
- 1️⃣ Folder Parameter
- A parameterized folder path allows plug-and-play scalability:
#"Folder Path" = "C:\Users\user\Desktop\Dept Wise Task"
- A parameterized folder path allows plug-and-play scalability:
- 2️⃣ Combine All Excel Files
- Key logic:
- Read all files from folder
Source = Folder.Files(#"Folder Path") - Convert binary Excel content into tables
// convert Binary type of Content column to Table type BinaryToTable = Table.TransformColumns(Source, {{"Content", each Excel.Workbook(_)}}) - Extract all sheets
- Combine into one unified dataset
- Promote headers
// select each Table in Content column and select the Data column and convert it Final table with promoting headers #"Tbl to actual Table" = Table.TransformColumns( BinaryToTable, { { "Content", (t as table) => let sheet = Table.SelectRows(t, each [Kind] = "Sheet"), combine = Table.Combine(sheet[Data]), promote = Table.PromoteHeaders(combine) in promote } } )
- Read all files from folder
- Key logic:
- 3️⃣ Column Name Standardization
- Since departments may use different column headers:
- All unique column names are extracted
let Source = Value.Metadata(#"Dept Wise Task"), COLNAME = Source[COLNAME], // extracting each table col names #"Unique Col Names" = List.Distinct( List.Combine(Table.TransformColumns(COLNAME, {{"Content", each Table.ColumnNames(_)}})[Content]) ) in #"Unique Col Names" - A rename mapping (NewColName) is applied
let Source = Excel.CurrentWorkbook(){[Name="ColName"]}[Content], Custom1 = Table.ToRows(Source) in Custom1 - Missing columns are ignored safely
#"Rename Table Cols" = Table.TransformColumns( #"Tbl to actual Table", {{"Content", each Table.RenameColumns(_, NewColName, MissingField.Ignore)}} ) - This makes the model robust against schema drift.
- All unique column names are extracted
- Since departments may use different column headers:
- 4️⃣ Final Output Table
- Unified dataset (Dept_Wise_Task) with clean types:
#"Select Cols" = Table.SelectColumns(#"Rename Table Cols", {"Content", "Name"}), #"Expanded Content" = Table.ExpandTableColumn( #"Select Cols", "Content", { "Task ID", "Task Name", "Department", "Owner", "Urgency Score", "Importance Score", "Due Date", "Estimated Hour", "Status", "Task Type", "Created Date" } ), #"Changed Type" = Table.TransformColumnTypes( #"Expanded Content", { {"Task ID", type text}, {"Task Name", type text}, {"Department", type text}, {"Owner", type text}, {"Urgency Score", Decimal.Type}, {"Importance Score", Decimal.Type}, {"Due Date", type date}, {"Estimated Hour", Int64.Type}, {"Status", type text}, {"Task Type", type text}, {"Created Date", type date}, {"Name", type text} } ) meta [COLNAME = #"Tbl to actual Table"] - the last
metais for reserver the intermediate data to use in future case, like we had used the same in the unique column extraction.
- Unified dataset (Dept_Wise_Task) with clean types:
- 5️⃣ Final Cleaned Table
- Power BI File
- 🧮 Base Measure
- Total Estimated Hours
_Total Estimated Hours = SUM ( Dept_Wise_Task[Estimated Hour] ) - Total Tasks
_Total Tasks = COUNT ( Dept_Wise_Task[Task ID] )
- Total Estimated Hours
- 🎚️ Dynamic What-If Parameters
- Urgency Threshold
Urgency Threshold = GENERATESERIES(1, 10, 1) Urgency Threshold Value = SELECTEDVALUE('Urgency Threshold'[Urgency Threshold], 7) - Importance Threshold
Importance Threshold = GENERATESERIES(1, 10, 1) Importance Threshold Value = SELECTEDVALUE('Importance Threshold'[Importance Threshold], 7) - 🔑 These sliders redefine what “urgent” and “important” mean in real time.
- Urgency Threshold
- 🧩 Eisenhower Logic (Core Intelligence)
- Quadrant Classification\
_Eisenhower Quadrant = VAR IsUrgent = SELECTEDVALUE(Dept_Wise_Task[Urgency Score]) >= 'Urgency Threshold'[Urgency Threshold Value] VAR IsImportant = SELECTEDVALUE(Dept_Wise_Task[Importance Score]) >= 'Importance Threshold'[Importance Threshold Value] RETURN SWITCH ( TRUE(), IsUrgent && IsImportant, "Do Now", NOT IsUrgent && IsImportant, "Plan", IsUrgent && NOT IsImportant, "Delegate", NOT IsUrgent && NOT IsImportant, "Eliminate" ) - Boolean Flags (Performance-Optimized)
- Boolean Flags (Performance-Optimized)
- _Is Do Now
- _Is Plan
- _Is Delegate
- _Is Eliminate
- These are reused across KPIs, tables, narratives, and drill-throughs.
- Boolean Flags (Performance-Optimized)
- Quadrant Classification\
- 📊 Main Canvas – 4 Quadrant Layout
- Why Not Scatter Plot?
- Scatter charts fail when:
- Thresholds change dynamically
- Legends need to reflect quadrant logic
- Business users need lists, not dots
- Scatter charts fail when:
- Solution: Quadrant Canvas
- Each quadrant includes:
- KPI cards (Task Count & Hours)
- Task table with conditional formatting
- Clear action-oriented titles
- Each quadrant includes:
- Why Not Scatter Plot?
- 🔴 DO NOW – Immediate Execution Required
- High Urgency + High Importance
- KPIs
- Tasks requiring immediate attention
- Total workload (hours)
- Table Highlights
- Overdue tasks in red
- Sorted by Due Date
- Measure
_Is Do Now = IF ( MAX ( Dept_Wise_Task[Urgency Score] ) >= [Urgency Threshold Value] && MAX ( Dept_Wise_Task[Importance Score] ) >= [Importance Threshold Value], 1, 0 )_Do Now Task = CALCULATE( [_Total Tasks], FILTER( Dept_Wise_Task, [_Is Do Now] = 1 ) )_Do Now Hours = CALCULATE( [_Total Estimated Hours], FILTER( Dept_Wise_Task, [_Is Do Now] = 1 ) )
- 🟣 PLAN – Schedule & Protect
- Low Urgency + High Importance
- Focus:
- Strategic tasks
- Prevent future crises
- Block calendar time
- Measure
_Is Plan = IF ( MAX ( Dept_Wise_Task[Urgency Score] ) < [Urgency Threshold Value] && MAX ( Dept_Wise_Task[Importance Score] ) >= [Importance Threshold Value], 1, 0 )_Plan Task = CALCULATE( [_Total Tasks], FILTER( Dept_Wise_Task, [_Is Plan] = 1 ) )_Plan Hours = CALCULATE( [_Total Estimated Hours], FILTER( Dept_Wise_Task, [_Is Plan] = 1 ) )
- 🟠 DELEGATE – Assign or Automate
- High Urgency + Low Importance
- Focus:
- Reduce manager workload
- Automate or reassign
- Measure
_Is Delegate = IF ( MAX ( Dept_Wise_Task[Urgency Score] ) >= [Urgency Threshold Value] && MAX ( Dept_Wise_Task[Importance Score] ) < [Importance Threshold Value], 1, 0 )_Delegate Task = CALCULATE( [_Total Tasks], FILTER( Dept_Wise_Task, [_Is Delegate] = 1 ) )_Delegate Hours = CALCULATE( [_Total Estimated Hours], FILTER( Dept_Wise_Task, [_Is Delegate] = 1 ) )
- ⚫ ELIMINATE – Low Value Work
- Low Urgency + Low Importance
- Focus:
- Stop doing
- Reduce noise
- Capacity optimization
- Measure
_Is Eliminate = IF ( MAX ( Dept_Wise_Task[Urgency Score] ) < [Urgency Threshold Value] && MAX ( Dept_Wise_Task[Importance Score] ) < [Importance Threshold Value], 1, 0 )_Eliminate Task = CALCULATE( [_Total Tasks], FILTER( Dept_Wise_Task, [_Is Eliminate] = 1 ) )_Eliminate Hours = CALCULATE( [_Total Estimated Hours], FILTER( Dept_Wise_Task, [_Is Eliminate] = 1 ) )
- 🧠 Executive Narrative (Dynamic Title)
_Canvas Title = VAR u = 'Urgency Threshold'[Urgency Threshold Value] VAR i = 'Importance Threshold'[Importance Threshold Value] VAR cnt = COUNTROWS ( FILTER ( Dept_Wise_Task, [_Is Do Now] = 1 && Dept_Wise_Task[Task Type] <> "Completed" ) ) VAR hrs = SUMX ( FILTER ( Dept_Wise_Task, [_Is Do Now] = 1 && Dept_Wise_Task[Task Type] <> "Completed" ), [_Do Now Hours] ) VAR dept = CONCATENATEX ( TOPN ( 3, ADDCOLUMNS ( FILTER ( Dept_Wise_Task, [_Is Do Now] = 1 && Dept_Wise_Task[Task Type] <> "Completed" ), "Rank", RANKX ( FILTER ( Dept_Wise_Task, [_Is Do Now] = 1 && Dept_Wise_Task[Task Type] <> "Completed" ), Dept_Wise_Task[Due Date], , ASC, DENSE ) ), [Rank], ASC ), Dept_Wise_Task[Department], ", ", Dept_Wise_Task[Estimated Hour], DESC ) RETURN "At current thresholds (Urgency ≥ " & u & ", Importance ≥ " & i & "), " & cnt & " tasks (" & hrs & " hrs) require immediate action, primarily in " & dept & "."- This converts raw data into a management-ready insight sentence.
- 🔎 Drill-Through: Task Intelligence Page
- Clicking any task opens a decision explainer page.
- Shown Metrics
- Days to due / overdue
- Urgency gap vs threshold
- Importance gap vs threshold
- Current quadrant
- Quadrant explanation
- Recommended action
- Example: PLAN Quadrant
- “Important work that should be scheduled and protected from interruptions.”
- Example: DO NOW Quadrant
- “Execute immediately and monitor daily.”
- This turns the dashboard into a coaching system, not just a report.
- 🎨 Conditional Formatting & UX
- Quadrant color logic via DAX
- Overdue highlighting
- Clear slicers:
- Department
- Owner
- Status
- Task Type
- “Clear all slicers” UX button
- ✔ Replaces gut-feel prioritization
- ✔ Makes urgency & importance adjustable
- ✔ Reveals hidden workload concentration
- ✔ Encourages elimination of low-value work
- ✔ Enables delegation conversations
- ✔ Scales across teams & departments
- Dynamic thresholds (rarely implemented correctly)
- Canvas-based Eisenhower layout
- Narrative DAX (not just metrics)
- Drill-through with recommendations
- Real-world task management use case
- Production-grade Power Query design
- SLA breach prediction
- Owner capacity scoring
- Weekly trend movement between quadrants
- Automation candidate flag
- Power Automate alerts for “Do Now” overload
- This is portfolio-grade Power BI work.
- It demonstrates:
- Strong DAX modeling
- Real business thinking
- UX awareness
- Storytelling with data