<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: GRACE MUTHONI MWANGI</title>
    <description>The latest articles on DEV Community by GRACE MUTHONI MWANGI (@grace_muthonimwangi_9281).</description>
    <link>https://dev.to/grace_muthonimwangi_9281</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3712435%2F9bb7249b-1fa1-4751-a377-91287320ce7c.png</url>
      <title>DEV Community: GRACE MUTHONI MWANGI</title>
      <link>https://dev.to/grace_muthonimwangi_9281</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/grace_muthonimwangi_9281"/>
    <language>en</language>
    <item>
      <title>Mastering joins and window functions on PostgreSQL</title>
      <dc:creator>GRACE MUTHONI MWANGI</dc:creator>
      <pubDate>Mon, 02 Mar 2026 03:12:39 +0000</pubDate>
      <link>https://dev.to/grace_muthonimwangi_9281/mastering-joins-and-window-functions-on-postgresql-13d9</link>
      <guid>https://dev.to/grace_muthonimwangi_9281/mastering-joins-and-window-functions-on-postgresql-13d9</guid>
      <description>&lt;h4&gt;
  
  
  JOINS
&lt;/h4&gt;

&lt;p&gt;Joins are SQL clauses used to combine rows from two or more tables (or views) based on a related column.&lt;/p&gt;

&lt;p&gt;There are numerous join types in PostgreSQL. The way to determine the best join to select mainly depends on the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The output that you would like displayed from the tables that are joined, including the unmatched records.&lt;/li&gt;
&lt;li&gt;The relationship between the tables and/or views, including the common columns.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Data tables used for illustration purposes are:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefo36144tc8uwj4m7s3z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefo36144tc8uwj4m7s3z.png" alt=" " width="800" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Types of joins on PostgreSQL:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cross join&lt;/strong&gt; - This join combines every row from one table with every row of the other table. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;select p.project_name, e.salary, e.name, e.employee_id&lt;br&gt;
from sales_data.projects p &lt;br&gt;
cross join sales_data.employees e ;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This tends to create a multiplication of the results based on the row counts of the 2 tables. &lt;br&gt;
The 2 tables each have 5 rows. The end result generated by the code has 25 rows.&lt;br&gt;
This join type doesn't require the on statement that matches the common column between the 2 tables; many term it as a non-matching join.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inner join&lt;/strong&gt; - This join typically returns the matching values from both tables. This simply means that if there is no match in either table, then the row is excluded from the results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example;&lt;br&gt;
&lt;code&gt;select emp.name, dep.department_id, dep.department_name&lt;br&gt;
from sales_data.employees emp&lt;br&gt;
inner join sales_data.departments dep&lt;br&gt;
on emp.department_id = dep.department_id;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The employee called Eve is not yet assigned to any department; therefore, her name is excluded from the results.&lt;br&gt;
Additionally, the Finance department doesn't have an employee linked to it and is therefore also not displayed in the query's result.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Left outer join&lt;/strong&gt; - This join, also referred to as a left join, typically returns all the rows from the left table and the matching values from the right table (mentioned 2nd). Rows from this table appear based on the results of the table mentioned 1st, which is on the left. For example: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;select * from sales_data.projects p&lt;br&gt;
left outer join sales_data.employees e &lt;br&gt;
on p.employee_id = e.employee_id;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;&lt;code&gt;select * from sales_data.projects p&lt;br&gt;
left join sales_data.employees e &lt;br&gt;
on p.employee_id = e.employee_id;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;&lt;em&gt;left outer join&lt;/em&gt;&lt;/strong&gt; from this code returns all the rows from the project table, including the projects that aren't assigned to any particular employee. &lt;br&gt;
Additionally, not all employees appear in the query result because some employees don't have projects assigned to them yet.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Right outer join&lt;/strong&gt; - This join, also referred to as a 'right join', typically returns all rows on the right (table mentioned last) and the matching values from the left table. For example:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;select * from sales_data.projects p&lt;br&gt;
right outer join sales_data.employees e &lt;br&gt;
on p.employee_id = e.employee_id;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;&lt;code&gt;select * from sales_data.projects p&lt;br&gt;
right join sales_data.employees e &lt;br&gt;
on p.employee_id = e.employee_id;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;&lt;em&gt;right outer join&lt;/em&gt;&lt;/strong&gt; from this code returns all the rows from the Employees table positioned on the right. &lt;br&gt;
This simply means that all employees are listed and the projects they are assigned to; however, not all projects have been captured, as they aren't assigned to any employee yet.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full outer join&lt;/strong&gt; - This join, also referred to as a full join, typically returns all the rows from the tables in the query. The values of the first table mentioned typically appear on the left. For example:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;select * from sales_data.projects p &lt;br&gt;
full outer join sales_data.employees e &lt;br&gt;
on p.employee_id = e.employee_id;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;&lt;code&gt;select * from sales_data.projects p &lt;br&gt;
full join sales_data.employees e &lt;br&gt;
on p.employee_id = e.employee_id;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This code returns all the rows from the project table first, and then extra rows containing a record of the employees who aren't yet assigned to projects yet.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Natural join&lt;/strong&gt; - This join, only matching values from the tables referenced. It automaticcally ensures tables are joined on the basis of the primary key and the foreign key of the 2nd table. The only limitation is that these columns have to share a name. For example: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;select *&lt;br&gt;
from sales_data.employees e &lt;br&gt;
natural join sales_data.projects p;&lt;/code&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Enriching join queries
&lt;/h5&gt;

&lt;p&gt;You can additionally enrich the joins by adding different functions. For example;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WHERE clause:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using the WHERE clause to filter values from the tables as shown below:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;select * from sales_data.projects p &lt;br&gt;
full join sales_data.employees e &lt;br&gt;
on p.employee_id = e.employee_id&lt;br&gt;
where e.employee_id &amp;lt;4;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In the query above, the where clause filters by the employee_id column, only displaying rows containing employee_ids that are lower than 4.&lt;br&gt;
It is importan to note that the where clause only filters rows; it &lt;strong&gt;cannot&lt;/strong&gt; work on an aggregate column.&lt;br&gt;
If the column is an aggregrate then it is best to use "Having" clause e.g&lt;/p&gt;

&lt;p&gt;&lt;code&gt;select c.first_name, c.last_name, &lt;br&gt;
    SUM(s.quantity_sold) as units_sold&lt;br&gt;
from assignment.customers c &lt;br&gt;
inner join assignment.sales s &lt;br&gt;
on c.customer_id = s.customer_id &lt;br&gt;
group by s.customer_id,c.first_name, c.last_name&lt;br&gt;
having SUM(s.quantity_sold) &amp;gt; 5;&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ORDER BY clause&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This clause helps to sort the data within the query, therefore returning results that are in ascending/descending order.&lt;/li&gt;
&lt;li&gt;This clause is best when returning numeric values, and you can order the values to see the highest or the lowest. &lt;/li&gt;
&lt;li&gt;Additionally, you can order text values to have the values ordered alphabetically, like in the example below:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;select * from sales_data.projects p &lt;br&gt;
full join sales_data.employees e &lt;br&gt;
on p.employee_id = e.employee_id&lt;br&gt;
order by e.employee_id asc nulls last,&lt;br&gt;
        p.project_name asc;&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Window Functions
&lt;/h4&gt;

&lt;p&gt;These are functions that perform a set of calculations across a set of rows related to the current row in the window (query result displayed). These window functions are further divided by their data-related functionality. Typically, these functions introduce a new column to the displayed query results.&lt;/p&gt;

&lt;p&gt;The window functions are differentiated from other normal functions using the 'over()' clause that instructs PostgreSQL to not collapse rows like 'GROUP BY' would, instead, calculate this function by row.&lt;/p&gt;

&lt;h5&gt;
  
  
  Ranking Functions on PostgreSQL:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;These functions help to assign ranks or row numbers to the displayed results within a partition.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Examples of Ranking Functions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Row_number&lt;/em&gt;&lt;/strong&gt; – this function gives a unique number to each row. The numbering system is sequential and has no gaps or duplicates. 
&lt;code&gt;select *,
row_number() over() as id_column
from sales_data.working_hub;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;_Rank _&lt;/strong&gt;– this function assigns numbers, but with gaps after there is a tie in values referenced. Typically, this will have duplicates, in the numbers displayed for the duplicate values (the ties)
&lt;code&gt;select *, 
rank () over() as id_column
from sales_data.working_hub;&lt;/code&gt;
The code above typically returns all the rows numbered as 1 because the order by is missing(undefined).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;select *, &lt;br&gt;
    rank () over(order by salary desc nulls first) as id_column&lt;br&gt;
from sales_data.working_hub;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This code, on the other hand, clearly depicts the working of the rank function. The salary column is used to number the query results. &lt;br&gt;
We have 2 NULL values at the top because of the code: &lt;code&gt;nulls first&lt;/code&gt;. These are both numbered as 1, and then the next value is numbered as 3. &lt;br&gt;
The highest value of the column_id that is generated is 7&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Dense rank&lt;/em&gt;&lt;/strong&gt; - works like rank but without gaps. Meaning the same value will still be displayed where there is a tie, but the next value will be sequential after the previously assigned number.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;select *,&lt;br&gt;
    dense_rank() over (order by salary desc nulls first) as id_colum&lt;br&gt;
from sales_data.working_hub;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The highest value of the column id generated is 6. We have 2 NULL values at the top (nulls first) these are both numbered as 1, and then the next value is numbered as 2. &lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;_ Ntile_&lt;/strong&gt; - works as a quartile function would on MS Excel, equally dividing a certain class in the specified number of times&lt;/p&gt;

&lt;h5&gt;
  
  
  Aggregate Functions on PostgreSQL:
&lt;/h5&gt;

&lt;p&gt;These are the normal aggregate functions with the 'over' clause, which helps run the functions without grouping the rows. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;select *, SUM (e.salary) over () as total_salary&lt;br&gt;
from sales_data.projects p &lt;br&gt;
full join sales_data.employees e &lt;br&gt;
on p.employee_id = e.employee_id&lt;br&gt;
order by e.employee_id asc nulls last,&lt;br&gt;
        p.project_name asc;&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There is a new column that is created from the as clause called total_salary. &lt;/li&gt;
&lt;li&gt;The contents of the additional column repeat the total salary amount on every row, returning 242k across all rows in the result. &lt;/li&gt;
&lt;li&gt;Needless to say, other aggregate functions can also be used, as in the example given above.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Value Navigation Functions on PostgreSQL:
&lt;/h5&gt;

&lt;p&gt;These functions help to access other rows within the result in the window, therefore helping in comparisons based on the data returned in the column. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Lag function&lt;/em&gt;&lt;/strong&gt; - This returns data from the previous cell by the specified column to the current row. For example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;select *,&lt;br&gt;
    lag(salary) over (order by salary desc nulls first) as previous_data&lt;br&gt;
from sales_data.working_hub;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Lead function&lt;/em&gt;&lt;/strong&gt; - This returns data from the cell below (next cell), acting as a relative cell reference. For example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;select *,&lt;br&gt;
    lead(salary) over (order by salary desc nulls first) as pervious_data&lt;br&gt;
from sales_data.working_hub;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;First Value&lt;/em&gt;&lt;/strong&gt; - This returns data from the first value displayed in the window, while &lt;strong&gt;&lt;em&gt;Last Value&lt;/em&gt;&lt;/strong&gt; returns data from the last cell displayed in the window.&lt;/p&gt;

&lt;h5&gt;
  
  
  Enriching window functions
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Partition by&lt;/em&gt;&lt;/strong&gt; divides the result set into logical groups based on the specified column while preserving individual rows. Unlike a GROUP BY clause, it does not collapse rows but instead allows the window function to perform calculations within each partition. For example:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;select *, SUM (e.salary) over (partition by project_name) as total_salary&lt;br&gt;
from sales_data.projects p &lt;br&gt;
full join sales_data.employees e &lt;br&gt;
on p.employee_id = e.employee_id&lt;br&gt;
order by e.employee_id asc nulls last,&lt;br&gt;
        p.project_name asc;&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The contents are returned as would a SUMIF function if it were performed on Excel. So, the sum range is the salary column, the criteria range is the project_name column, and the criteria is the exact department displayed on that specific row.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Additional resources
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.postgresql.org/docs/current/tutorial-join.html" rel="noopener noreferrer"&gt;PostgreSQL joins&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.postgresql.org/docs/7.3/queries-table-expressions.html" rel="noopener noreferrer"&gt;PostgreSQL joins 2&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.postgresql.org/docs/current/tutorial-window.html" rel="noopener noreferrer"&gt;PostgreSQL Window functions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>postgres</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How Analysts Translate Messy Data, DAX, and Dashboards into Action Using Power BI</title>
      <dc:creator>GRACE MUTHONI MWANGI</dc:creator>
      <pubDate>Mon, 09 Feb 2026 22:56:10 +0000</pubDate>
      <link>https://dev.to/grace_muthonimwangi_9281/how-analysts-translate-messy-data-dax-and-dashboards-into-action-using-power-bi-34pk</link>
      <guid>https://dev.to/grace_muthonimwangi_9281/how-analysts-translate-messy-data-dax-and-dashboards-into-action-using-power-bi-34pk</guid>
      <description>&lt;p&gt;Messy data no longer has to be scary! Think of it as a blessing in disguise; during the clean-up of the data, you get opportunities to interact with and understand the data. Therefore, you can easily come up with suitable dimension tables and fact tables from your data, which is helpful during modelling.&lt;/p&gt;

&lt;h4&gt;
  
  
  Getting data on Power BI
&lt;/h4&gt;

&lt;p&gt;The first course of action will always be loading your data to Power BI. Power BI has over 150 default connectors, i.e., files (CSV/Text, MS Excel, JSON, etc.), databases (SQL, PostgreSQL, MySQL, Oracle, etc.), online services, Azure and many more. &lt;br&gt;
Needless to say, the fact that Power BI can access data from multiple connectors means it could get frustrating for a beginner to load new data, especially if they are not sure of the data source and/or type. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc4dn58z8ro0kluegw5ga.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc4dn58z8ro0kluegw5ga.png" alt=" " width="670" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h6&gt;
  
  
  &lt;strong&gt;Best practice when adding data&lt;/strong&gt;
&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;Open Power BI &amp;gt; Blank Report&lt;/li&gt;
&lt;li&gt;Select 'Import data from Excel' &amp;gt; Change file type to 'all files', as in the image below 
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foiqm8b1832veenwk4tcw.png" alt=" " width="716" height="367"&gt;
&lt;/li&gt;
&lt;li&gt;Click open &amp;gt; Select data tables that you want to see on your report &amp;gt; Load/Transform data 
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgamubne9g4hfkt397myx.png" alt=" " width="800" height="636"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h6&gt;
  
  
  &lt;strong&gt;Getting additional data from other files/sources:&lt;/strong&gt;
&lt;/h6&gt;

&lt;p&gt;When analysing data from different files and sources, it is easy to add the second dataset, as there is no provision to load both datasets at once. &lt;/p&gt;

&lt;p&gt;On the same report containing the data that was loaded on Power BI, you will need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the Home Tab &amp;gt; Get data &amp;gt; More &amp;gt; Select 'All' &amp;gt; Connect 
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F476xfah7e6u6vpi83wmk.png" alt=" " width="470" height="557"&gt;
&lt;/li&gt;
&lt;li&gt;Proceed to follow the rest of the steps as if adding new data&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Transforming data
&lt;/h4&gt;

&lt;p&gt;Transforming data is the term used to indicate cleaning messy data on Power BI. Once you load new datasets on Power BI, it will automatically identify and categorize the uploaded data, like in the image below:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8yhgsxg5z0pwm0jcmvq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8yhgsxg5z0pwm0jcmvq0.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Disclaimer: The newly formatted data is not always in a format suitable for analysis. Therefore, one will always need to modify it and these modifications can only be done using the application known as *&lt;em&gt;Power Query Editor *&lt;/em&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Power Query Editor
&lt;/h5&gt;

&lt;p&gt;You can initiate the Power Query Editor window while on either Report, Model or Table views on Power BI. On either view, navigate to the Home tab &amp;gt; Transform data&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figl9qracrto8ydrz4ixd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figl9qracrto8ydrz4ixd.png" alt=" " width="800" height="325"&gt;&lt;/a&gt;&lt;br&gt;
You get a pop-up window like shown below containing the data tables uploaded earlier&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F24t1wnwqtrqyxuwh5w97.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F24t1wnwqtrqyxuwh5w97.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h6&gt;
  
  
  Power Query Editor Ribbon
&lt;/h6&gt;

&lt;p&gt;The Ribbon has multiple tabs that will help with commands used for transforming data:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;File Tab&lt;/strong&gt;&lt;/em&gt; - Contains commands that are related to managing the working file on the Power Query Environment&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Home Tab&lt;/strong&gt;&lt;/em&gt; - Contains commands used in data preparation and organization, such as merging queries, changing data types, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Transform Tab&lt;/em&gt;&lt;/strong&gt; - Contains commands which help modify existing columns, such as grouping, pivoting, splitting and merging texts and columns, etc.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Add Column Tab&lt;/strong&gt;&lt;/em&gt; - Contains commands for creating new columns derived from existing data columns&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;View Tab&lt;/strong&gt;&lt;/em&gt; - Contains the commands controlling the visibility of panes and profiling tools to validate and inspect data quality&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Tools Tab&lt;/strong&gt;&lt;/em&gt; - Contains commands which offer diagnostic help options for troubleshooting queries&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Help Tab&lt;/strong&gt;&lt;/em&gt; - Provides access to documentation, learning resources, and support for Power Query&lt;/li&gt;
&lt;/ol&gt;

&lt;h6&gt;
  
  
  # Transforming messy data on Power BI
&lt;/h6&gt;

&lt;p&gt;The importance of data transformation is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data cleaning and quality&lt;/strong&gt;: Data transformation identifies and resolves errors, missing values, and inconsistencies, which increases the trustworthiness of reports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structuring for analysis&lt;/strong&gt;: Transformations help format data correctly (e.g., changing data types, pivoting/unpivoting) so it can be effectively used in visualisations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance optimization:&lt;/strong&gt; Unnecessary columns or rows are removed, reducing data volume and enhancing report load speeds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automations&lt;/strong&gt;: Repetitive, manual data cleaning tasks in Excel can be automated using Power Query, ensuring consistent, repeatable processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Enrichment&lt;/strong&gt;: Creates new calculated columns, splits/merges columns, and combines data from multiple sources to create a unified data model.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  DAX (&lt;a href="https://dax.guide/" rel="noopener noreferrer"&gt;DAX Guide&lt;/a&gt;)
&lt;/h4&gt;

&lt;p&gt;DAX stands for data analysis expressions, which is the formula language used in Power BI. Just like in excel, we have different formulas used for different types of data. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Text functions&lt;/em&gt;&lt;/strong&gt; are used to manipulate strings. They can also be done during data transformation, as most of the text functions are available when you right-click on the text column that one wishes to modify&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Logical functions&lt;/em&gt;&lt;/strong&gt; assess logical expressions, and return information about the values or sets in the expression i.e If, Or, And, Switch&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Aggregation functions&lt;/em&gt;&lt;/strong&gt; return values by applying an aggregation function to a column or to an expression e.g Sum and Sumx, Average and Averagex&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Date and time functions&lt;/em&gt;&lt;/strong&gt; create calculations based on dates and time. Many of the functions in DAX are similar to the Excel date and time functions e.g DateDiff, Datevalue etc&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Filter functions&lt;/em&gt;&lt;/strong&gt; help manipulate tables and filter contexts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Time Intelligence functions&lt;/em&gt;&lt;/strong&gt; are calculations used to compare and aggregate data over time periods, supporting days, months, quarters, and years e.g Endofmonth, Endofyear&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Dashboards
&lt;/h4&gt;

&lt;p&gt;Dashboards are visualizations that help explain data to non-technical users. Different visuals are organized in one view and clearly show the insights that are gotten from data&lt;/p&gt;

&lt;h6&gt;
  
  
  Features of a good dashboard
&lt;/h6&gt;

&lt;ol&gt;
&lt;li&gt;Important KPIs should be easy to see&lt;/li&gt;
&lt;li&gt;Layout well organized - KPIs at the top and charts within&lt;/li&gt;
&lt;li&gt;Should be one page&lt;/li&gt;
&lt;li&gt;Should be easy to understand and interactive&lt;/li&gt;
&lt;li&gt;Should be able to support easy decision-making&lt;/li&gt;
&lt;li&gt;Visuals included should not have generic headings; headings ought to be clear, concise and easily understandable.&lt;/li&gt;
&lt;li&gt;Slicers within the dashbard should not be broken; they should be connected to all visuals within the dashboard&lt;/li&gt;
&lt;/ol&gt;

&lt;h6&gt;
  
  
  # Visualization
&lt;/h6&gt;

&lt;p&gt;When creating a dashboard using the report view, you are required to plot your dashboard on the canvas section of the page labelled A. The various visualizations are available on the highlighted area&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkip7eq54sksuh2pblouz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkip7eq54sksuh2pblouz.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One can make various adjustments based on the visualization selected in terms of plotting, formatting and layout on the generated. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Different visualizations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Line chart&lt;/strong&gt; - uses lines to visualize trends &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw6qlvmak1h3ouwjvix50.png" alt=" " width="249" height="178"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Area charts&lt;/strong&gt; - have the areas filled and show magnitude&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stacked column chart&lt;/strong&gt; - show both categories' and subcategories' contributions to the total. They have the sum of values of subgroups. &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fev5qhwntz6m0fv6yp8si.png" alt=" " width="237" height="172"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stacked bar charts&lt;/strong&gt; - same as the stacked column chart but plotted horizontally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pie charts&lt;/strong&gt; - shows proportions of data categories &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5m5z2e5nize5tcza12qf.png" alt=" " width="240" height="171"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Donut chart&lt;/strong&gt; - the same as a pie chart but has a hole in the middle &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftwd9dy9ocp9aa1ej7drq.png" alt=" " width="234" height="174"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treemaps&lt;/strong&gt; - show hierarchy relationships of the plotted data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CAD Visual&lt;/strong&gt; – shows aggregated values of 1 entry specifically KPIs. One can also use the Multicad &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpebya7c2vpz3jovu2b3e.png" alt=" " width="361" height="94"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bubble map&lt;/strong&gt; – these are geographical maps with bubbles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filled map&lt;/strong&gt; – coloured geographical regions&lt;/li&gt;
&lt;li&gt;Scatter charts show correlation between 2 variables. Help identify outliers in data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Funnel charts&lt;/strong&gt; - show step-by-step flow in data (sequence)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Waterfall charts&lt;/strong&gt; - visualizes cumulative data &amp;amp; captures outliers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Combo charts&lt;/strong&gt; - combines the column and bar charts &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhlmagtl6jm2laxbxiqr6.png" alt=" " width="429" height="227"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bar charts&lt;/strong&gt; - compare or track changes in data using horizontal bars &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl4vjpgr6hksu8b71zw15.png" alt=" " width="241" height="174"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tables&lt;/strong&gt; - these are used when plotting data as exact values with categories on the rows and summations on the columns &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqzbejs6c3bqsb4ilv18.png" alt=" " width="150" height="124"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Matrix Tables&lt;/strong&gt; - these are used when plotting data as exact values with 2 sets of categories, one on the rows, another on the column and summations for each segment&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjz4kfeobizc9sopzfio8.png" alt=" " width="432" height="114"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Column charts&lt;/strong&gt; - compare or track changes in data using vertical bars &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8l25e7illwjfazbf9p0.png" alt=" " width="244" height="212"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slicers&lt;/strong&gt; - help bring interactivity within the dashboard based on categories&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>analytics</category>
      <category>data</category>
      <category>microsoft</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Understanding schemas and data modelling in Power BI</title>
      <dc:creator>GRACE MUTHONI MWANGI</dc:creator>
      <pubDate>Mon, 02 Feb 2026 01:05:22 +0000</pubDate>
      <link>https://dev.to/grace_muthonimwangi_9281/understanding-schemas-and-data-modelling-on-power-bi-3lc7</link>
      <guid>https://dev.to/grace_muthonimwangi_9281/understanding-schemas-and-data-modelling-on-power-bi-3lc7</guid>
      <description>&lt;p&gt;Power BI is a vital tool when it comes to connecting various data sets from different sources, transforming that data, and creating interactive, visual reports and dashboards.&lt;/p&gt;

&lt;p&gt;Many beginners wonder about the difference between schemas, and data models; schemas are specific designs that conceptualize how to structure one's data for analysis while data models are implementations of the selected schemas. This indicates that data modelling is dependent on the schema that is created on Power BI.&lt;/p&gt;

&lt;h5&gt;
  
  
  Common terminologies when dealing with schemas and data modelling:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Fact table&lt;/em&gt;&lt;/strong&gt; - stores key business data such sales or transactional data which changes regularly based on adjustments and projections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A fact table will normally contain dimension key columns that relate to dimension tables, and numeric measure columns, these allows summarization&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Dimension table&lt;/em&gt;&lt;/strong&gt; stores the additional information related to the transactional data (lookup/descriptive data) and is mostly constant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A dimension table contains a key column (or columns) that acts as a unique identifier and other columns which support filtering and grouping your data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Normalized data&lt;/em&gt;&lt;/strong&gt; describes data that's stored in a way that reduces repetitious data &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fou2ddlq68b5xlt8pyyaq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fou2ddlq68b5xlt8pyyaq.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Denormalized data&lt;/em&gt;&lt;/strong&gt; describes data that is stored in a way that has repetitious data in rows&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1. Schema Design (The Planning Stage)
&lt;/h3&gt;

&lt;p&gt;Before bringing data into Power BI, you must determine how to structure it for analysis. A &lt;strong&gt;&lt;em&gt;star schema&lt;/em&gt;&lt;/strong&gt; is the most preferred approach, where you organize data into a central fact table surrounded by dimension tables. &lt;/p&gt;

&lt;p&gt;A well-planned schema ensures better performance, easier DAX, and more accurate reports.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Actions to execute&lt;/em&gt;: Deciding which tables are facts and which are dimensions and &lt;a href="https://learn.microsoft.com/en-us/power-bi/transform-model/desktop-create-and-manage-relationships" rel="noopener noreferrer"&gt;identifying relationships between the two&lt;/a&gt;.&lt;/p&gt;

&lt;h5&gt;
  
  
  Types of schemas:
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;1. Star Schema&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In a star schema, a fact table is surrounded by multiple dimension tables. Power BI engine works best with star schema, where the fact table will always be in the middle, whilst the rest of the dimensional tables will be surrounding the fact table&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2nm1ppi4y6vavzpw992o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2nm1ppi4y6vavzpw992o.png" alt=" " width="798" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Snowflake schema&lt;/strong&gt;&lt;br&gt;
A snowflake schema has the same layout as the star schema however, it extends further than it with some or all of the dimension tables are further divided into sub-dimension tables&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjhcwadb7y13bvl4m5qo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjhcwadb7y13bvl4m5qo.png" alt=" " width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Data Modeling (The Implementation Stage)
&lt;/h4&gt;

&lt;p&gt;Data modeling is the actual, hands-on process in Power BI where you apply the schema design. &lt;/p&gt;

&lt;p&gt;It involves importing, cleansing in Power Query, creating tables, and establishing relationships (e.g., one-to-many) in the Modeling view. &lt;br&gt;
What you are doing: Implementing the star schema using Power Query and the Relationship View. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/power-bi/connect-data/service-datasets-understand" rel="noopener noreferrer"&gt;Semantic models&lt;/a&gt;:&lt;br&gt;
A semantic model consists of all connected data, transformations, relationships, and calculations. To follow the flow of Power BI, you first connect to data, transform data, and create relationships and calculations to create a semantic model. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://learn.microsoft.com/en-us/power-bi/transform-model/desktop-create-and-manage-relationships" rel="noopener noreferrer"&gt;Relationships in PowerBI&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Relations in PowerBI are connections between tables based on common columns. These connections enable data from multiple sources to be used in a single, accurate report. The relationships also ensure that slicers and other visualization tools correctly reflect on other data tables.&lt;/p&gt;

&lt;h5&gt;
  
  
  Common types of relationships within Power BI include:
&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;One-to-Many (1:M) / Many-to-One (M:1): The most common, ideal relationship where one dimension table links to multiple rows in a fact table (e.g., Product table to Sales table).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One-to-One (1:1): Each record in table A matches exactly one record in table B; rare, often suggesting tables should be merged. &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnca06x448z4fxbj8ktwf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnca06x448z4fxbj8ktwf.png" alt=" " width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many-to-Many (M:M): Multiple rows in one table match multiple rows in another; used when direct relationships are not possible, though often requiring bridge tables. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h5&gt;
  
  
  Creating relationships on PowerBI:
&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Using the auto-detect feature on PowerBI&lt;br&gt;
When you load data containing multiple tables on PowerBI, it automatically attempts to find and create relationships for you. These relationships are mainly determined by the names of the columns within your data tables. To automatically detect this on PowerBI, on the Modeling tab, select Manage relationships &amp;gt; Autodetect&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Manually creating a relationship&lt;br&gt;
This is feasible in instances where PowerBI is unable to automatically detect relationships between tables especially when the table columns have different names. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To manually create a connection;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the Modeling tab, select Manage relationships &amp;gt; New.&lt;/li&gt;
&lt;li&gt;In the Create relationship dialog box, in the first table drop-down list, select a table. Select the column you want to use in the relationship.&lt;/li&gt;
&lt;li&gt;In the second table drop-down list, select the other table you want in the relationship. Select the other column you want to use, and then select OK.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Key Aspects of Power BI Relationships:
&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cardinality&lt;/strong&gt;: Defines the nature of the relationship, i.e how many rows are related between tables. This would be One-to-many (most common, e.g., one customer to many orders), One-to-one, or Many-to-many.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cross-filter Direction&lt;/strong&gt;: Determines how filters flow between tables. Single (default, one side filters many side) or Both (bidirectional, filters flow both ways), though 'both' should be used cautiously.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Active vs. Inactive&lt;/strong&gt;: Only one active relationship can exist between two tables for direct filtering, but multiple inactive relationships can be defined for use in DAX calculations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Autodetect&lt;/strong&gt;: Power BI can automatically find and create relationships based on matching column names during data load, though manual configuration is often needed.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Resources used:&lt;br&gt;
&lt;a href="https://help.zebrabi.com/kb/power-bi/data-model-guidelines-and-best-practice/" rel="noopener noreferrer"&gt;Data Model Guidelines and Best Practice&lt;/a&gt;&lt;br&gt;
&lt;a href="https://learn.microsoft.com/en-us/power-bi/guidance/star-schema" rel="noopener noreferrer"&gt;Understand star schema and the importance for Power BI&lt;/a&gt;&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>beginners</category>
      <category>dataengineering</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>Data analysis using excel made easy</title>
      <dc:creator>GRACE MUTHONI MWANGI</dc:creator>
      <pubDate>Sat, 24 Jan 2026 15:44:52 +0000</pubDate>
      <link>https://dev.to/grace_muthonimwangi_9281/data-analysis-using-excel-4j0l</link>
      <guid>https://dev.to/grace_muthonimwangi_9281/data-analysis-using-excel-4j0l</guid>
      <description>&lt;p&gt;&lt;strong&gt;Microsoft Excel&lt;/strong&gt; is one of the most widely used tools in day-to-day organisational workflows. Across multiple industries, companies rely on MS Excel to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collect data&lt;/li&gt;
&lt;li&gt;Organize data&lt;/li&gt;
&lt;li&gt;Analyze and calculate numbers&lt;/li&gt;
&lt;li&gt;Visualize data using tables and charts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To effectively master MS Excel and thrive within most corporate environments, this learning roadmap is recommended:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understanding Microsoft Excel&lt;/li&gt;
&lt;li&gt;Data entry and navigation&lt;/li&gt;
&lt;li&gt;Data cleaning and formatting&lt;/li&gt;
&lt;li&gt;Basic calculations and core functions&lt;/li&gt;
&lt;li&gt;Data analysis with tables, pivot tables &amp;amp; charts&lt;/li&gt;
&lt;li&gt;Data visualization with dashboards&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Understanding Microsoft Excel
&lt;/h3&gt;

&lt;p&gt;One needs to familiarise oneself with the Excel interface, workbook structure, terminologies, worksheets, and basic navigation tools. A solid understanding of these foundational concepts enables users to navigate spreadsheets efficiently and reduces errors when working with data.&lt;/p&gt;

&lt;h5&gt;
  
  
  Common terminologies:
&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Workbook&lt;/strong&gt;&lt;br&gt;
This is an Excel file that contains one or more worksheets. It serves as the main container for storing and managing related datasets within a single file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Worksheet&lt;/strong&gt;&lt;br&gt;
This is an individual spreadsheet within a workbook, made up of rows and columns where data is entered, stored, and analyzed. Each worksheet can hold a separate dataset or a different stage of analysis&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cell&lt;/strong&gt;&lt;br&gt;
This is the basic unit of a worksheet where data, such as text, numbers, or formulas, is entered&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Excel reference (cell reference)&lt;/strong&gt;&lt;br&gt;
This is the location of a specific cell in a worksheet using the column letter and row number, because cells are only formed at an intersection between a row and a column.&lt;br&gt;
Examples: A1, V234&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cell range/Array&lt;/strong&gt;&lt;br&gt;
This is a group of two or more selected cells.  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h5&gt;
  
  
  Excel interface:
&lt;/h5&gt;

&lt;p&gt;Understanding the Microsoft Excel interface is essential for efficient navigation, accurate data entry, and effective analysis. The interface is composed of several key components, each designed to support different stages of data management and analysis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnwbswcxda1m71z04cmja.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnwbswcxda1m71z04cmja.png" alt=" " width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A - Name Box&lt;/strong&gt;&lt;br&gt;
It is located on the left side of the formula bar. Shows the location of the active cell (e.g., A1, C5, G10). &lt;br&gt;
This can also be used to jump/navigate to another cell&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B - Formula Bar&lt;/strong&gt;&lt;br&gt;
This is located above the worksheet grid and right under the Ribbon.&lt;br&gt;
It shows what is in the active cell (text, number, or formula). One can click inside it to edit cell content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C - Ribbon&lt;/strong&gt;&lt;br&gt;
The main toolbar at the top of an Excel window. Contains tabs like Home, Insert, Page Layout, Formulas, Data, Review, View.&lt;br&gt;
Each tab has groups (e.g., Font, Alignment, Number under Home).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;D - Quick Access Toolbar&lt;/strong&gt;&lt;br&gt;
This is the small toolbar at the top left.&lt;br&gt;
Has common icons such as Save, Undo and Redo. One can also add their favourite commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E - Tabs&lt;/strong&gt;&lt;br&gt;
These are located within the ribbon.&lt;br&gt;
Every tab contains a set of commands that are related to each other e.g:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Home&lt;/em&gt;&lt;/strong&gt; - Formatting, editing, and basic clipboard operations&lt;br&gt;
&lt;strong&gt;&lt;em&gt;File&lt;/em&gt;&lt;/strong&gt; – File management tasks such as saving, opening, printing, and sharing&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Data&lt;/em&gt;&lt;/strong&gt; - Data import, sorting, filtering, and analysis tools&lt;br&gt;
&lt;strong&gt;&lt;em&gt;View&lt;/em&gt;&lt;/strong&gt; - Worksheet display options and window management tools&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;F - Share button&lt;/strong&gt;&lt;br&gt;
This is only used when the workbook in question is made available online. One can share it with different collaborators and edit their permissions&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Columns&lt;/strong&gt;&lt;br&gt;
These are the vertical groups of cells. They are labelled A, B, C, … at the top.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rows&lt;/strong&gt;&lt;br&gt;
These are the horizontal groups of cells. They are labelled 1, 2, 3, … at the left&lt;/p&gt;

&lt;h3&gt;
  
  
  Data entry and navigation
&lt;/h3&gt;

&lt;h5&gt;
  
  
  How to enter data (data entry)
&lt;/h5&gt;

&lt;p&gt;To enter data in a cell:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on the cell you would like to edit&lt;/li&gt;
&lt;li&gt;Type your data inside the selected cell&lt;/li&gt;
&lt;li&gt;On your keyboard, press "Enter" key to move down or "Tab" key to move right&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Editing data
&lt;/h5&gt;

&lt;p&gt;Excel provides multiple methods for editing existing cell contents&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Double-click the cell and edit directly&lt;/li&gt;
&lt;li&gt;Click the cell to be edited once, then edit in the Formula Bar&lt;/li&gt;
&lt;li&gt;Alternatively, select the cell and press F2 to edit inside the cell&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The methods indicated above allow users to correct errors, update values, and modify formulas efficiently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Navigating with Keyboard and Mouse
&lt;/h3&gt;

&lt;p&gt;One can comfortably navigate through a Microsoft Worksheet through their keyboard or mouse. Mastering navigation techniques improves speed and reduces reliance on manual scrolling, especially when working with large datasets.&lt;/p&gt;

&lt;p&gt;Here are some of the common shortcuts one can apply when using their worksheets:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keyboard:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Arrow keys&lt;/strong&gt; → move one cell at a time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tab&lt;/strong&gt; → move one cell to the right.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shift + Tab&lt;/strong&gt; → move one cell to the left.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enter&lt;/strong&gt; → move down one cell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shift + Enter&lt;/strong&gt; → move up one cell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ctrl + Arrow&lt;/strong&gt; → jump to the edge of data (end of a continuous block).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ctrl + Home&lt;/strong&gt; → go to A1.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ctrl + End&lt;/strong&gt; → go to the last used cell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ctrl + S&lt;/strong&gt; → save.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mouse:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click a cell to select it.&lt;/li&gt;
&lt;li&gt;Click and drag to select multiple cells (range).&lt;/li&gt;
&lt;li&gt;Scroll with the mouse wheel to move up/down.&lt;/li&gt;
&lt;li&gt;Drag the scroll bar at the bottom to move left/right.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data cleaning and formatting
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Data cleaning/data processing&lt;/strong&gt; involves identifying and fixing errors, inconsistencies, and missing or incorrect values in a dataset so that the data becomes accurate, complete, consistent, and ready for analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data formatting&lt;/strong&gt; refers to the process of changing the appearance, structure, and display style of data in a worksheet without altering the underlying values. The purpose of data formatting is to improve readability, ensure consistency, and make datasets easier to interpret, analyze, and present.&lt;/p&gt;

&lt;p&gt;Proper formatting helps users quickly distinguish between different data types (such as text, numbers, dates, and currency), identify patterns and trends, and produce professional-looking reports and dashboards.&lt;/p&gt;

&lt;h5&gt;
  
  
  Establishing &amp;amp; removing duplicates
&lt;/h5&gt;

&lt;p&gt;Duplicate rows can cause incorrect totals or confusion when analysing data. &lt;/p&gt;

&lt;p&gt;To know whether a dataset has duplicate values, you need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the column that would contain unique values such as identification numbers (e.g., A1:A200)&lt;/li&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Home tab &amp;gt; Conditional formatting &amp;gt; Highlight cell rules &amp;gt; Duplicate values&lt;/strong&gt;
This action highlights the duplicate values by filling the selected column with a colour of choice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To remove duplicates: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select your dataset (e.g., A1:D200)&lt;/li&gt;
&lt;li&gt;Go to Data tab &amp;gt; Remove Duplicates&lt;/li&gt;
&lt;li&gt;Ensure you have “My data has headers” ticked if the first row has column titles&lt;/li&gt;
&lt;li&gt;Select the columns that define a duplicate (e.g., Name and Email)&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;li&gt;Excel shows a message with how many duplicate rows were removed&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Identifying empty cells
&lt;/h5&gt;

&lt;p&gt;This is done by filtering data. Filtering also hides rows that don’t meet criteria and shows only those that do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Steps:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click anywhere in your table (with headers)&lt;/li&gt;
&lt;li&gt;Go to Data &amp;gt; Filter (or Home &amp;gt; Sort &amp;amp; Filter &amp;gt; Filter)&lt;/li&gt;
&lt;li&gt;Small dropdown arrows appear on header cells&lt;/li&gt;
&lt;li&gt;Click a dropdown:
Check/Uncheck specific values
Use text filters, number filters, or date filters&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Correcting Data Types
&lt;/h5&gt;

&lt;p&gt;Ensuring that each column contains the correct data type is a critical step in data preparation. Incorrect data types can prevent formulas from working properly, distort calculations, and cause errors in charts and pivot tables. Common data types in Excel include text, numbers, dates, and currency values.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Number Formatting&lt;/strong&gt;&lt;br&gt;
Number formats change how numbers look without changing their actual value.&lt;/p&gt;

&lt;p&gt;Common number formats:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;General (default)&lt;/li&gt;
&lt;li&gt;Number (can show decimal places)&lt;/li&gt;
&lt;li&gt;Currency (shows a currency symbol)&lt;/li&gt;
&lt;li&gt;Accounting&lt;/li&gt;
&lt;li&gt;Percentage (%)&lt;/li&gt;
&lt;li&gt;Date&lt;/li&gt;
&lt;li&gt;Time&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the cells with numbers.&lt;/li&gt;
&lt;li&gt;Home tab &amp;gt; Number group.&lt;/li&gt;
&lt;li&gt;Use the dropdown to choose Number, Currency, Percentage, Short Date, etc.
Additional options:
&lt;em&gt;Increase/Decrease Decimal buttons to control decimal places&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Text Formatting&lt;/strong&gt;&lt;br&gt;
Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the cells (e.g., A1:D1).&lt;/li&gt;
&lt;li&gt;Go to the Home tab &amp;gt; Font group:&lt;/li&gt;
&lt;li&gt;Click B for Bold&lt;/li&gt;
&lt;li&gt;Click I for Italic&lt;/li&gt;
&lt;li&gt;Click U for Underline&lt;/li&gt;
&lt;li&gt;Change font type (e.g., Calibri, Arial)&lt;/li&gt;
&lt;li&gt;Change font size (e.g., 11 → 14)&lt;/li&gt;
&lt;li&gt;Change font color&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Conditional Formatting&lt;/strong&gt;&lt;br&gt;
Conditional formatting automatically formats cells based on rules.&lt;br&gt;
Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the data range (e.g., B2:B20)&lt;/li&gt;
&lt;li&gt;Home tab &amp;gt; Conditional Formatting&lt;/li&gt;
&lt;li&gt;Choose a rule type:&lt;/li&gt;
&lt;li&gt;Highlight Cell Rules (Greater Than, Less Than, Between, Equal To)&lt;/li&gt;
&lt;li&gt;Top/Bottom Rules&lt;/li&gt;
&lt;li&gt;Data Bars (fill cells proportionally)&lt;/li&gt;
&lt;li&gt;Color Scales (gradients)&lt;/li&gt;
&lt;li&gt;Icon Sets (arrows, flags, etc.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Cell Formatting&lt;/strong&gt;&lt;br&gt;
Involves adjusting column widths, row heights, borders, shading, and alignment to structure the worksheet and separate different sections of data clearly.&lt;/p&gt;

&lt;h5&gt;
  
  
  Sorting Data
&lt;/h5&gt;

&lt;p&gt;Sorting changes the order of rows based on chosen columns.&lt;/p&gt;

&lt;p&gt;Types of sorting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text:&lt;/strong&gt; A to Z or Z to A&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Numbers:&lt;/strong&gt; Smallest to Largest or Largest to Smallest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dates:&lt;/strong&gt; Oldest to Newest or Newest to Oldest &lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Data validation (Dropdowns and rules)
&lt;/h5&gt;

&lt;p&gt;Data validation is a method of formatting to control what users can enter in a cell.&lt;/p&gt;

&lt;p&gt;Example – Dropdown list:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List items (Apples, Oranges, Bananas) somewhere (e.g., G1:G3) or type them directly
later.&lt;/li&gt;
&lt;li&gt;Select A2:A20 where you want the dropdown.&lt;/li&gt;
&lt;li&gt;Data tab &amp;gt; Data Validation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h5&gt;
  
  
  Importance of data formatting in data analysis:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Improves clarity and readability of datasets&lt;/li&gt;
&lt;li&gt;Reduces misinterpretation of values and results&lt;/li&gt;
&lt;li&gt;Ensures consistency across reports and dashboards&lt;/li&gt;
&lt;li&gt;Enhances the professional presentation of analytical outputs&lt;/li&gt;
&lt;li&gt;Supports accurate sorting, filtering, and visualization&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Basic calculations and core functions
&lt;/h3&gt;

&lt;p&gt;Formulas and functions are instructions that tell Excel how to perform calculations and manipulate data. Every formula in Excel begins with an equals sign (=) and may include numbers, cell references, operators, and built-in functions. Mastering these core functions is essential for accurate data analysis, automation, and reporting.&lt;/p&gt;

&lt;h5&gt;
  
  
  Aggregate Functions
&lt;/h5&gt;

&lt;p&gt;Aggregate functions summarize a group of values into a single result. They are commonly used to analyze totals, averages, ranges, and record counts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sum&lt;/strong&gt; – adds a range of numbers to return a total&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flsmyywbquv7lk1u56jf5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flsmyywbquv7lk1u56jf5.png" alt=" " width="251" height="157"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Average&lt;/strong&gt; – calculates the mean value of a range&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fueoohgya3k34f2p1ywsd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fueoohgya3k34f2p1ywsd.png" alt=" " width="290" height="56"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Min&lt;/strong&gt; – returns the smallest value in a dataset&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Max&lt;/strong&gt; – returns the largest value in a dataset&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Count&lt;/strong&gt; – counts the number of cells that contain numeric values&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key pointers:&lt;br&gt;
Relative reference: This formula changes when the formula is moved from one cell to another&lt;br&gt;
Eg: B1, E1, etc.&lt;/p&gt;

&lt;p&gt;Absolute reference: This referencing ensures formulas remain the same even when they are copied or moved&lt;br&gt;
Eg: $B$1, $E$1, etc.&lt;br&gt;
&lt;em&gt;The 2 references can also be used together&lt;/em&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Conditional Functions
&lt;/h5&gt;

&lt;p&gt;Conditional functions perform calculations only when specified conditions or criteria are met. They are essential for filtering and targeted analysis.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sumif/Sumifs&lt;/strong&gt; - adds values that meet one or multiple conditions&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Countif/Countifs&lt;/strong&gt; - counts records that satisfy one or more criteria&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flmcsc2t3lyka74f57avx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flmcsc2t3lyka74f57avx.png" alt=" " width="291" height="44"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Averageif/Averageifs&lt;/strong&gt; - calculates the average based on conditions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Maxifs/Minifs&lt;/strong&gt; - returns the highest or lowest value that meets given criteria&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Logical Functions
&lt;/h5&gt;

&lt;p&gt;These functions return results based on logical conditions. These functions are widely used for decision-making, classification, and data validation&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;If&lt;/strong&gt; - returns one value if a condition is true and another if it is false&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijqffusng55yykrfejhp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijqffusng55yykrfejhp.png" alt=" " width="255" height="237"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;And&lt;/strong&gt; - returns TRUE if all conditions are true&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Or&lt;/strong&gt; - returns TRUE if at least one condition is true&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Not&lt;/strong&gt; - reverses the logical result of a condition**&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Lookup Functions
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hlookup&lt;/strong&gt; - searches vertically for a value and returns a corresponding result&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vlookup&lt;/strong&gt; - searches horizontally across rows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Index &amp;amp; Match&lt;/strong&gt; - a flexible combination for advanced lookups in any direction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Xlookup&lt;/strong&gt; - supports exact and approximate matches with fewer limitations&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Date and Time Functions
&lt;/h5&gt;

&lt;p&gt;These functions support project planning, aging analysis, payroll calculations, and performance tracking&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Today()&lt;/strong&gt; - returns the current date&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Now()&lt;/strong&gt; - returns the current date &amp;amp; time&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Datedif()&lt;/strong&gt; - calculates the difference between two dates (Old date, new date)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6d875hhnzykcatpu0vxh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6d875hhnzykcatpu0vxh.png" alt=" " width="404" height="161"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Networkdays()&lt;/strong&gt; - counts working days between two dates, excluding weekends and holidays&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Workday()&lt;/strong&gt; - returns a future or past working date based on a given number of days&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Edate()&lt;/strong&gt; - adds or subtracts months from a given date&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Datevalue()&lt;/strong&gt; - converts a text date into a valid Excel date format&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Common terminologies used for functions
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lookup value&lt;/strong&gt;– the value being searched for&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Range&lt;/strong&gt; – a group of selected cells&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dataset&lt;/strong&gt; – a well-structured collection of data used for analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Criteria&lt;/strong&gt; – the condition that determines which values are included&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Return array&lt;/strong&gt; – the range containing the result to be retrieved&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fill handle&lt;/strong&gt; - the tool used to copy formulas across cells&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nesting&lt;/strong&gt; - combining formulas within formulas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additional Pointers:&lt;br&gt;
Some of these functions will not work on some of the Microsoft Excel versions&lt;br&gt;
Formula errors will differ based on the formula. Common errors include: #DIV/0!, #REF!, #NAME? etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data analysis with tables, pivot tables &amp;amp; charts
&lt;/h3&gt;

&lt;h5&gt;
  
  
  Tables
&lt;/h5&gt;

&lt;p&gt;A Table is not just formatting; it adds powerful functionality for&lt;br&gt;
analysis, formulas, sorting, filtering, and reporting&lt;/p&gt;

&lt;p&gt;Key benefits&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatically expands when you add new data&lt;/li&gt;
&lt;li&gt;Built-in sorting and filtering&lt;/li&gt;
&lt;li&gt;Cleaner formulas using column names (structured references)&lt;/li&gt;
&lt;li&gt;Automatically copies formulas down&lt;/li&gt;
&lt;li&gt;Makes charts and PivotTables more reliable&lt;/li&gt;
&lt;li&gt;The total row once activated is automatically added at the bottom row (One can add different functions such as sum, average of the columns)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before creating a table, ensure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first row contains headers (Employee ID, First Name, Salary, Department, etc.)&lt;/li&gt;
&lt;li&gt;No completely blank rows&lt;/li&gt;
&lt;li&gt;No completely blank columns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steps to follow when creating a table in Microsoft Excel:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click anywhere inside the dataset&lt;/li&gt;
&lt;li&gt;Press Ctrl + T or alternatively
Go to Home → Format as Table&lt;/li&gt;
&lt;li&gt;Confirm the range Excel selects&lt;/li&gt;
&lt;li&gt;Ensure “My table has headers” is checked&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Method 2:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click anywhere inside the dataset&lt;/li&gt;
&lt;li&gt;On the ribbon, navigate to the insert tab &amp;gt; insert table
Excel highlights the entire dataset provided that there is no empty cell&lt;/li&gt;
&lt;li&gt;Click okay on the pop-up box&lt;/li&gt;
&lt;li&gt;Format the table on the Table Design tab&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Key Note: Should you need to convert a table to normal data, on the Table Design click convert to range &amp;gt; Confirm&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjaf1jwdvqs67rnomowzz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjaf1jwdvqs67rnomowzz.png" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Pivot tables
&lt;/h5&gt;

&lt;p&gt;These allow  you to summarize, analyze, and explore large datasets. Large amounts of data are often summarrized by grouping, counting, summing,or averaging values&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Understanding PivotTable Areas&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Pivot tables have 4 areas that appear on the fieldlist during plotting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rows = what you want to group by&lt;/li&gt;
&lt;li&gt;Columns = how you want to split the groups&lt;/li&gt;
&lt;li&gt;Values = what you want to calculate. In this field, one can change value calculations to sum, count, min etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click dropdown on a value field&lt;/li&gt;
&lt;li&gt;Value Field Settings&lt;/li&gt;
&lt;li&gt;Choose calculation type&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Filters = high-level filtering for the entire PivotTable. In this field you can have multiple filter conditions; to get the best results, always organize the fields in criterias you want to see the data by&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key Notes:&lt;br&gt;
Pivot tables do not inherit number formatting. This can be adjusted in the value field settings&lt;br&gt;
One can group numerical data on Pivot tables to create bands for grouped analysis. In the image below, you can tell the number of orders by cost (which is the grouped column)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6omup2eshh6yd39nubpq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6omup2eshh6yd39nubpq.png" alt=" " width="253" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Pivot charts
&lt;/h5&gt;

&lt;p&gt;These are visual insights linked to pivots that are already created within the data. They are easy to understand and communiate , mainly representing comparisons, trends, distributions and proportions. To create pivot charts, you navigate to the PivotTable Analyze &amp;gt; pivot charts. You get a list of all charts available and you can select the most suitable chart based on the pivot data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mcdmltkw0x79sk22s7b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mcdmltkw0x79sk22s7b.png" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Types of charts&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Column charts - compares values across categories using vertical bars&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frn4893zyfkcx0qg12m3z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frn4893zyfkcx0qg12m3z.png" alt=" " width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bar charts - compares values across categories using horizontal bars&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbxxwsio9y3qi78ky9ka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbxxwsio9y3qi78ky9ka.png" alt=" " width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Line charts - shows trends over time using a line plot&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7cffdl95er9xvb6ablrj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7cffdl95er9xvb6ablrj.png" alt=" " width="595" height="311"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pie charts - shows proportions of a whole&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Donut charts - similar to a pie chart, it however contains a hole at the center like a doughnut&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stacked column charts/ 100% Stacked column charts - shows total values broken into sub-categories one in totals and the other in percentages&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr3v8nk0m0c4tyaknurdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr3v8nk0m0c4tyaknurdg.png" alt=" " width="800" height="297"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Area chart - shows trends over time with filled areas&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd89elx89bsqjd4yn8isq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd89elx89bsqjd4yn8isq.png" alt=" " width="596" height="311"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scatter (XY) chart - shows relationship between two numeric variables&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Histogram - shows distribution of numeric data&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Box and Whisker chart - shows median, quartiles, and outliers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Combo chart - combines two charts such as a bar and line chart&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih0kkc56rzprebpvsosu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih0kkc56rzprebpvsosu.png" alt=" " width="752" height="452"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Waterfall chart - shows how positive and negative values build to a total&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can modify the chart properties on the Design tab &amp;gt; chart layouts.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6s17f3xle79vilyh2aen.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6s17f3xle79vilyh2aen.png" alt=" " width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Data visualization with dashboards
&lt;/h3&gt;

&lt;p&gt;A Microsoft Excl Dashboard is a single interactive screen that visually summarizes the most important data insights at one glance. It combines PivotTables, charts, KPIs, slicers, and good layout design to support&lt;br&gt;
decision-making&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Non-negotiable dashboard principles:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dashboards should be one screen only (no scrolling)&lt;/li&gt;
&lt;li&gt;Focus on key KPIs, not raw data&lt;/li&gt;
&lt;li&gt;Consistent colors and fonts&lt;/li&gt;
&lt;li&gt;Clear titles and labels&lt;/li&gt;
&lt;li&gt;Interactive but simple&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ss80l3mxd1oksorltx7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ss80l3mxd1oksorltx7.png" alt=" " width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>microsoft</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Decoding Git and GitHub</title>
      <dc:creator>GRACE MUTHONI MWANGI</dc:creator>
      <pubDate>Sat, 17 Jan 2026 09:22:45 +0000</pubDate>
      <link>https://dev.to/grace_muthonimwangi_9281/decoding-git-and-github-4kh4</link>
      <guid>https://dev.to/grace_muthonimwangi_9281/decoding-git-and-github-4kh4</guid>
      <description>&lt;h2&gt;
  
  
  Github
&lt;/h2&gt;

&lt;p&gt;This is a web-based platform that helps users store, manage, and collaborate on software projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Importance of GitHub:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Collaboration:&lt;/em&gt; &lt;br&gt;
Multiple people can work on the same project without overwriting each other’s work and with full visibility. Team members can view real-time updates, contribute changes, and communicate through the repository file. For private repositories, collaborators must be explicitly added by the repository owner. &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5klctse3lhb346sz24f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5klctse3lhb346sz24f.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Code Storage &amp;amp; Backup:&lt;/em&gt; &lt;br&gt;
GitHub acts as a cloud-based repository where your code is safely stored and accessible from anywhere. This minimizes the risk of losing one's code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Portfolio &amp;amp; Career Growth:&lt;/em&gt;&lt;br&gt;
Projects that are worked on GitHub can serve as a portfolio to showcase one's skills to potential employers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Open-source code contributions:&lt;/em&gt; &lt;br&gt;
GitHub contains &lt;a href="https://github.com/collections" rel="noopener noreferrer"&gt;numerous codes&lt;/a&gt; that are freely available and can easily be modified, integrated, and incorporated into other codes. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Version control:&lt;/em&gt; &lt;br&gt;
GitHub allows one to track and manage changes made to code. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Creating a GitHub account
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Visit the &lt;a href="https://github.com" rel="noopener noreferrer"&gt;official GitHub site&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click on Sign In &amp;gt;&amp;gt; Continue with Google&lt;/li&gt;
&lt;li&gt;Choose your email and username&lt;/li&gt;
&lt;li&gt;Click on create account &amp;gt;&amp;gt; Adjust your profile details and save&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Git (Git Bash)
&lt;/h2&gt;

&lt;p&gt;Git is a version-control system, whilst Git Bash is a commanding system that helps a user to communicate lines of code from their local machine and their web-based GitHub account. &lt;/p&gt;

&lt;h3&gt;
  
  
  Git Bash installation:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Head to the Git official &lt;a href="https://git-scm.com/install/windows" rel="noopener noreferrer"&gt;website&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Install the application; ensure you install an app that is compatible with your operating system.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Connecting Git Bash to GitHub
&lt;/h3&gt;

&lt;p&gt;A successful connection is determined by a couple of steps undertaken in the sequence shown below:&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;em&gt;Configuration&lt;/em&gt;
&lt;/h5&gt;

&lt;p&gt;&lt;code&gt;git config --global user.name "Your Name"&lt;/code&gt; - This command is meant to help set up your username&lt;br&gt;
&lt;code&gt;git config --global user.email "your.email@example.com"&lt;/code&gt;- This command is meant to help set up your email address&lt;br&gt;
&lt;code&gt;git config --list&lt;/code&gt; - This command is meant to verify your configuration&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;em&gt;Generating SSH Key&lt;/em&gt;
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Run this command to check for existing keys&lt;br&gt;
&lt;code&gt;ls -al ~/.ssh&lt;/code&gt;&lt;br&gt;
&lt;em&gt;If you see files named id_ed25519 and id_ed25519.pub (or id_rsa and id_rsa.pub), you have an existing key pair. If not, you'll need to generate one&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generate the SSH key by running this command:&lt;br&gt;
&lt;code&gt;ssh-keygen -t ed25519 -C "your_email@example.com"&lt;/code&gt;&lt;br&gt;
In this step, one will be prompted to save the key. It is paramount that they save it in a file location that one can easily remember and retrieve from&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  &lt;em&gt;Starting SSH agent&lt;/em&gt;
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;To start the SSH agent, run this command:&lt;br&gt;
&lt;code&gt;eval $(ssh-agent -s)&lt;/code&gt;&lt;br&gt;
This command varies based on the user's operating system&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add your private key to the running ssh-agent&lt;br&gt;
&lt;code&gt;ssh-add ~/.ssh/id_ed25519&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  &lt;em&gt;Adding the key to Git account&lt;/em&gt;
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Copy your public key to the clipboard&lt;/li&gt;
&lt;li&gt;Open the GitHub platform online 

&lt;ul&gt;
&lt;li&gt;Click on Profile &amp;gt;&amp;gt; Settings &lt;/li&gt;
&lt;li&gt;Click on SSH and GPG keys&lt;/li&gt;
&lt;li&gt;Add new SSH key &amp;gt;&amp;gt; paste the copied key on the clipboard&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Test the connection&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Collaboration and version control
&lt;/h3&gt;

&lt;p&gt;To start coding, you will need to create a new repository; this repository will contain the main code. If you need to test changes, create a branch. This allows you to make edits without affecting the main code. &lt;/p&gt;

&lt;p&gt;To &lt;a href="https://youtu.be/x7omtQh1UPE?si=PsmQDYi83nJX-azt" rel="noopener noreferrer"&gt;create a branch on Git Bash&lt;/a&gt; if you're using an existing repository:&lt;br&gt;
&lt;code&gt;Git clone **paste the SSH key of the repo**&lt;/code&gt; - fetches the open source code from GitHub to Git Bash&lt;br&gt;
&lt;code&gt;cd **repository name**&lt;/code&gt; - activates the repo on Git Bash&lt;br&gt;
&lt;code&gt;git branch&lt;/code&gt; - shows the main branches available within a repository&lt;br&gt;
&lt;code&gt;git checkout -b **name of the branch**&lt;/code&gt; – creates the branch and redirects you to the branch created &lt;br&gt;
&lt;code&gt;git pull&lt;/code&gt; - syncs the existing changes&lt;br&gt;
&lt;code&gt;git push origin **name of the branch**&lt;/code&gt; - uploads the added branch to the repo on GitHub.&lt;/p&gt;

&lt;p&gt;Once you make changes to the Git code, you can proceed to merge the changes using the steps below:&lt;br&gt;
&lt;code&gt;git branch&lt;/code&gt; - shows the main branches available within a repository &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The branch highlighted in green is the branch that you are currently working on. &lt;/li&gt;
&lt;li&gt;To move to the branch you want to work on, you can proceed to use the checkout code or the change directory code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;git pull&lt;/code&gt; - this helps sync the changes made by other collaborators&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is a good practice to ensure that the file is up to date before making other changes &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;git merge **name of the file that has the changes**&lt;/code&gt;- this will merge the files &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once you run this command, you get the actions that have been undertaken on the branch &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;git commit -m "**name of the branch** merged"&lt;/code&gt; - this helps confirm the merge &lt;br&gt;
&lt;code&gt;git push&lt;/code&gt; - this helps upload the changes to the main repo file&lt;/p&gt;

&lt;p&gt;To track the changes that have been made to a code on GitHub, you need to monitor as indicated below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Green highlights&lt;/strong&gt; means that the code has been changed/modified with add-on codes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Red highlights&lt;/strong&gt; indicate that the code has been deleted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commits&lt;/strong&gt; shows the number of changes pushed to the original code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additionally, you can &lt;a href="https://youtu.be/H2DuJNWbqLw?si=upXeSoSsOYBF8FWD" rel="noopener noreferrer"&gt;go back to the original edit&lt;/a&gt; on Git if the merged changes were not approved/are wrong. Best practice when using a public repository is to use the revert code. However, when one is using a private repository, you can proceed to delete and forcefully reset the number of commits; this way, the edit that was pushed to the code can no longer be seen&lt;/p&gt;

&lt;h3&gt;
  
  
  Common terminologies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pushing code - uploading changes from one's local machine to GitHub&lt;/li&gt;
&lt;li&gt;Pulling code - downloading changes from GitHub to a local machine&lt;/li&gt;
&lt;li&gt;Command lines - giving instructions to the system through codes&lt;/li&gt;
&lt;li&gt;Version control - tracking and managing changes to code on GitHub&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Repository (Repo)- cloud-based storage location for project files and code &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Public repositories&lt;/em&gt; are accessible to everyone on GitHub&lt;/p&gt;

&lt;p&gt;Use these commands to copy an existing repository from the internet &lt;br&gt;
&lt;code&gt;Git clone paste the SSH key of the repo&lt;/code&gt;&lt;br&gt;
&lt;code&gt;cd repository name&lt;/code&gt; to activate the repo on Git Bash&lt;br&gt;
&lt;code&gt;git branch&lt;/code&gt; to see the branch available&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Private repositories&lt;/em&gt; are only accessible to the user&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Common command lines:
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;git --version&lt;/code&gt; - This helps check the Git Bash version &lt;br&gt;
&lt;code&gt;mkdir "Name of the folder"&lt;/code&gt; - Creating a folder within GitHub on GitBash&lt;br&gt;
&lt;code&gt;git status&lt;/code&gt; - status of on your repository&lt;br&gt;
&lt;code&gt;cd "Created Folder&lt;/code&gt; - This is used to change the directory to the folder that was created. &lt;em&gt;All commands that follow this command are within the specifically mentioned folder&lt;/em&gt;&lt;br&gt;
&lt;code&gt;touch "Name of file"&lt;/code&gt;- This helps create a file within a folder. You should specify the type of file you want to create i.e .py READ.Me&lt;br&gt;
&lt;code&gt;git init&lt;/code&gt; - This initializes a new repository which holds the files containing the codes&lt;br&gt;
&lt;code&gt;git branch -a&lt;/code&gt; - This lists all the branches within the repository created&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Reference Guides &amp;amp; Sources
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.geeksforgeeks.org/git/working-on-git-bash/" rel="noopener noreferrer"&gt;Git Bash tutorial&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Visnusah/git-basics" rel="noopener noreferrer"&gt;Git basics&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=tRZGeaHPoaw" rel="noopener noreferrer"&gt;Git &amp;amp; GitHub visual tutorial for beginners&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
