<?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: Kelvin Vosky</title>
    <description>The latest articles on DEV Community by Kelvin Vosky (@kelvin_vosky_dc39384ebad2).</description>
    <link>https://dev.to/kelvin_vosky_dc39384ebad2</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%2F3709628%2Fbef6f479-9026-416e-bbeb-2f5f87a749a5.png</url>
      <title>DEV Community: Kelvin Vosky</title>
      <link>https://dev.to/kelvin_vosky_dc39384ebad2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kelvin_vosky_dc39384ebad2"/>
    <language>en</language>
    <item>
      <title>Kilifi county insights( km-insights)</title>
      <dc:creator>Kelvin Vosky</dc:creator>
      <pubDate>Sat, 04 Apr 2026 18:04:29 +0000</pubDate>
      <link>https://dev.to/kelvin_vosky_dc39384ebad2/kilifi-county-insights-km-insights-4m8p</link>
      <guid>https://dev.to/kelvin_vosky_dc39384ebad2/kilifi-county-insights-km-insights-4m8p</guid>
      <description>&lt;p&gt;&lt;strong&gt;Kilifi County 2022 General Election Statistics (Last Election: August 9, 2022)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kilifi County had &lt;strong&gt;588,602 registered voters&lt;/strong&gt; (IEBC data). Overall voter turnout was low at approximately &lt;strong&gt;49%&lt;/strong&gt; (consistent with coastal counties; national average was ~64.8%, but Kilifi saw lower participation due to factors like apathy, economic issues, and post-COVID effects).&lt;/p&gt;

&lt;p&gt;Presidential results (county-wide): Raila Odinga (Azimio/ODM) dominated with &lt;strong&gt;71.64%&lt;/strong&gt; (204,536 votes) vs. William Ruto (UDA) at &lt;strong&gt;27.09%&lt;/strong&gt; (77,331 votes). Valid votes totalled ~285,496 + rejects. This reflected strong Azimio support along the coast.&lt;/p&gt;

&lt;p&gt;Gubernatorial results: Gideon Mung’aro (ODM) won with &lt;strong&gt;50.69%&lt;/strong&gt; (143,773 votes), beating Aisha Jumwa (UDA) at 23.23% and George Kithi (PAA) at 22.68%.&lt;/p&gt;

&lt;p&gt;Women Representative: Gertrude Mbeyu (ODM) won with &lt;strong&gt;39.33%&lt;/strong&gt; (111,039 votes).&lt;/p&gt;

&lt;h3&gt;
  
  
  Registered Voters by Constituency and Ward
&lt;/h3&gt;

&lt;p&gt;Here are the IEBC-registered voter figures (per County Assembly Ward/CAW). Kilifi has 35 wards across 7 constituencies:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kilifi North (116,742 total)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tezo: 14,830
&lt;/li&gt;
&lt;li&gt;Sokoni: 23,955
&lt;/li&gt;
&lt;li&gt;Kibarani: 15,655
&lt;/li&gt;
&lt;li&gt;Dabaso: 13,717
&lt;/li&gt;
&lt;li&gt;Matsangoni: 15,168
&lt;/li&gt;
&lt;li&gt;Watamu: 15,341
&lt;/li&gt;
&lt;li&gt;Mnarani: 18,076
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kilifi South (97,696 total)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Junju: 15,747
&lt;/li&gt;
&lt;li&gt;Mwarakaya: 12,714
&lt;/li&gt;
&lt;li&gt;Shimo La Tewa: 32,052 (largest ward)
&lt;/li&gt;
&lt;li&gt;Chasimba: 14,090
&lt;/li&gt;
&lt;li&gt;Mtepeni: 23,093
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kaloleni (73,009 total)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mariakani: 21,332
&lt;/li&gt;
&lt;li&gt;Kayafungo: 14,897
&lt;/li&gt;
&lt;li&gt;Kaloleni: 25,995
&lt;/li&gt;
&lt;li&gt;Mwanamwinga: 10,785
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Rabai (59,165 total)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mwawesa: 8,793 (smallest ward)
&lt;/li&gt;
&lt;li&gt;Ruruma: 12,058
&lt;/li&gt;
&lt;li&gt;Kambe/Ribe: 11,119
&lt;/li&gt;
&lt;li&gt;Rabai/Kisurutini: 27,195
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ganze (67,257 total)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ganze: 16,586
&lt;/li&gt;
&lt;li&gt;Bamba: 18,599
&lt;/li&gt;
&lt;li&gt;Jaribuni: 12,782
&lt;/li&gt;
&lt;li&gt;Sokoke: 19,290
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Malindi (94,605 total)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jilore: 10,464
&lt;/li&gt;
&lt;li&gt;Kakuyuni: 8,750
&lt;/li&gt;
&lt;li&gt;Ganda: 18,566
&lt;/li&gt;
&lt;li&gt;Malindi Town: 30,570
&lt;/li&gt;
&lt;li&gt;Shella: 26,255
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Magarini (80,128 total)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Marafa: 9,026
&lt;/li&gt;
&lt;li&gt;Magarini: 17,099
&lt;/li&gt;
&lt;li&gt;Gongoni: 17,685
&lt;/li&gt;
&lt;li&gt;Adu: 16,263
&lt;/li&gt;
&lt;li&gt;Garashi: 10,466
&lt;/li&gt;
&lt;li&gt;Sabaki: 9,589
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(Full ward-level registered voters from official IEBC PDF.)&lt;/p&gt;

&lt;h3&gt;
  
  
  Elected MCAs by Ward (IEBC Gazette Results)
&lt;/h3&gt;

&lt;p&gt;ODM performed strongly, winning the majority of the 35 MCA seats (~20+), reflecting the party's coastal dominance. Other wins went to PAA, UDA, independents, ANC, JP, and SPK. Here is the full list of elected MCAs with party and votes garnered (where available from IEBC declarations):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kilifi North&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tezo: Thomas Mumba Chengo (PAA) – 1,887
&lt;/li&gt;
&lt;li&gt;Sokoni: Ray Maro Katana (ODM) – 3,099
&lt;/li&gt;
&lt;li&gt;Kibarani: Moses Furaha Kea (ODM) – 2,010
&lt;/li&gt;
&lt;li&gt;Dabaso: Emmanuel Changawa Kombe (UDA) – 2,031
&lt;/li&gt;
&lt;li&gt;Matsangoni: Hassan Mohamed Said (PAA) – 2,059
&lt;/li&gt;
&lt;li&gt;Watamu: Ibrahim Abdi Athman (ODM) – 2,155
&lt;/li&gt;
&lt;li&gt;Mnarani: Juma Chengo Thoya (ODM) – 2,427
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kilifi South&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Junju: Said Juma Iddi (ODM) – 2,507
&lt;/li&gt;
&lt;li&gt;Mwarakaya: Stallone Humphrey Mkadi (ODM) – 3,304
&lt;/li&gt;
&lt;li&gt;Shimo La Tewa: Haron Tete Ndundi (ODM) – 5,789 (highest votes in county)
&lt;/li&gt;
&lt;li&gt;Chasimba: Ronald Kazungu Mbura (ODM) – 3,287
&lt;/li&gt;
&lt;li&gt;Mtepeni: Brown Safari Kahindi (ODM) – 2,257
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kaloleni&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mariakani: Martha Koki Musyoki (ODM) – 3,176
&lt;/li&gt;
&lt;li&gt;Kayafungo: Agnes Sidi (ANC) – 2,049
&lt;/li&gt;
&lt;li&gt;Kaloleni: Jonathan Birya Fondo (ODM) – 4,148
&lt;/li&gt;
&lt;li&gt;Mwanamwinga: Edward Kazungu Ziro (IND) – 1,704
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Rabai&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mwawesa: Kalama Mumba Ngome (SPK) – 738 (lowest votes)
&lt;/li&gt;
&lt;li&gt;Ruruma: Naphtali Nyae Kombo (JP) – 2,487
&lt;/li&gt;
&lt;li&gt;Kambe/Ribe: Morgan Mwagawe Kubo (UDA) – 2,924
&lt;/li&gt;
&lt;li&gt;Rabai/Kisurutini: Cantona Mae Mwadena (ODM) – 2,738
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ganze&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ganze: Benson Karisa Maneno (ODM) – 3,380
&lt;/li&gt;
&lt;li&gt;Bamba: Mwambire Mohamed Kadhengi (PAA) – 4,971
&lt;/li&gt;
&lt;li&gt;Jaribuni: Peter Safari Shehe (UDA) – 3,121
&lt;/li&gt;
&lt;li&gt;Sokoke: Harrison Taura Mweni (PAA) – 3,837
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Malindi&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jilore: Hamisi Mumbo Jambo (ODM) – 1,945
&lt;/li&gt;
&lt;li&gt;Kakuyuni: Morris Kitsao Hinzano (UDA) – 1,568
&lt;/li&gt;
&lt;li&gt;Ganda: Oscar Iha Wanje (ODM) – 2,999
&lt;/li&gt;
&lt;li&gt;Malindi Town: Rashid Odhiambo Ogelo (ODM) – 5,029
&lt;/li&gt;
&lt;li&gt;Shella: Twaher Abdulkarim Mohamed (ODM) – 3,224
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Magarini&lt;/strong&gt; (partial from available data; pattern holds)  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Marafa: Emmanuel Karisa Baya (ODM) – 2,851
&lt;/li&gt;
&lt;li&gt;Magarini: Paul Charo Kitsao (IND) – 2,432
&lt;/li&gt;
&lt;li&gt;Gongoni: Baya Stephen Mwaro (party not fully specified in partial data, but fits ODM/IND trend in results)
(Additional Magarini wards like Adu, Garashi, Sabaki follow similar low-to-mid vote patterns with mixed parties.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 51 MCAs (including nominated) were sworn in on September 20, 2022.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who Were the Majority of Voters?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ethnic majority&lt;/strong&gt;: The vast majority of voters in Kilifi wards are from the &lt;strong&gt;Mijikenda ethnic group&lt;/strong&gt;, particularly the &lt;strong&gt;Giriama&lt;/strong&gt; subgroup (dominant in rural and hinterland areas like Kilifi North, Ganze, and Magarini). Other Mijikenda subgroups (e.g., Chonyi, Rabai) are prominent in specific wards. This is the core voting bloc across most wards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demographics&lt;/strong&gt;: Nationally (and applicable to Kilifi), women made up ~49% of registered voters, and youth (~18-35) ~40%. No ward-specific gender/age turnout data exists publicly, but coastal elections often see strong youth and women participation driven by local issues. Turnout was lower in urban-ish wards like Malindi Town/Shimo La Tewa compared to rural ones.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voting was heavily influenced by ethnic loyalty to Mijikenda candidates, local patronage, and party machinery (especially ODM's coastal base), rather than strict national tickets.&lt;/p&gt;

&lt;h3&gt;
  
  
  Manifestos and What “Worked”
&lt;/h3&gt;

&lt;p&gt;Detailed ward-level manifesto analysis is limited in public post-election reports, but patterns from results and coastal politics show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ODM/Azimio-aligned platforms succeeded most&lt;/strong&gt;: Promises on &lt;strong&gt;local development&lt;/strong&gt; (roads, water, health facilities, markets, title deeds/land rights, fisheries/agriculture support, and youth jobs) resonated strongly. Coastal grievances like historical land injustice and marginalization played a role. ODM's incumbency advantage and Raila's coastal popularity helped many MCA candidates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What worked overall&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service delivery focus&lt;/strong&gt; over national ideology (e.g., ODM MCAs in Shimo La Tewa and Malindi Town won big by emphasizing infrastructure).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anti-dynasty or “hustler” messaging&lt;/strong&gt; in some UDA/PAA wins (e.g., in competitive wards like Bamba or Jaribuni), appealing to youth disillusionment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independent/local personality wins&lt;/strong&gt; (e.g., Mwanamwinga, Magarini) where voters rejected party tickets in favor of known community figures promising direct accountability.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Low turnout suggests manifestos on &lt;strong&gt;economic relief&lt;/strong&gt; (post-COVID, inflation, drought) mattered more than grand promises. Ethnicity and “homeboy/homegirl” factors often trumped detailed policy.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Kilifi politics remains personality- and ethnicity-driven at the ward level, with ODM consolidating power in 2022.&lt;/p&gt;

</description>
      <category>article</category>
    </item>
    <item>
      <title>SQL joins and window functions</title>
      <dc:creator>Kelvin Vosky</dc:creator>
      <pubDate>Sun, 08 Mar 2026 22:12:11 +0000</pubDate>
      <link>https://dev.to/kelvin_vosky_dc39384ebad2/sql-joins-and-window-functions-435a</link>
      <guid>https://dev.to/kelvin_vosky_dc39384ebad2/sql-joins-and-window-functions-435a</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Joins and Window Functions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sql joins&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;When working with relational databases, data is usually in different tables .Join functions help in combining 2 or more tables based on a related column between them usually a primary key.&lt;br&gt;
Types of Joins&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inner Join&lt;/li&gt;
&lt;li&gt;Left Join &lt;/li&gt;
&lt;li&gt;Right Join &lt;/li&gt;
&lt;li&gt;Full join &lt;/li&gt;
&lt;li&gt;Self Join&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Inner Join&lt;/strong&gt; &lt;br&gt;
Combines rows that have matching values in both tables. Inner joins only show values that are not null.&lt;br&gt;
&lt;em&gt;Example&lt;/em&gt;: Suppose we have a customers table with columns (customer_id, first_name, last_name, membership_status) and a sales table with columns (sale_id, customer_id, product_id, sale_date, total_amount). To find customers who made sales and their total purchase amounts:&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%2Flsdljo6z3qip0o8d4m1e.jpg" 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%2Flsdljo6z3qip0o8d4m1e.jpg" alt="inner join " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This returns only customers with matching sales records.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Left Join&lt;/strong&gt; &lt;br&gt;
A left join Returns all rows from the left table, and only the matched rows from the right table. If there's no match the right table returns null.&lt;br&gt;
&lt;em&gt;Example&lt;/em&gt;: Using the customers and sales tables, to list all customers and their sales, even if they have no sales:&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%2Fa49a6n3c8fn71gk3hyky.jpg" 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%2Fa49a6n3c8fn71gk3hyky.jpg" alt="left join " width="800" height="416"&gt;&lt;/a&gt;&lt;br&gt;
_Returns all customers. For those without sales, sale_id and total_amount show NULL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Right Join&lt;/strong&gt;&lt;br&gt;
Opposite of the left join, Returns all rows from the right table and matching rows from the left table. If no match, left table columns show NULL.&lt;br&gt;
&lt;em&gt;Example&lt;/em&gt;: Using the sales and inventory tables (inventory has product_id, stock_quantity), to list all sales and their stock, even if some sales have no current inventory match:&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%2Fi0l6oom61x3l8mxnv5nw.jpg" 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%2Fi0l6oom61x3l8mxnv5nw.jpg" alt="Right join" width="800" height="416"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;This includes all inventory records. For unmatched sales, stock_quantity shows NULL.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full Join(Outer)&lt;/strong&gt;&lt;br&gt;
Returns all rows from both tables, with NULLs in places where there is no match. It combines Left and Right Joins.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt; Using the products table (product_id, product_name) and sales table, to list all products and sales, including unsold products and sales without product matches:&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%2Fiys628oon38brq3p5whn.jpg" 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%2Fiys628oon38brq3p5whn.jpg" alt="full join" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This includes all products and all sales, with NULLs for unmatched rows.&lt;/strong&gt;(returns everything including null values from both tables)&lt;br&gt;
&lt;strong&gt;Self Join&lt;/strong&gt;&lt;br&gt;
Self join combines a table on itself using &lt;strong&gt;aliases.&lt;/strong&gt;&lt;br&gt;
SQL aliases are used to give a column or a table a temporary name.&lt;br&gt;
Aliases are used to make column names more readable OR Easy to remember.&lt;br&gt;
The syntax for a self join table would be &lt;br&gt;
SELECT column_list&lt;br&gt;
FROM table alias1&lt;br&gt;
INNER JOIN table alias2&lt;br&gt;
ON alias1.common_column = alias2.common_column;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example&lt;/em&gt; Example: In the customers table, to find pairs of customers with the same membership_status:&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%2Fsdqy4v442e05b2dvcegb.jpg" 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%2Fsdqy4v442e05b2dvcegb.jpg" alt="Self join" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This pairs customers sharing the same status without duplicates.&lt;/em&gt;&lt;br&gt;
we also have natural joins and cross joins but they aren't commonly used &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Window functions&lt;/strong&gt;&lt;br&gt;
SQL window functions allow performing calculations across a set of rows that are related to the current row, without collapsing the result into a single value. They are commonly used for tasks like &lt;br&gt;
Running totals (e.g., cumulative sales over time).&lt;br&gt;
Rankings (e.g., top customers by spending).&lt;br&gt;
Moving averages (e.g., average stock over months).&lt;br&gt;
Year-over-year comparisons.&lt;br&gt;
&lt;em&gt;Window functions&lt;/em&gt; fall into three main categories: aggregate, ranking, and value&lt;br&gt;
&lt;strong&gt;1)Aggregate window functions&lt;/strong&gt;&lt;br&gt;
Window functions are used with aggregate functions eg, sum(),avg(),Count,Max and Min, &lt;br&gt;
Example; To find the Average stock quantity across all products&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%2F634p142y15lemr9nrnd0.jpg" 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%2F634p142y15lemr9nrnd0.jpg" alt="window fxns" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Ranking Window Functions&lt;/strong&gt;&lt;br&gt;
These assign ranks or positions: ROW_NUMBER(), RANK(), DENSE_RANK(), NTILE(), PERCENT_RANK(), CUME_DIST().&lt;/p&gt;

&lt;p&gt;ROW_NUMBER(): Unique sequential number per row in the window (no ties).&lt;/p&gt;

&lt;p&gt;Example: Number of sales per customer by date.&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%2F25pbkcrltx9q9nzow40x.jpg" 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%2F25pbkcrltx9q9nzow40x.jpg" alt="Row no" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;RANK(): Rank with gaps for ties (e.g., 1, 2, 2, 4).&lt;/p&gt;

&lt;p&gt;Example: Rank products by total sales (join sales and products).&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%2F79r0rk8g8ou75rzzcw1f.jpg" 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%2F79r0rk8g8ou75rzzcw1f.jpg" alt="Rank" width="800" height="416"&gt;&lt;/a&gt;&lt;br&gt;
DENSE_RANK() :Return product ranks without gaps for ties, (i.e 1,2,2,3,4,4)&lt;br&gt;
NTILE(n): Divides rows into n brackets (e.g., quartiles).or percentage groups&lt;br&gt;
Example: Divide customers into 4 groups by registration date.&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%2Fkswt1dgwei7wbzywwea3.jpg" 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%2Fkswt1dgwei7wbzywwea3.jpg" alt="n-tile" width="800" height="416"&gt;&lt;/a&gt;&lt;br&gt;
PERCENT_RANK() and CUME_DIST(): Percentile-based ranks (0-1 scale).&lt;br&gt;
Example: Percent rank of sales amounts.&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%2Fn97ov7xnp71ewkxpbxn3.jpg" 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%2Fn97ov7xnp71ewkxpbxn3.jpg" alt="Percent rank of sale amount" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Give percentages ranks with highest as 1 and lowest as zero with reference to price &lt;br&gt;
&lt;strong&gt;3. Value (Analytic) Window Functions&lt;/strong&gt;&lt;br&gt;
Used to return values from other rows &lt;br&gt;
Includes LEAD(), LAG(), FIRST_VALUE(), LAST_VALUE(), NTH_VALUE().&lt;br&gt;
1)&lt;strong&gt;LEAD&lt;/strong&gt;(column, offset): Value from next row (offset=1 default).&lt;br&gt;
Shows the next value from a column ,, &lt;br&gt;
Example: Compare each sale to the next for a customer.&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%2Fubjezm4tvsbrkrfmlkxk.jpg" 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%2Fubjezm4tvsbrkrfmlkxk.jpg" alt="lead function" width="800" height="416"&gt;&lt;/a&gt;&lt;br&gt;
for my data the customers did not have subsequent sales , lead would have brought the next sale associated with the customer in the event another sale would have been made from the same customer.&lt;br&gt;
2)LAG(column, offset): Value from previous row.&lt;br&gt;
This function allows you to access the quantity of the previous row for&lt;br&gt;
each customer.&lt;br&gt;
LEAD() can be used to compare a customer's orders across different time periods, such as&lt;br&gt;
comparing the quantity of products purchased this month with the next month.&lt;br&gt;
LAG() is useful when analyzing trends or behavior changes over time, like comparing how much a customer ordered in the previous period to their current order.&lt;/p&gt;

&lt;p&gt;Which window function do you think is useful for your sql needs,let's meet and connect in the comments &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>datascience</category>
      <category>database</category>
      <category>datathings</category>
    </item>
    <item>
      <title>How Analysts Translate Messy Data, DAX, and Dashboards into Action Using Power BI.</title>
      <dc:creator>Kelvin Vosky</dc:creator>
      <pubDate>Tue, 10 Feb 2026 18:14:24 +0000</pubDate>
      <link>https://dev.to/kelvin_vosky_dc39384ebad2/how-analysts-translate-messy-data-dax-and-dashboards-into-action-using-power-bi-463l</link>
      <guid>https://dev.to/kelvin_vosky_dc39384ebad2/how-analysts-translate-messy-data-dax-and-dashboards-into-action-using-power-bi-463l</guid>
      <description>&lt;p&gt;&lt;strong&gt;Power BI&lt;/strong&gt; is an interactive data visualization and business intelligence tool developed by Microsoft. It’s part of the Microsoft Power Platform and brings together apps, services, and connectors that turn data from sources like databases, spreadsheets, PDFs, APIs, and cloud services into interactive reports and dashboards.&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%2F7pl9n9puqtdu22z5o70y.jpg" 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%2F7pl9n9puqtdu22z5o70y.jpg" alt="power bi" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the core of Power BI’s analytical power is &lt;strong&gt;Data Analysis Expressions&lt;/strong&gt; (DAX)—a formula language used to create calculations, measures, and logic within data models. &lt;strong&gt;DAX&lt;/strong&gt; helps analysts move beyond raw numbers to meaningful metrics that drive decisions.&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%2F75b5fzhnzhqf6exmpchb.jpg" 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%2F75b5fzhnzhqf6exmpchb.jpg" alt="power query interface" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The real value comes from how &lt;strong&gt;analysts&lt;/strong&gt; work with messy data, model it properly, write smart DAX, and design &lt;strong&gt;dashboards&lt;/strong&gt; that answer real business questions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Data Cleaning&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the real world, data is rarely clean.&lt;/p&gt;

&lt;p&gt;You’ll see:&lt;/p&gt;

&lt;p&gt;Missing values&lt;/p&gt;

&lt;p&gt;Duplicate records&lt;/p&gt;

&lt;p&gt;Inconsistent naming (e.g. “Nairobi”, “NRB”, “NBO”)&lt;/p&gt;

&lt;p&gt;Dates in different formats&lt;/p&gt;

&lt;p&gt;Numbers stored as text&lt;/p&gt;

&lt;p&gt;Analysts use &lt;strong&gt;Power Query&lt;/strong&gt; to handle this stage:&lt;/p&gt;

&lt;p&gt;Removing duplicates&lt;/p&gt;

&lt;p&gt;Standardizing formats&lt;/p&gt;

&lt;p&gt;Splitting and merging columns&lt;/p&gt;

&lt;p&gt;Creating calculated columns&lt;/p&gt;

&lt;p&gt;Combining multiple data sources&lt;/p&gt;

&lt;p&gt;This step is less about perfection and more about making data usable and reliable.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data Modeling&lt;/strong&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%2F4276fd089rexxn3k5ptm.jpg" alt="star schema" width="800" height="416"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once data is cleaned, analysts design a data model—usually a star schema.&lt;/p&gt;

&lt;p&gt;Fact tables → transactions, sales, orders, events&lt;/p&gt;

&lt;p&gt;Dimension tables → dates, customers, products, locations&lt;/p&gt;

&lt;p&gt;Good modeling:&lt;/p&gt;

&lt;p&gt;Reduces DAX complexity&lt;/p&gt;

&lt;p&gt;Improves performance&lt;/p&gt;

&lt;p&gt;Makes measures reusable&lt;/p&gt;

&lt;p&gt;Prevents incorrect totals&lt;/p&gt;

&lt;p&gt;Relationships, cardinality, and filter direction matter more than visuals at this stage. A clean model is what allows dashboards to scale.&lt;/p&gt;

&lt;p&gt;3.** DAX**&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DAX&lt;/strong&gt; is where analysis happens.&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%2F5fb8mtpakvkpp7ds4dh8.jpg" 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%2F5fb8mtpakvkpp7ds4dh8.jpg" alt="Dax interface" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of just showing totals, analysts write measures like:&lt;/p&gt;

&lt;p&gt;Revenue growth&lt;/p&gt;

&lt;p&gt;Month-over-month change&lt;/p&gt;

&lt;p&gt;Rolling averages&lt;/p&gt;

&lt;p&gt;Conversion rates&lt;/p&gt;

&lt;p&gt;Performance vs targets&lt;/p&gt;

&lt;p&gt;Common DAX concepts include:&lt;/p&gt;

&lt;p&gt;Measures vs calculated columns&lt;/p&gt;

&lt;p&gt;Filter context vs row context&lt;/p&gt;

&lt;p&gt;Time intelligence functions&lt;/p&gt;

&lt;p&gt;CALCULATE, FILTER, ALL, VALUES&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Dashboards&lt;/strong&gt;
A good dashboard doesn’t try to show everything.
&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%2Fzrbl16xz6tzrwak51rks.jpg" alt="dashboard" width="800" height="416"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It focuses on:&lt;/p&gt;

&lt;p&gt;Key metrics&lt;/p&gt;

&lt;p&gt;Trends over time&lt;/p&gt;

&lt;p&gt;Comparisons&lt;/p&gt;

&lt;p&gt;Exceptions and outliers&lt;/p&gt;

&lt;p&gt;Analysts design dashboards around questions like:&lt;/p&gt;

&lt;p&gt;What’s performing well?&lt;/p&gt;

&lt;p&gt;What’s declining?&lt;/p&gt;

&lt;p&gt;Where should attention go now?&lt;/p&gt;

&lt;p&gt;Interactivity (filters, slicers, drill-throughs) allows users to explore data without overwhelming them.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;From Dashboard to Action&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%2Fsqv80obwmox8auhkr8ae.jpg" 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%2Fsqv80obwmox8auhkr8ae.jpg" alt="Person giving data insights" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The final step is impact.&lt;/p&gt;

&lt;p&gt;Power BI dashboards help teams:&lt;/p&gt;

&lt;p&gt;Track &lt;strong&gt;KPIs&lt;/strong&gt; in real time&lt;/p&gt;

&lt;p&gt;Identify &lt;strong&gt;inefficiencies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Support operational decisions&lt;/p&gt;

&lt;p&gt;Communicate insights clearly&lt;/p&gt;

&lt;p&gt;When data is modeled correctly, DAX is intentional, and dashboards are focused, insights move from reports into decisions and action.What is your best part as an analyst using power bi for your analysis work ?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>data</category>
      <category>devops</category>
      <category>technology</category>
    </item>
    <item>
      <title>Schemas and Data Modelling in Power BI</title>
      <dc:creator>Kelvin Vosky</dc:creator>
      <pubDate>Mon, 02 Feb 2026 08:00:41 +0000</pubDate>
      <link>https://dev.to/kelvin_vosky_dc39384ebad2/schemas-and-data-modelling-in-power-bi-25a7</link>
      <guid>https://dev.to/kelvin_vosky_dc39384ebad2/schemas-and-data-modelling-in-power-bi-25a7</guid>
      <description>&lt;h2&gt;
  
  
  A Beginner-Friendly Guide to Building Fast and Accurate Reports
&lt;/h2&gt;

&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;When working with &lt;strong&gt;Power BI&lt;/strong&gt;, many beginners focus heavily on visuals, charts, and dashboards. While visuals are important, the real foundation of a good &lt;strong&gt;Power BI report&lt;/strong&gt; is the data model behind it.&lt;/p&gt;

&lt;p&gt;If your &lt;strong&gt;data model&lt;/strong&gt; is poorly designed:&lt;/p&gt;

&lt;p&gt;Reports become slow&lt;/p&gt;

&lt;p&gt;Numbers don’t add up correctly&lt;/p&gt;

&lt;p&gt;Filters behave unexpectedly&lt;/p&gt;

&lt;p&gt;Dashboards are hard to maintain&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;schemas&lt;/strong&gt; and data modelling come in. Understanding these concepts early will save you a lot of frustration and help you build reliable, high-performance reports.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What Is a Schema?&lt;/strong&gt;
&lt;/h2&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%2Fru94pa58g0vw4al0z4lq.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%2Fru94pa58g0vw4al0z4lq.png" alt="Schema" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
A &lt;strong&gt;schem&lt;/strong&gt;a is the overall structure or blueprint of how data is organized in a database or data model.&lt;/p&gt;

&lt;p&gt;Think of a &lt;strong&gt;schema&lt;/strong&gt; as a map that shows:&lt;/p&gt;

&lt;p&gt;What tables exist&lt;/p&gt;

&lt;p&gt;What columns (fields) each table contains&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How the tables are connected to each other&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Power BI&lt;/strong&gt;, the schema is what you see in the Model view, where tables are connected by &lt;strong&gt;relationship lines&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In simple terms:&lt;/p&gt;

&lt;p&gt;A schema explains how your data is arranged and how different pieces of data relate to one another.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Data Modelling&lt;/strong&gt;
&lt;/h2&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%2Fka69ndx5j19ouqao8gcm.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%2Fka69ndx5j19ouqao8gcm.png" alt="Data Modelling" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data modelling&lt;/strong&gt; is the process of designing that structure in a way that makes data easy to analyze, accurate to report on, and fast to query.&lt;/p&gt;

&lt;p&gt;Data modelling involves decisions like:&lt;/p&gt;

&lt;p&gt;_Which tables should exist&lt;/p&gt;

&lt;p&gt;Which tables store numbers vs descriptions&lt;/p&gt;

&lt;p&gt;How tables should be connected&lt;/p&gt;

&lt;p&gt;Which relationships should be active&lt;/p&gt;

&lt;p&gt;How filters should flow across the model_&lt;/p&gt;

&lt;p&gt;You can think of data modelling as:&lt;/p&gt;

&lt;p&gt;Designing the “engine room” of your Power BI report.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Good visuals&lt;/em&gt; sit on top of a good model. &lt;em&gt;Poor visuals&lt;/em&gt; often hide a bad model&lt;br&gt;
Key Building Blocks of Data Models&lt;/p&gt;

&lt;p&gt;Before looking at &lt;strong&gt;schema types&lt;/strong&gt;, it’s important to understand two fundamental table types used in BI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fact Tables&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A fact table stores measurable, numerical, transactional data.&lt;/p&gt;

&lt;p&gt;Characteristics:&lt;/p&gt;

&lt;p&gt;Contains metrics like sales, quantity, revenue, cost&lt;/p&gt;

&lt;p&gt;Usually very large&lt;/p&gt;

&lt;p&gt;Records events or transactions&lt;/p&gt;

&lt;p&gt;Contains foreign keys that link to dimensions&lt;/p&gt;

&lt;p&gt;Example: Sales Fact Table&lt;/p&gt;

&lt;p&gt;OrderID&lt;/p&gt;

&lt;p&gt;CustomerID&lt;/p&gt;

&lt;p&gt;ProductID&lt;/p&gt;

&lt;p&gt;DateID&lt;/p&gt;

&lt;p&gt;Quantity&lt;/p&gt;

&lt;p&gt;Revenue&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fact tables&lt;/strong&gt; answer questions like:&lt;/p&gt;

&lt;p&gt;How much?&lt;/p&gt;

&lt;p&gt;How many?&lt;/p&gt;

&lt;p&gt;How often?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dimension Tables&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;dimension table&lt;/strong&gt; stores descriptive information that helps explain or categorize facts.&lt;/p&gt;

&lt;p&gt;Characteristics:&lt;/p&gt;

&lt;p&gt;Smaller than fact tables&lt;/p&gt;

&lt;p&gt;Used for filtering, grouping, and slicing data&lt;/p&gt;

&lt;p&gt;Contains names, categories, dates, and attributes&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;Customer Dimension → CustomerID, Name, Age, Region&lt;/p&gt;

&lt;p&gt;Product Dimension → ProductID, Product Name, Category, Brand&lt;/p&gt;

&lt;p&gt;Date Dimension → DateID, Year, Quarter, Month, Day&lt;/p&gt;

&lt;p&gt;Dimension tables answer questions like:&lt;/p&gt;

&lt;p&gt;Who?&lt;/p&gt;

&lt;p&gt;What?&lt;/p&gt;

&lt;p&gt;Where?&lt;/p&gt;

&lt;p&gt;When?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Relationships in Power BI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Relationships define how tables are connected.&lt;/p&gt;

&lt;p&gt;The most common relationship in Power BI is:&lt;/p&gt;

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

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;One customer → many sales&lt;/p&gt;

&lt;p&gt;One product → many sales&lt;/p&gt;

&lt;p&gt;One date → many transactions&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Power BI&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Relationships are created in &lt;strong&gt;Model view&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Filters usually flow from dimension tables to fact tables&lt;/p&gt;

&lt;p&gt;Correct relationships are critical for accurate calculations&lt;/p&gt;

&lt;p&gt;Types of Schemas in Business Intelligence&lt;/p&gt;

&lt;p&gt;The most common schemas used in Power BI are:&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Galaxy Schema (Fact Constellation)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Star Schema&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%2Fa6wo8ybbt5i0jpia0izw.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%2Fa6wo8ybbt5i0jpia0izw.png" alt="Illustration showing star and snowflake schema" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Star Schema&lt;/strong&gt; is the most recommended and widely used schema in Power BI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A central fact table in the middle&lt;/p&gt;

&lt;p&gt;Dimension tables directly connected to the fact table&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;layout&lt;/em&gt; looks like a star&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%2Fcm3qljmjk8h2l6ir76ug.jpg" 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%2Fcm3qljmjk8h2l6ir76ug.jpg" alt="The star Schema" width="800" height="416"&gt;&lt;/a&gt;&lt;br&gt;
Components of a Star Schema&lt;br&gt;
&lt;strong&gt;Fact Table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Contains numeric measures&lt;/p&gt;

&lt;p&gt;Contains foreign keys to dimensions&lt;/p&gt;

&lt;p&gt;Large in size&lt;/p&gt;

&lt;p&gt;Example: Sales Fact&lt;/p&gt;

&lt;p&gt;OrderID&lt;/p&gt;

&lt;p&gt;CustomerID&lt;/p&gt;

&lt;p&gt;ProductID&lt;/p&gt;

&lt;p&gt;DateID&lt;/p&gt;

&lt;p&gt;Quantity&lt;/p&gt;

&lt;p&gt;Revenue&lt;/p&gt;

&lt;p&gt;Dimension Tables&lt;/p&gt;

&lt;p&gt;Contain descriptive attributes&lt;/p&gt;

&lt;p&gt;Smaller in size&lt;/p&gt;

&lt;p&gt;Used in slicers and filters&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;Customer → Name, Age, Region&lt;/p&gt;

&lt;p&gt;Product → Category, Brand&lt;/p&gt;

&lt;p&gt;Date → Year, Month, Day&lt;/p&gt;

&lt;p&gt;Why &lt;strong&gt;Star Schema&lt;/strong&gt; Is Recommended&lt;/p&gt;

&lt;p&gt;Star schema is considered best practice in Power BI because:&lt;/p&gt;

&lt;p&gt;High Performance&lt;br&gt;
Fewer joins mean faster queries and better dashboard responsiveness.&lt;/p&gt;

&lt;p&gt;Simplicity&lt;br&gt;
Easy for beginners, analysts, and business users to understand.&lt;/p&gt;

&lt;p&gt;Accurate Calculations&lt;br&gt;
DAX measures behave more predictably with clean one-to-many relationships.&lt;/p&gt;

&lt;p&gt;Better Filtering&lt;br&gt;
Filters flow cleanly from dimensions to facts.&lt;/p&gt;

&lt;p&gt;Microsoft Recommendation&lt;br&gt;
&lt;strong&gt;Microsoft explicitly&lt;/strong&gt; recommends star schemas for Power BI semantic models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Snowflake Schema&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%2Fusk5ijwgzpfrayrgw85c.jpg" 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%2Fusk5ijwgzpfrayrgw85c.jpg" alt="Snowflake Schema" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Snowflake Schema is a more complex version of a star schema.&lt;/p&gt;

&lt;p&gt;Instead of having one large dimension table, dimensions are split into multiple related tables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fact table remains central&lt;/p&gt;

&lt;p&gt;Dimension tables are normalized&lt;/p&gt;

&lt;p&gt;Dimensions branch out into sub-dimensions&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Customer → City → Region → Country&lt;/p&gt;

&lt;p&gt;Product → Category → Department&lt;/p&gt;

&lt;p&gt;Example Snowflake Design&lt;/p&gt;

&lt;p&gt;Fact Table: Sales&lt;/p&gt;

&lt;p&gt;OrderID&lt;/p&gt;

&lt;p&gt;CustomerID&lt;/p&gt;

&lt;p&gt;ProductID&lt;/p&gt;

&lt;p&gt;DateID&lt;/p&gt;

&lt;p&gt;Revenue&lt;/p&gt;

&lt;p&gt;Dimension Tables:&lt;/p&gt;

&lt;p&gt;Customer (CustomerID, Name, CityID)&lt;/p&gt;

&lt;p&gt;City (CityID, CityName, RegionID)&lt;/p&gt;

&lt;p&gt;Region (RegionID, RegionName, CountryID)&lt;/p&gt;

&lt;p&gt;Country (CountryID, CountryName)&lt;br&gt;
Advantages of Snowflake Schema&lt;/p&gt;

&lt;p&gt;Reduces data redundancy&lt;/p&gt;

&lt;p&gt;Saves storage space&lt;/p&gt;

&lt;p&gt;Maintains better data consistency&lt;/p&gt;

&lt;p&gt;Useful for very large datasets with complex hierarchies&lt;/p&gt;

&lt;p&gt;Disadvantages in Power BI&lt;/p&gt;

&lt;p&gt;More complex to design and maintain&lt;/p&gt;

&lt;p&gt;Slower performance due to many joins&lt;/p&gt;

&lt;p&gt;Harder for beginners and business users&lt;/p&gt;

&lt;p&gt;More complicated DAX calculations&lt;/p&gt;

&lt;p&gt;Because of this, snowflake schemas are generally not recommended for Power BI unless absolutely necessary.&lt;/p&gt;

&lt;p&gt;Why Good &lt;strong&gt;Data Modelling&lt;/strong&gt; Is Critical in Power BI&lt;/p&gt;

&lt;p&gt;Data modelling directly affects everything in Power BI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Performance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Well-designed models:&lt;/p&gt;

&lt;p&gt;Reduce the number of joins&lt;/p&gt;

&lt;p&gt;Improve query speed&lt;/p&gt;

&lt;p&gt;Use memory efficiently&lt;/p&gt;

&lt;p&gt;Keep dashboards responsive&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Accurate Reporting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clean relationships ensure:&lt;/p&gt;

&lt;p&gt;Correct totals and aggregations&lt;/p&gt;

&lt;p&gt;Filters work as expected&lt;/p&gt;

&lt;p&gt;No duplicated or missing values&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Scalability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Good models are:&lt;/p&gt;

&lt;p&gt;Easier to extend&lt;/p&gt;

&lt;p&gt;Easier to debug&lt;/p&gt;

&lt;p&gt;Easier to reuse across reports&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. User Experience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clear schemas:&lt;/p&gt;

&lt;p&gt;Make reports easier to understand&lt;/p&gt;

&lt;p&gt;Reduce confusion for stakeholders&lt;/p&gt;

&lt;p&gt;Improve self-service analytics&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Alignment with Best Practices&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Power BI works best when you use:&lt;/p&gt;

&lt;p&gt;Star schemas&lt;/p&gt;

&lt;p&gt;One-to-many relationships&lt;/p&gt;

&lt;p&gt;Dedicated date tables&lt;/p&gt;

&lt;p&gt;Clean, well-named fields&lt;/p&gt;

&lt;p&gt;Final Summary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schemas **and **data modelling&lt;/strong&gt; are the foundation of effective Power BI reporting.&lt;/p&gt;

&lt;p&gt;A schema defines how data is structured and connected&lt;/p&gt;

&lt;p&gt;Fact tables store numbers and metrics&lt;/p&gt;

&lt;p&gt;Dimension tables store descriptive information&lt;/p&gt;

&lt;p&gt;Star schemas are simple, fast, and recommended&lt;/p&gt;

&lt;p&gt;Snowflake schemas save space but add complexity&lt;/p&gt;

&lt;p&gt;In short:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Good data modelling&lt;/strong&gt; turns raw data into fast, accurate, and trusted insights.&lt;/em&gt;&lt;br&gt;
Thanks for reading , comment below which schema you prefer and why&lt;/p&gt;

</description>
      <category>powerfuldevs</category>
      <category>beginners</category>
      <category>powerbi</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I don't know excel, where should I start from</title>
      <dc:creator>Kelvin Vosky</dc:creator>
      <pubDate>Sun, 25 Jan 2026 13:56:44 +0000</pubDate>
      <link>https://dev.to/kelvin_vosky_dc39384ebad2/i-dont-know-excel-where-should-i-start-with-oe5</link>
      <guid>https://dev.to/kelvin_vosky_dc39384ebad2/i-dont-know-excel-where-should-i-start-with-oe5</guid>
      <description>&lt;p&gt;Microsoft Excel is one of the easiest and most popular tools for basic data analysis — especially when you're just starting out. You don't need to be a math genius or a programmer. Excel helps you organize numbers (and text), quickly find answers, spot patterns, and make simple charts — all with clicks and a few easy formulas.&lt;br&gt;
&lt;strong&gt;Step 1: Get Your Data into Excel&lt;/strong&gt;&lt;br&gt;
Open Excel → new blank workbook&lt;br&gt;
Type or paste your data (example: sales records)&lt;br&gt;
Example simple dataset :&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%2F7hcnjm3njh6g1j1qcddg.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%2F7hcnjm3njh6g1j1qcddg.png" alt="excel data" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Basic Cleaning &amp;amp; Organizing (Very Important First Step)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Remove duplicates → Select data → Data tab → Remove Duplicates&lt;br&gt;
Fix empty cells → Find &amp;amp; Select → Go To Special → Blanks → type something or delete rows&lt;br&gt;
Convert text to numbers/dates if needed (select column → Data → Text to Columns)&lt;br&gt;
Make your data a Table,  Select all data → Insert tab → Table → This adds filters automatically + makes formulas easier&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:Quick Calculations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Excel formulas start with = sign.&lt;br&gt;
Most useful beginner ones:&lt;br&gt;
=SUM– Sum adds the values of selected cells &lt;br&gt;
Eg, =SUM(B2:B100)&lt;br&gt;
=AVERAGE- Average finds the average of selected values&lt;br&gt;
Eg, =AVERAGE(B2:B100) → average &lt;br&gt;
=MAX(B2:B100) / =MIN(B2:B100) → Finds the highest &amp;amp; lowest value&lt;br&gt;
=COUNT(B2:B100) → how many numbers are there&lt;br&gt;
=COUNTA(B2:B100) →How many values are there (includes numbers and text)&lt;br&gt;
=COUNTIF(D2:D100, "Nairobi") → how many sales in Nairobi&lt;br&gt;
Example: In a new cell type&lt;br&gt;
=SUM(f2:f6)&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%2F57wmhhl76cdtn170etam.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%2F57wmhhl76cdtn170etam.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Step 4: Sort &amp;amp; Filter – Find Answers Fast&lt;/strong&gt;&lt;br&gt;
Click anywhere in your table&lt;br&gt;
Data tab → Sort (example: sort by Sales highest to lowest)&lt;br&gt;
Or click the little arrow in column header → filter only "Phone" or sales &amp;gt; 50000&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%2Fxyqe885fee2oca2k0tj8.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%2Fxyqe885fee2oca2k0tj8.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: The Super-Powerful PivotTable&lt;/strong&gt;&lt;br&gt;
PivotTables let you summarize hundreds/thousands of rows in seconds.&lt;br&gt;
How to create one&lt;br&gt;
Click anywhere in your data/table&lt;br&gt;
Insert tab → PivotTable → OK (new sheet)&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%2F6hu1zlefigjgrmnfu4o0.jpg" 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%2F6hu1zlefigjgrmnfu4o0.jpg" alt=" " width="800" height="474"&gt;&lt;/a&gt;&lt;br&gt;
In the right panel drag fields:&lt;br&gt;
Drag Region to Rows&lt;br&gt;
Drag Sales to Values (it becomes Sum of Sales automatically)&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%2Fyxytc3mef9f9qu09ictw.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%2Fyxytc3mef9f9qu09ictw.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;br&gt;
Result: You instantly see total sales per region.&lt;br&gt;
Change it to:&lt;br&gt;
Average sale per region&lt;br&gt;
Count of sales per product&lt;br&gt;
Add Product to Columns → now you get a cross-table (pivot!)&lt;br&gt;
You can also add filters (slicers)  to simplify things further&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Make Simple Charts (Visuals Tell the Story Better)&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%2Fyap4kszmemc56bdv8y0q.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%2Fyap4kszmemc56bdv8y0q.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;br&gt;
Select your summary numbers (or the PivotTable)&lt;br&gt;
Insert tab → Recommended Charts&lt;br&gt;
Or directly: Insert → Column chart / Pie chart / Line chart&lt;br&gt;
Example good charts:&lt;br&gt;
Column/Bar chart → compare sales by product or region&lt;br&gt;
Pie chart → show % share of regions (only if few categories)&lt;br&gt;
Line chart → sales over time (if you have dates)&lt;br&gt;
Finally , Visualization&lt;br&gt;
Create a new blank sheet, format the sheet to fill then add the main excerpts, titles, and kpi’s , add slicers in the chart and beside the slicers, add your charts, formart colors for general aesthetics .&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%2Fmiu0039lcpreac209izw.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%2Fmiu0039lcpreac209izw.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>data</category>
      <category>analytics</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I am learning data science but I don't know where to start from:A Beginner's Guide to Git, Git Bash, Installation, and SSH Keys</title>
      <dc:creator>Kelvin Vosky</dc:creator>
      <pubDate>Sun, 18 Jan 2026 09:18:15 +0000</pubDate>
      <link>https://dev.to/kelvin_vosky_dc39384ebad2/i-am-learning-data-science-but-i-dont-know-where-to-start-froma-beginners-guide-to-git-git-do8</link>
      <guid>https://dev.to/kelvin_vosky_dc39384ebad2/i-am-learning-data-science-but-i-dont-know-where-to-start-froma-beginners-guide-to-git-git-do8</guid>
      <description>&lt;p&gt;What is Version Control &amp;amp; Why Git?&lt;br&gt;
Version control = a system that records changes to files over time so you can recall specific versions later.&lt;br&gt;
Git is a distributed version control:&lt;/p&gt;

&lt;p&gt;Every developer has a full copy of the project history on their computer.&lt;br&gt;
You work offline, then sync when ready.&lt;/p&gt;

&lt;p&gt;Benefits for beginners:&lt;/p&gt;

&lt;p&gt;Undo mistakes easily&lt;br&gt;
See who changed what and when&lt;br&gt;
Experiment without fear (branches!)&lt;br&gt;
Collaborate without overwriting others' work&lt;/p&gt;

&lt;p&gt;Most devs use GitHub (or GitLab/Bitbucket) as the "cloud home" for repos.&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%2Fpx4rphrkr8phpc0nlwyg.jpg" 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%2Fpx4rphrkr8phpc0nlwyg.jpg" alt=" " width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Git
&lt;/h2&gt;

&lt;p&gt;Git is free, open-source, and used everywhere—from Kaggle competitions to real-world AI jobs. Git Bash? It's a command-line interface that makes Git feel like it's running on Linux/Mac, even on Windows. And SSH keys? They're a secure way to connect to remote repos without typing passwords every time.&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%2F5kivcb3j8xibhf1qfb0i.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%2F5kivcb3j8xibhf1qfb0i.png" alt="Illustration of a git workflow" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ready? Let's install and set up.&lt;br&gt;
Step 1: Installing Git&lt;br&gt;
First things first—download Git. It's available for Windows, Mac, and Linux.&lt;/p&gt;

&lt;p&gt;Go to the Official Site: Head to &lt;a href="https://git-scm.com/downloads" rel="noopener noreferrer"&gt;https://git-scm.com/downloads&lt;/a&gt; and pick your OS.&lt;br&gt;
For Windows Users (Recommended: Includes Git Bash):&lt;br&gt;
Download the installer.&lt;br&gt;
Run it and follow the prompts. Stick to defaults.&lt;br&gt;
This installs Git and Git Bash—a terminal where you'll run Git commands.&lt;/p&gt;

&lt;p&gt;For Mac Users:&lt;br&gt;
If you have Homebrew (a package manager—install it via /bin/bash -c "$(curl -fsSL &lt;a href="https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)%22" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"&lt;/a&gt;), just run brew install git.&lt;br&gt;
Or download from the site.&lt;/p&gt;

&lt;p&gt;For Linux (e.g., Ubuntu):&lt;br&gt;
Open your terminal and type sudo apt update &amp;amp;&amp;amp; sudo apt install git.&lt;/p&gt;

&lt;p&gt;Verify Installation:&lt;br&gt;
Open your terminal (Git Bash on Windows) and type git --version. You should see something like "git version 2.43.0".&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%2Fls5gk5b2ey1ialfgodeb.jpg" 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%2Fls5gk5b2ey1ialfgodeb.jpg" alt=" " width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Setting Up Git Basics
&lt;/h2&gt;

&lt;p&gt;Before we connect to the cloud, configure Git on your machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set Your Identity&lt;/strong&gt; (Git needs to know who you are for commits)git config --global user.name "Your Name"  # e.g., "Kelvin Vosky"&lt;br&gt;
git config --global user.email "&lt;a href="mailto:your.email@example.com"&gt;your.email@example.com&lt;/a&gt;"  # Use the email tied to your GitHub account&lt;br&gt;
Create a GitHub Account (If You Don't Have One):&lt;br&gt;
Sign up at github.com—it's free!&lt;br&gt;
This is where you'll store your data science projects remotely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Push and pull requests
&lt;/h2&gt;

&lt;p&gt;What is git push? (The Direct Upload)&lt;/p&gt;

&lt;p&gt;git push is a simple command that uploads (sends) your committed changes from your local computer up to the remote repository (like GitHub).&lt;br&gt;
Example:&lt;br&gt;
Bashgit push origin main&lt;/p&gt;

&lt;p&gt;This means: "Take my local 'main' branch commits and push them to the 'main' branch on GitHub."&lt;br&gt;
It's fast and direct — great when:&lt;br&gt;
You're working alone (your own data science projects).&lt;br&gt;
You have permission to push directly to the main branch (e.g., your personal repo).&lt;/p&gt;

&lt;p&gt;In data science: Use it to backup your analysis notebooks, update your portfolio, or sync code between your laptop and desktop.&lt;/p&gt;

&lt;p&gt;Think of push as "I'm sending my work up to the cloud!"&lt;/p&gt;

&lt;p&gt;What is a Pull Request (PR)? (The Review &amp;amp; Merge Step)&lt;br&gt;
A pull request is not a Git command like git push — it's a feature on GitHub (or GitLab/Bitbucket) that lets you propose changes and ask someone to review and merge them.&lt;br&gt;
Here's how it usually works (the safe, team-friendly way):&lt;/p&gt;

&lt;p&gt;You create a new branch (e.g., feature-new-model).&lt;br&gt;
Make changes, commit, and push the branch to GitHub:Bashgit push origin feature-new-model&lt;br&gt;
On GitHub, click "Compare &amp;amp; pull request" (or "New pull request").&lt;br&gt;
You describe your changes (e.g., "Added random forest model for better accuracy").&lt;br&gt;
Others review your code, comment, suggest fixes.&lt;br&gt;
When approved, someone (or you, if allowed) merges the PR into the main branch.&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%2Fg8nmk552qj5ynjglsroi.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%2Fg8nmk552qj5ynjglsroi.png" alt="Git push and pull requests" width="640" height="360"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Initialize Your First Repo:
&lt;/h2&gt;

&lt;p&gt;Create a folder for your project: mkdir my-data-project then cd my-data-project.&lt;br&gt;
Run git init to start tracking changes.&lt;/p&gt;

&lt;p&gt;Now, let's make your first commit:&lt;/p&gt;

&lt;p&gt;Create a file, e.g., touch README.md (or use a text editor).&lt;br&gt;
Add some text: "My first data science project!"&lt;br&gt;
Stage it: git add README.md&lt;br&gt;
Commit: git commit -m "Initial commit"&lt;br&gt;
Check status: git status (should say "nothing to commit").&lt;/p&gt;

&lt;p&gt;Boom—your changes are tracked!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Generating and Connecting SSH Keys
&lt;/h2&gt;

&lt;p&gt;Passwords are annoying, especially when pushing code multiple times a day. SSH keys provide secure, passwordless access to GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check for Existing Keys:
&lt;/h2&gt;

&lt;p&gt;In Git Bash/terminal: ls -al ~/.ssh&lt;br&gt;
If you see id_rsa.pub or id_ed25519.pub, you might already have one. Skip to adding it to GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generate a New SSH Key:
&lt;/h2&gt;

&lt;p&gt;Run: ssh-keygen -t ed25519 -C "&lt;a href="mailto:your.email@example.com"&gt;your.email@example.com&lt;/a&gt;"&lt;br&gt;
Hit Enter for defaults (or set a passphrase for extra security).&lt;br&gt;
This creates two files: ~/.ssh/id_ed25519 (private key—keep secret!) and ~/.ssh/id_ed25519.pub (public key—to share).&lt;/p&gt;

&lt;p&gt;Add the Key to SSH Agent (For Auto-Loading):&lt;br&gt;
Start the agent: eval "$(ssh-agent -s)"&lt;br&gt;
Add your key: ssh-add ~/.ssh/id_ed25519&lt;/p&gt;

&lt;p&gt;Copy the Public Key:&lt;br&gt;
Mac/Linux: cat ~/.ssh/id_ed25519.pub (copy the output).&lt;br&gt;
Windows: clip &amp;lt; ~/.ssh/id_ed25519.pub (copies to clipboard).&lt;/p&gt;

&lt;p&gt;Add to GitHub:&lt;br&gt;
Log in to GitHub &amp;gt; Settings (top-right avatar) &amp;gt; SSH and GPG keys &amp;gt; New SSH key.&lt;br&gt;
Paste your public key, title it (e.g., "My Laptop Key"), and add.&lt;/p&gt;

&lt;p&gt;Test the Connection:&lt;br&gt;
Run: ssh -T &lt;a href="mailto:git@github.com"&gt;git@github.com&lt;/a&gt;&lt;br&gt;
If it says "Hi username! You've successfully authenticated," you're good!&lt;/p&gt;

&lt;p&gt;Now, when creating/cloning repos, use the SSH URL (e.g., &lt;a href="mailto:git@github.com"&gt;git@github.com&lt;/a&gt;:username/repo.git) instead of HTTPS.&lt;br&gt;
Step 4: Connecting to a Remote Repo and Basic Commands&lt;br&gt;
Let's put it all together.&lt;/p&gt;

&lt;p&gt;Create a Repo on GitHub:&lt;br&gt;
New &amp;gt; Name it "my-data-project" &amp;gt; Create (don't add README yet).&lt;/p&gt;

&lt;p&gt;Link Local to Remote:&lt;br&gt;
In your local folder: git remote add origin &lt;a href="mailto:git@github.com"&gt;git@github.com&lt;/a&gt;:yourusername/my-data-project.git&lt;/p&gt;

&lt;p&gt;Push Your Code:&lt;br&gt;
git push -u origin main (first time; later just git push).&lt;/p&gt;

&lt;p&gt;Pull Changes (If Collaborating):&lt;br&gt;
git pull origin main to get updates from remote.&lt;/p&gt;

&lt;p&gt;Other essentials for data science:&lt;/p&gt;

&lt;p&gt;Clone a Repo: git clone &lt;a href="mailto:git@github.com"&gt;git@github.com&lt;/a&gt;:username/repo.git (great for Kaggle datasets or open-source projects).&lt;br&gt;
Branching: git checkout -b experiment-model (try new ideas without breaking main).&lt;br&gt;
Merge: git checkout main then git merge experiment-model.&lt;br&gt;
Ignore Files: Create .gitignore for big datasets (e.g., add "data/*.csv").&lt;/p&gt;

&lt;p&gt;Common shortcomings (And How to Fix Them)&lt;/p&gt;

&lt;p&gt;Permission Denied? Double-check SSH setup—test with ssh -T &lt;a href="mailto:git@github.com"&gt;git@github.com&lt;/a&gt;.&lt;br&gt;
Conflicts on Pull? Git will highlight issues; edit files, then git add and commit.&lt;br&gt;
Forgot to Commit? Always git status before pushing.&lt;br&gt;
Next:Installing Power bi, d beaver and postgress sql&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>datascience</category>
      <category>git</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I'm New Here</title>
      <dc:creator>Kelvin Vosky</dc:creator>
      <pubDate>Tue, 13 Jan 2026 18:30:08 +0000</pubDate>
      <link>https://dev.to/kelvin_vosky_dc39384ebad2/im-new-here-3n7p</link>
      <guid>https://dev.to/kelvin_vosky_dc39384ebad2/im-new-here-3n7p</guid>
      <description>&lt;p&gt;Hello Techies , I'm new here &lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
  </channel>
</rss>
