<?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: Milcah Mukunza</title>
    <description>The latest articles on DEV Community by Milcah Mukunza (@mukunza).</description>
    <link>https://dev.to/mukunza</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%2F3824543%2F153c5194-d3fd-45b9-971e-b46fe4a3ccf7.png</url>
      <title>DEV Community: Milcah Mukunza</title>
      <link>https://dev.to/mukunza</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mukunza"/>
    <language>en</language>
    <item>
      <title>SQL Simplified: DDL, DML, and Essential Commands.</title>
      <dc:creator>Milcah Mukunza</dc:creator>
      <pubDate>Sat, 11 Apr 2026 15:57:15 +0000</pubDate>
      <link>https://dev.to/mukunza/sql-simplified-ddl-dml-and-essential-commands-1fn0</link>
      <guid>https://dev.to/mukunza/sql-simplified-ddl-dml-and-essential-commands-1fn0</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;INTRODUCTION.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;SQL (&lt;strong&gt;Structured Query Language&lt;/strong&gt;) is the foundation of relational databases. At first, it may seem like there are many commands to learn, but most real-world work is based on a few core ideas: defining structure, managing data, and querying it effectively.&lt;/p&gt;

&lt;p&gt;In my recent work with SQL, I explored how different command types serve different purposes. DDL (Data Definition Language) focuses on structure, using commands like CREATE to build tables. DML (Data Manipulation Language) handles the data itself, using INSERT, UPDATE, and DELETE to manage records. In this article I will walk through those concepts using a school database for a fictional institution called Nairobi Academy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DDL vs DML — What's the Difference?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DDL (Data Definition Language)-&lt;/strong&gt; These are commands that define or change the structure of a database. Examples: CREATE, ALTER, DROP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DML (Data Manipulation Language)&lt;/strong&gt; - DML deals with content. Once your structure exists, DML commands fill it with data, update existing records, and delete what is no longer needed. Examples: INSERT, UPDATE, DELETE, SELECT.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;DDL COMMANDS.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;CREATE&lt;/em&gt;&lt;/strong&gt;- Used to make a new table.&lt;/p&gt;

&lt;p&gt;First, I created the schema (a named container that organises your tables inside a database) then built the three required tables for the school: students, subjects, and exam_results.&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%2F51ki31hrxivvtl2ghvr0.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%2F51ki31hrxivvtl2ghvr0.png" alt="CREATE" width="742" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Always remember to mention the data types for each column such as &lt;strong&gt;VARCHAR&lt;/strong&gt; for text or &lt;strong&gt;SERIAL&lt;/strong&gt; for auto-incrementing numbers. And don’t forget to define a primary key, which acts as the unique identifier for every row in your table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; &lt;em&gt;&lt;strong&gt;ALTER&lt;/strong&gt;&lt;/em&gt; - Used to change existing tables.&lt;/p&gt;

&lt;p&gt;After creating the Students table, the school realized they had forgotten to include a phone number column. Instead of deleting the entire table and starting from scratch, I used the ALTER TABLE command to add the missing column and later, I also used it to remove it when it was no longer needed.&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%2Fe5ln2fws6io750re6sh6.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%2Fe5ln2fws6io750re6sh6.png" alt="ALTER" width="759" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DML COMMANDS.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;INSERT&lt;/em&gt;&lt;/strong&gt; - Used in adding data.&lt;/p&gt;

&lt;p&gt;With the table structure in place, the next step was to populate it with data. PostgreSQL makes this easier by allowing you to insert multiple rows in a single statement, which saves time and reduces repetitive typing.&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%2Fs63fhmngt0p9cd0z7eqr.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%2Fs63fhmngt0p9cd0z7eqr.png" alt="INSERT" width="527" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;2. UPDATE&lt;/em&gt;&lt;/strong&gt; - Used for fixing data.&lt;/p&gt;

&lt;p&gt;When Esther Akinyi moved from Nakuru to Nairobi, there was no need to delete her entire record. Instead, I simply updated the specific field that changed, using a WHERE clause to ensure that only her row was modified.&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%2Fy40b4918uqrgjdtutf3a.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%2Fy40b4918uqrgjdtutf3a.png" alt="UPDATE" width="481" height="111"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Always include a &lt;strong&gt;WHERE&lt;/strong&gt; clause when using &lt;strong&gt;UPDATE or DELETE&lt;/strong&gt;. Without it, the command will affect every row in the table, which is almost never the intended outcome.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;DELETE&lt;/strong&gt;&lt;/em&gt; - Used for Removing a Row.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The school cancelled one exam result. Using a DELETE statement with a WHERE clause removed only that specific record.&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%2F6vyauuxspnlgrg5c1bf5.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%2F6vyauuxspnlgrg5c1bf5.png" alt="DELETE" width="255" height="85"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FILTERING WITH WHERE.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The WHERE clause is what makes a query precise instead of overwhelming. It instructs PostgreSQL to return only the rows that meet a specific condition, and it’s essential when working with SELECT, UPDATE, or DELETE statements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic Operators&lt;/strong&gt;&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%2F69tt381lwfxou1dqk10v.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%2F69tt381lwfxou1dqk10v.png" alt="Basic Operators" width="747" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; &lt;strong&gt;BETWEEN&lt;/strong&gt;- Used in range queries.&lt;/p&gt;

&lt;p&gt;Instead of writing marks &amp;gt;= 50 AND marks &amp;lt;= 80, you can use BETWEEN for a more concise and readable query. The BETWEEN operator is inclusive of both boundary values.&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%2Fyixi1rtznor0cr79agz6.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%2Fyixi1rtznor0cr79agz6.png" alt="BETWEEN" width="596" height="174"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2&lt;/strong&gt;.&lt;strong&gt;IN AND NOT IN&lt;/strong&gt; - Used in list matching.&lt;/p&gt;

&lt;p&gt;Rather than chaining multiple OR conditions, the IN operator lets you check against a list of values in a single, clear, and readable statement.&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%2F3trdeez5l46qh2pntgym.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%2F3trdeez5l46qh2pntgym.png" alt="IN AND NOT IN" width="529" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; &lt;strong&gt;LIKE&lt;/strong&gt;- Used for pattern matching.&lt;/p&gt;

&lt;p&gt;Use LIKE when you only know part of a value. The % symbol acts as a wildcard, meaning “any sequence of characters can go here."&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%2F3uwsplp2jfqx3smsn50h.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%2F3uwsplp2jfqx3smsn50h.png" alt="LIKE" width="618" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TRANSFORMING DATA WITH CASE WHEN.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CASE WHEN is SQL’s equivalent of an if/else statement. Instead of simply retrieving data as-is, it allows you to create a new column dynamically based on conditions. This makes it especially powerful for transforming raw numbers into meaningful labels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Syntax structure&lt;/strong&gt;&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%2F6y7yxvec0jc866n3lwhv.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%2F6y7yxvec0jc866n3lwhv.png" alt="Syntax" width="351" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example - Grading exams results.&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%2Fzhpty68tx6mbu4lsempp.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%2Fzhpty68tx6mbu4lsempp.png" alt="Case when" width="536" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every &lt;strong&gt;CASE WHEN&lt;/strong&gt; expression must end with END. Always assign a name to the resulting column using AS, otherwise, the output header will default to “case,” which is not very helpful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION AND REFLECTION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the challenges i faced was BETWEEN operator. I accidentally repeated the column name (exam_date) and used the wrong date format '2024-3-18'. The correct syntax is cleaner: specify the column once, then provide the two boundary values. Fixing this taught me how precise SQL is. Even small format slips can break a query, but once corrected, the logic feels elegant.&lt;/p&gt;

&lt;p&gt;SQL can seem intimidating at first, but its logic becomes clear once you grasp its layered structure: use DDL to define the schema, DML to populate it, and SELECT with WHERE to query it. Each step builds naturally on the one before.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>dml</category>
      <category>queries</category>
      <category>database</category>
    </item>
    <item>
      <title>How to Publish a Power BI Report and Embed it into a Website</title>
      <dc:creator>Milcah Mukunza</dc:creator>
      <pubDate>Sun, 05 Apr 2026 15:05:31 +0000</pubDate>
      <link>https://dev.to/mukunza/how-to-publish-a-power-bi-report-and-embed-it-into-a-website-3f1a</link>
      <guid>https://dev.to/mukunza/how-to-publish-a-power-bi-report-and-embed-it-into-a-website-3f1a</guid>
      <description>&lt;p&gt;A step-by-step guide from setting up your workspace to embedding live featuring annotated instructions and code examples. In this guide, we’ll walk through the steps to publish a Power BI report and  how to embed it into a website.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;INTRODUCTION&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is Power BI ?&lt;/strong&gt;&lt;br&gt;
Power BI is a Microsoft tool that allows you to connect to data, create interactive dashboards and visualizations, and share insights across your organization or the web. Whether you are analyzing sales, tracking project progress, or visualizing key metrics, it enables you to turn data into meaningful reports and communicate insights effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why should we Publish Reports?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Publishing transfers your report to the cloud through Power BI Service, whereas embedding enables it to be displayed within webpages such as company intranets, client portals, or public websites.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Creating a Workspace&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Workspace in Power BI Service is a collaborative cloud environment that functions like a shared folder. It enables users to store and organize multiple reports and dashboards, allowing team members to access them efficiently. Creating a workspace is the first step in the publishing process&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to create One:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your browser and go to **&lt;em&gt;app.powerbi.com&lt;/em&gt; **and sign in with your work or school account.&lt;/li&gt;
&lt;li&gt;In the left sidebar, click Workspaces.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;+ New workspace&lt;/strong&gt; at the bottom of the panel.&lt;/li&gt;
&lt;li&gt;Give your workspace a clear name (e.g., "Macy Cohort 15").&lt;/li&gt;
&lt;li&gt;Optionally add a description and upload a logo.&lt;/li&gt;
&lt;li&gt;Click Save.&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%2Ft3tl1mjgluvu7oxhbhsr.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%2Ft3tl1mjgluvu7oxhbhsr.png" alt="Work space" width="589" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Uploading and Publishing Your Report&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are two common methods for publishing a Power BI report. The first method involves publishing the report directly from Power BI Desktop to the Power BI Service. The second method allows users to upload a .pbix file manually into an existing workspace within the Power BI Service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Method 1- Publish from Power BI Desktop (Most common)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your completed report in Power BI Desktop.&lt;/li&gt;
&lt;li&gt;Go to the Home tab on the ribbon.&lt;/li&gt;
&lt;li&gt;Click the Publish button.&lt;/li&gt;
&lt;li&gt;A dialog will ask "Select a destination". Choose the workspace you just created.&lt;/li&gt;
&lt;li&gt;Click Select. Power BI will then upload your report.&lt;/li&gt;
&lt;li&gt;Once complete, a success message appears with a link to open it in the browser.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Method 2 - Upload .pbix via the browser&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Power BI Service, navigate into your workspace.&lt;/li&gt;
&lt;li&gt;Click + New → Upload a file.&lt;/li&gt;
&lt;li&gt;Choose Local file and locate your .pbix file.&lt;/li&gt;
&lt;li&gt;Click Open. The report and its dataset will both appear in the workspace.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Generating the Embed Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To embed a report on a website, you need an HTML  code from Power BI.&lt;/p&gt;

&lt;p&gt;How to generate one:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your report in the workspace.&lt;/li&gt;
&lt;li&gt;Navigate to File → Embed → Website or portal.&lt;/li&gt;
&lt;li&gt;Copy the HTML  code provided.&lt;/li&gt;
&lt;/ol&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%2Ffh4huu8jfxj74unkxzo7.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%2Ffh4huu8jfxj74unkxzo7.png" alt="Embed code" width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 4: Embedding the Report on a Website&lt;/p&gt;

&lt;p&gt;Now that you have the  code, embedding it is simply a matter of pasting it into your webpage's HTML. Here's how to do it on a html file:&lt;/p&gt;

&lt;p&gt;Open your website’s HTML file in your preferred editor.&lt;br&gt;
Paste the iframe code in the section where you want the report to appear. Save and refresh your website in a browser. Your interactive Power BI report should appear.&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%2F0h2ay6pytvbr7xf6dsqp.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%2F0h2ay6pytvbr7xf6dsqp.png" alt="Embed Report" width="749" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Insights on Publishing and Embedding Power BI Reports&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Publishing and embedding Power BI reports allows your data insights to reach real users through websites and online platforms. The following key points are important to remember:&lt;/li&gt;
&lt;li&gt;Workspaces are essential -Always publish reports to a dedicated workspace instead of My Workspace to enable proper sharing, management, and collaboration.&lt;/li&gt;
&lt;li&gt;Choose the correct embed type -Publish to web is public and free, while secure embedding requires authentication and licences. Avoid publishing sensitive data publicly.&lt;/li&gt;
&lt;li&gt;Follow a consistent workflow -The standard process — Workspace → Publish → Generate Embed Code → Embed in Website — applies to all Power BI reports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A photo of the published dashboard&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%2Fs25yezkk9raha0biwbfs.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%2Fs25yezkk9raha0biwbfs.png" alt="Dashboard" width="755" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Data insights are only valuable if they are seen and understood. Embedding Power BI reports brings your data to life for anyone visiting your website.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>database</category>
      <category>data</category>
      <category>html</category>
    </item>
    <item>
      <title>UNDERSTANDING DATA MODELLING IN POWER BI</title>
      <dc:creator>Milcah Mukunza</dc:creator>
      <pubDate>Sat, 28 Mar 2026 22:10:27 +0000</pubDate>
      <link>https://dev.to/mukunza/understanding-data-modelling-in-power-bi-40fa</link>
      <guid>https://dev.to/mukunza/understanding-data-modelling-in-power-bi-40fa</guid>
      <description>&lt;p&gt;In today’s data-driven environments, tools like Power BI make it easy to build reports, but getting them to work correctly is where the real challenge lies. This article takes a practical look at how to structure your data effectively so your reports remain accurate, intuitive, and easy to maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DATA MODELLING&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Data Modelling?&lt;/strong&gt;&lt;br&gt;
Data modeling is the art of structuring, defining, and connecting your data tables so that Power BI can answer analytical questions correctly. It helps you decide: How many tables you need, what goes in each table, and how those tables connect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HOW TO PERFORM JOINS IN POWER QUERY&lt;/strong&gt;&lt;br&gt;
A join is a method of linking tables using a shared field so that related data can be viewed or analyzed as a single dataset. In Power BI, joins are called Merge Queries.&lt;/p&gt;

&lt;p&gt;Heres a simple example&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Table 1&lt;/em&gt;&lt;/strong&gt;&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%2F5ncc1nyqfd7yv0bjzmck.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%2F5ncc1nyqfd7yv0bjzmck.png" alt="Table 1" width="313" height="117"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Table 2&lt;/em&gt;&lt;/strong&gt;&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%2Fng67h8ruo47qv8spo12e.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%2Fng67h8ruo47qv8spo12e.png" alt="Table 2" width="313" height="117"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Load both tables into &lt;strong&gt;Power Query&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click on the Customers table&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Home → Merge Queries&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Select:&lt;/li&gt;
&lt;li&gt;First table: Customers&lt;/li&gt;
&lt;li&gt;Second table: Orders&lt;/li&gt;
&lt;li&gt;Click the matching column in both tables:&lt;/li&gt;
&lt;li&gt;Customer ID → Customer ID&lt;/li&gt;
&lt;li&gt;Choose join type (start with Left Outer)&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Final result&lt;/strong&gt;&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%2F7rtycakn4j67lyqb5kad.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%2F7rtycakn4j67lyqb5kad.png" alt="Joins example" width="481" height="117"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TYPES OF JOINS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Left Join&lt;/strong&gt;&lt;br&gt;
Returns all rows from the left table (Customers) and matches from the right (Orders). If there’s no match → NULL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Illustration&lt;/strong&gt;&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%2Fbvxzmyw5qmyzhb84w568.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%2Fbvxzmyw5qmyzhb84w568.png" alt="Left Join" width="481" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All customers are included, even if they have no orders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Right Join&lt;/strong&gt;&lt;br&gt;
Keeps all rows from the right table (Orders) and adds matching customers; unmatched rows display NULL.&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%2Flmfhyz8qx29bd64m5sf3.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%2Flmfhyz8qx29bd64m5sf3.png" alt="Right Join" width="481" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All orders are included, even if no matching customer exists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inner Join&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Returns only rows that exist in both tables (matching keys).&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%2F9ftzdfr9dyshl04rftup.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%2F9ftzdfr9dyshl04rftup.png" alt="Inner Join" width="439" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Samuel (No orders) and Order 300 (No customer) are excluded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full Outer Join&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Includes all rows from both tables, matching where possible and filling unmatched fields with NULL.&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%2F0vrub68pxj6bgkbk4fi5.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%2F0vrub68pxj6bgkbk4fi5.png" alt="Full Outer Join" width="481" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Combines the effect of LEFT + RIGHT joins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;POWER BI RELATIONSHIPS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In Power BI, a relationship defines how tables are connected via one or more columns. Relationships enable data from different tables to interact seamlessly in visuals, filters, and calculations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TYPES OF RELATIONSHIPS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-to-Many (1:M)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One row in the first table matches many rows in the second table.&lt;br&gt;
Example:&lt;br&gt;
Table: Customers (1 row per customer)&lt;br&gt;
Table: Orders (multiple orders per customer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Many-to-Many (M:M)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rows in both tables can have multiple matches in the other table.&lt;br&gt;
Example: A student can enroll in many courses, and each course can have many students&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-to-One (1:1)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One row in the first table matches exactly one row in the second table.&lt;br&gt;
Example:&lt;br&gt;
Table: Employee&lt;br&gt;
Table: Employee Details (with their address, department, etc.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Active vs. Inactive Relationships&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Active Relationship:&lt;/strong&gt;&lt;br&gt;
The default relationship used for calculations and filtering.&lt;br&gt;
Only one active relationship is allowed between two 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%2Fvjd7jwhg97l4blwt3dhn.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%2Fvjd7jwhg97l4blwt3dhn.png" alt=" " width="220" height="67"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inactive Relationship:&lt;/strong&gt;&lt;br&gt;
Exists but is not used by default in visuals.&lt;br&gt;
Can be activated in DAX formulas using the USERELATIONSHIP() &lt;br&gt;
function&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%2Fc43wixx1q287phvupnne.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%2Fc43wixx1q287phvupnne.png" alt=" " width="232" height="102"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JOINS VS RELATIONSHIPS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Illustration&lt;/strong&gt;:&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%2F1lyytoqsxka4otlaw8dp.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%2F1lyytoqsxka4otlaw8dp.png" alt=" " width="450" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CROSS FILTER FUNCTION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Single Direction:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Filters flow one way, from the (1 side) to the  (M side only).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Both Direction:&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Filters flow in both directions, useful for complex relationships or M:M scenarios.&lt;br&gt;
Use carefully as it can create circular filter paths and slow queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cardinality&lt;/strong&gt;&lt;br&gt;
It describes how many rows in one table relate to rows in another table. Determines how filters propagate and how aggregations behave.&lt;br&gt;
Types: 1:1, 1:M, M:1, M:M&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FACT VS DIMENSION TABLES&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fact Tables&lt;/strong&gt;&lt;br&gt;
Stores measurable, transactional data and contains numeric metrics (like sales amount, quantity) and foreign keys referencing dimensions.&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%2F33n1zn0z8zvu7pgic4k2.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%2F33n1zn0z8zvu7pgic4k2.png" alt=" " width="389" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dimension Tables&lt;/strong&gt;&lt;br&gt;
Store descriptive attributes about entities, showing the "who, what, where" behind each transaction. &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%2Fa8x6k82dw63f83nhr15l.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%2Fa8x6k82dw63f83nhr15l.png" alt=" " width="409" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TYPES OF SCHEMAS&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;This is a data model where: A central fact table (e.g., Orders) is directly connected to dimension tables with combined attributes.&lt;br&gt;
Each dimension is independent (not split further).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Illustration&lt;/strong&gt;&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%2Fcy97hd9m72m1gxd5ndvi.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%2Fcy97hd9m72m1gxd5ndvi.png" alt=" " width="315" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Snowflake Schemas&lt;/strong&gt;&lt;br&gt;
This is an extension of the star schema where dimension tables are normalized (split into related sub-tables).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Illustration&lt;/strong&gt;&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%2F0nmpohutupomzicmbgm7.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%2F0nmpohutupomzicmbgm7.png" alt=" " width="572" height="230"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;COMMON MODELING ISSUES&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Overusing Flat Tables&lt;/strong&gt; - Leads to large data size, difficult updates, and inaccurate counts due to repeated data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Granularity Mismatch&lt;/strong&gt; - Occurs when fact and dimension tables are at different levels (e.g., order lines vs full orders), causing duplication.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slicers Not Filtering&lt;/strong&gt; -A slicer may appear but not affect results if the filter path is broken.This is usually caused by missing relationships or wrong direction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Circular Relationships&lt;/strong&gt;- Happens when tables filter each other in multiple paths, creating ambiguity. Leads to errors or incorrect calculations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing Date Table&lt;/strong&gt;- Without a proper date table, time-based calculations won’t work correctly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Good Power BI modeling comes down to one core principle: keep facts and dimensions separate, connected by a clean star schema. This gives you fast queries, accurate numbers, and reports that scale. The discipline is simple: clean relationships, consistent granularity, sound dimensional design. Everything else follows.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>data</category>
      <category>writing</category>
      <category>analytics</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Milcah Mukunza</dc:creator>
      <pubDate>Sat, 28 Mar 2026 17:24:50 +0000</pubDate>
      <link>https://dev.to/mukunza/-ded</link>
      <guid>https://dev.to/mukunza/-ded</guid>
      <description></description>
    </item>
    <item>
      <title>EXCEL FUNCTIONS THAT WILL SAVE YOU HOURS</title>
      <dc:creator>Milcah Mukunza</dc:creator>
      <pubDate>Sun, 22 Mar 2026 17:44:37 +0000</pubDate>
      <link>https://dev.to/mukunza/excel-functions-that-will-save-you-hours-559c</link>
      <guid>https://dev.to/mukunza/excel-functions-that-will-save-you-hours-559c</guid>
      <description>&lt;h2&gt;
  
  
  INTRODUCTION
&lt;/h2&gt;

&lt;p&gt;As a beginner, I used to think that Excel was only meant for data entry, but there is much more to it than what meets the eye. Excel is a powerful tool that simplifies tasks, improves efficiency, and helps users analyze data effectively. Here are some of the functions that every beginner needs to understand in order to work more efficiently in Excel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TRIM()&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This function is used to remove extra spaces from a text.&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%2F30y5qxnnbtgo1aseb1gu.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%2F30y5qxnnbtgo1aseb1gu.png" alt="Example Image Showing How to Use the TRIM Formula" width="512" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For instance:&lt;/strong&gt;&lt;br&gt;
The cell B2 contains extra spaces around the name "Brianna"(a total of five extra spaces). We shall remove these extra spaces using the TRIM function: &lt;strong&gt;=TRIM(B2)&lt;/strong&gt;&lt;br&gt;
This formula has also been applied to the range B2:B6. The cleaned-up results are shown in column D, covering the range D2:D6.&lt;br&gt;
&lt;strong&gt;B2:B6&lt;/strong&gt; - the original range with names (some with extra spaces).&lt;br&gt;
&lt;strong&gt;TRIM(B2)&lt;/strong&gt;- removes any extra spaces before, after, or between words in B2.&lt;br&gt;
&lt;strong&gt;D2:D6&lt;/strong&gt; - the range displaying the names without extra spaces.&lt;br&gt;
This method ensures that all unnecessary spaces are removed, leaving only the properly formatted names&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCATENATE()&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This function combines multiple texts or numbers into one string&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%2F9j681gslz30129281sy0.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%2F9j681gslz30129281sy0.png" alt="Example Image Showing How to Use the CONCATENATE Formula" width="583" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For Example:&lt;/strong&gt;&lt;br&gt;
In this case we use the CONCATENATE function  to combine two names '&lt;strong&gt;&lt;em&gt;Michael' and 'Williams&lt;/em&gt;&lt;/strong&gt;'  &lt;strong&gt;=CONCATENATE (B2, " ", C2)&lt;/strong&gt;. B2  contains Michael , &lt;strong&gt;"  ",&lt;/strong&gt; (The quotation marks with a space) &lt;strong&gt;adds a space between the first and last name&lt;/strong&gt;. &lt;em&gt;Never forget to include them for spacing&lt;/em&gt;. C2 contains Williams. The combined results are displayed in column D, covering the range &lt;strong&gt;D2:D6.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;COUNTIF()&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This function is used to count cells that match a specific condition.&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%2Fj0yzwpw7cm0ppa3f23jf.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%2Fj0yzwpw7cm0ppa3f23jf.png" alt="Figure: Using the COUNTIF formula to count specific values in a range" width="605" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example we use &lt;strong&gt;COUNTIF&lt;/strong&gt; function to determine the number of employees in the finance department. &lt;strong&gt;=COUNTIF(D2:D12, "FINANCE")&lt;/strong&gt;. D2:D12 is the range of the department column, and "FINANCE" is the criteria we are counting. After pressing enter the formula gives us the total number of employees in the Finance department, &lt;strong&gt;which is 3&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SUMIF()&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This function is used to sum cells that match a specific condition&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%2Fj0c5t17lq7u0b9bmzqiy.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%2Fj0c5t17lq7u0b9bmzqiy.png" alt="Figure: Using the SUMIF formula to count specific values in a range" width="800" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example we use SUMIF function to calculate the total number of years worked by employees in the HR department. &lt;strong&gt;=SUMIF(D2:D12, "HR", E2:E12)&lt;/strong&gt;. D2:D12 Is the range containing departments names, "HR" is the criteria specifying we only want employees from the HR department and E2:E12 is the range of values to sum which is the number of years each employee has worked from the HR department which gives us a total of &lt;strong&gt;41&lt;/strong&gt; &lt;strong&gt;years&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Learning the above Excel functions has completely changed how I work with data. Before, I struggled to clean and analyze datasets, spending far too much time manually adjusting text, summing values, or counting items. Now, with these functions at my disposal, I can quickly clean data, combine information, and calculate insights with just a few formulas. Tasks that used to take hours can now be done in minutes, and I can focus more on interpreting results and making decisions.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>learning</category>
      <category>datascience</category>
    </item>
  </channel>
</rss>
