<?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: Solomon</title>
    <description>The latest articles on DEV Community by Solomon (@solo_495).</description>
    <link>https://dev.to/solo_495</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3963942%2F48ee450c-a8bb-48f5-acc0-ecb629800ee3.png</url>
      <title>DEV Community: Solomon</title>
      <link>https://dev.to/solo_495</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/solo_495"/>
    <language>en</language>
    <item>
      <title>WHERE vs HAVING in SQL: A Simple Way to Understand the Difference</title>
      <dc:creator>Solomon</dc:creator>
      <pubDate>Mon, 12 Oct 2026 11:30:10 +0000</pubDate>
      <link>https://dev.to/solo_495/where-vs-having-in-sql-a-simple-way-to-understand-the-difference-2ihp</link>
      <guid>https://dev.to/solo_495/where-vs-having-in-sql-a-simple-way-to-understand-the-difference-2ihp</guid>
      <description>&lt;p&gt;If you’ve ever mixed up WHERE and HAVING, you’re not alone. They both filter data, so it feels like you should be able to use either one. But they filter at different moments, and once you get that, the confusion goes away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The one-line answer&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;WHERE&lt;/strong&gt; filters individual rows before any grouping happens.&lt;br&gt;
&lt;strong&gt;HAVING&lt;/strong&gt; filters groups after the grouping and math (SUM, COUNT, AVG) is done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Quick Analogy&lt;/strong&gt;&lt;br&gt;
Suppose there is an event in which the individuals attending are divided into tables:&lt;br&gt;
&lt;strong&gt;WHERE&lt;/strong&gt; is the bouncer at the door. Allows entry on a first-come, first-served basis, according to the individual person profile, i.e ('no under-18s').&lt;br&gt;
&lt;strong&gt;HAVING&lt;/strong&gt; is the host verifying the tables after everyone has been seated. If a table has less than 4 people, it is merged with another table. The host can only evaluate a table after it is created.&lt;/p&gt;

&lt;p&gt;The bouncer can't tell if the table is good or bad, since there are no tables at the door. Because of this, aggregate functions such as SUM() and COUNT() cannot be used in WHERE.&lt;br&gt;
We will use a small orders table to make it easy to verify the results in pgAdmin.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5di7s1azh494ta7ih25z.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5di7s1azh494ta7ih25z.png" alt=" " width="776" height="718"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: WHERE filters rows&lt;/strong&gt;&lt;br&gt;
If we just want orders worth more than 100:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll get 4 rows (500, 300, 120, 700). Postgres iterated through each row and asked, "Is this over 100?" Simple.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz3tv8whxmar49k57edtd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz3tv8whxmar49k57edtd.png" alt=" " width="700" height="148"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: GROUP BY&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, let's take a look at the total amount spent by each customer so we have something to filter later.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;total_spent&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faxhdzx46ya27d5wmqsre.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faxhdzx46ya27d5wmqsre.png" alt=" " width="745" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: HAVING filters groups&lt;/strong&gt;&lt;br&gt;
What if we just want the customers who spent more than 200 in total?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;total_spent&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt;
&lt;span class="k"&gt;HAVING&lt;/span&gt; &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chloe (180) disappears. In this case, we are filtering the totals, not the rows.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftvsf6ttw7mgf5gjgsa83.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftvsf6ttw7mgf5gjgsa83.png" alt=" " width="756" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Using both together&lt;/strong&gt;&lt;br&gt;
This is where it comes home to me. Let's say we want the total money spent per customer, but only those that have completed orders and only those whose total money spent is greater than 200:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;total_spent&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'completed'&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt;
&lt;span class="k"&gt;HAVING&lt;/span&gt; &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb7vu7ql6oug41fcutyfp.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb7vu7ql6oug41fcutyfp.png" alt=" " width="756" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice what changed compared to Step 3. David is gone, because his big 700 order was cancelled, so WHERE threw it out before the math happened. His completed total is only 60. Brian’s total also dropped from 380 to 300 because his cancelled order was removed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why the order matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SQL doesn’t run your query in the order you write it. It runs roughly like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;FROM&lt;/code&gt; (pick the table)&lt;br&gt;
&lt;code&gt;WHERE&lt;/code&gt; (filter rows)&lt;br&gt;
&lt;code&gt;GROUP BY&lt;/code&gt; (make the groups)&lt;br&gt;
&lt;code&gt;HAVING&lt;/code&gt; (filter groups)&lt;br&gt;
&lt;code&gt;SELECT&lt;/code&gt; (pick the columns)&lt;br&gt;
&lt;code&gt;ORDER BY&lt;/code&gt; (sort)&lt;/p&gt;

&lt;p&gt;WHERE comes before GROUP BY, so it can only see raw rows. HAVING comes after, so it can see the group totals. That one fact explains everything.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>database</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>From Managed Cloud DB to Dashboards: Connecting Aiven PostgreSQL with DBeaver, pgAdmin, and Power BI</title>
      <dc:creator>Solomon</dc:creator>
      <pubDate>Tue, 21 Jul 2026 11:01:07 +0000</pubDate>
      <link>https://dev.to/solo_495/from-managed-cloud-db-to-dashboards-connecting-aiven-postgresql-with-dbeaver-pgadmin-and-power-bi-53gi</link>
      <guid>https://dev.to/solo_495/from-managed-cloud-db-to-dashboards-connecting-aiven-postgresql-with-dbeaver-pgadmin-and-power-bi-53gi</guid>
      <description>&lt;p&gt;In this article, I would like to walk you through the journey of storing data, querying data, and visualizing data in an organised and safe manner.&lt;br&gt;
Starting with &lt;code&gt;Aiven&lt;/code&gt;, which is a cloud data warehouse host; later on in the article, we will discuss why Aiven.&lt;/p&gt;

&lt;p&gt;Secondly, there are &lt;code&gt;DBeaver &amp;amp; pgAdmin&lt;/code&gt;; basically, these are command centers for managing, cleaning, and querying the data. The main difference between the two is that PgAdmin only supports PostgreSQL, while DBeaver supports multiple databases.&lt;/p&gt;

&lt;p&gt;Lastly, &lt;code&gt;Power BI&lt;/code&gt; is a powerful visualization tool used to display a range of visualizations to end users to support data-driven decision-making.&lt;/p&gt;

&lt;p&gt;You might ask, "Why connect all these tools?"&lt;br&gt;
The answer is simple: automation and synchronization. By bridging this stack, any changes made to the cloud database can be instantly pushed to the end users. A single click of the "Refresh" button in Power BI automatically updates all the visualizations with real-time data&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SETTING UP AIVEN AND WHY AIVEN&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;The why&lt;/em&gt;&lt;br&gt;
Aiven is a completely managed database as opposed to traditional Cloud Providers like AWS or Google Cloud, where you are trapped under their rules and their fluctuating utility bills.&lt;br&gt;
&lt;em&gt;I would want you to think of it like this&lt;/em&gt;: &lt;br&gt;
You are a businessperson who wants to deliver goods in the most cost-effective and efficient way&lt;br&gt;
&lt;em&gt;What do you do?&lt;/em&gt;&lt;br&gt;
You hire a world-class logistics company instead of buying your own delivery trucks; it gives you the same power to move your goods, but someone else handles all the maintenance, flat tires, and breakdowns for a predictable flat fee.&lt;/p&gt;

&lt;p&gt;Basically, that's what Aiven does, but now with data and not goods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Setup&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign Up: Create an account on the &lt;a href="https://console.aiven.io/signup" rel="noopener noreferrer"&gt;Aiven Console&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Deploy the Service: Click Create Project and then click Create Service, select PostgreSQL, and choose your underlying cloud provider and region.
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1n0fxs6d2xor7i1qpitk.png" alt=" " width="674" height="501"&gt;
&lt;/li&gt;
&lt;li&gt;Launch: Pick your plan (in my case, I picked the free tier) and click deploy. Within minutes, your status will change to Running, as shown below
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F255rm60qzq09s5btv8ch.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F255rm60qzq09s5btv8ch.png" alt=" " width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connecting DBeaver to Aiven&lt;/strong&gt;&lt;br&gt;
Now that our cloud database is running, we need a command center to talk to it. Let’s start with DBeaver. Because DBeaver is a universal database manager, it handles the connection drivers for us automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you do?&lt;/strong&gt;&lt;br&gt;
Open DBeaver and click on the Plug icon (New Database Connection) in the top left corner.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl5x2w21dwnvh8hdab0nb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl5x2w21dwnvh8hdab0nb.png" alt=" " width="800" height="705"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select PostgreSQL from the list and click Next.&lt;br&gt;
In the Main tab, fill in your connection details copied straight from your Aiven Console:&lt;br&gt;
Host: &lt;em&gt;Your Aiven host _&lt;br&gt;
URL Port: _5432&lt;/em&gt;&lt;br&gt;
Database: &lt;em&gt;defaultdb&lt;/em&gt;&lt;br&gt;
Username: &lt;em&gt;avnadmin&lt;/em&gt;&lt;br&gt;
Password: &lt;em&gt;"Your secure Aiven password"&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F38rbi9yqt8fqard5szvh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F38rbi9yqt8fqard5szvh.png" alt=" " width="588" height="618"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the SSL tab at the top. Check the box for Use SSL. Next to Root certificate, browse your computer and select the &lt;code&gt;ca.pem&lt;/code&gt; file you downloaded from Aiven. Click Test Connection.&lt;/p&gt;

&lt;p&gt;DBeaver will download the drivers, and you will see a success message. Click Finish.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connecting PGAdmin to Aiven&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next up is pgAdmin. Remember, pgAdmin is specifically built &lt;em&gt;only&lt;/em&gt; for PostgreSQL, so its connection settings are tailored a bit differently. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you do?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open pgAdmin, right-click on Servers in the left sidebar, select Register, and click Server.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsvpox2lc3boxa0395g05.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsvpox2lc3boxa0395g05.png" alt=" " width="605" height="179"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the General tab, give your connection a name.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff8ddr1x4i4zmstxp0g35.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff8ddr1x4i4zmstxp0g35.png" alt=" " width="715" height="563"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Move to the Connection tab and enter your Aiven details into the Host, Port, Maintenance Database &lt;code&gt;defaultdb&lt;/code&gt;, Username, and Password fields.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Famdgfb0lx5ar5mt73idz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Famdgfb0lx5ar5mt73idz.png" alt=" " width="711" height="561"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Move to the Parameters tab. Set the &lt;code&gt;SSL&lt;/code&gt; mode dropdown to &lt;code&gt;Require&lt;/code&gt;. Click the folder icon and upload your Aiven &lt;code&gt;ca.pem&lt;/code&gt; file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click Save. Your Aiven database will appear in the sidebar, ready for queries.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Hooking up Power BI to Aiven&lt;/strong&gt;&lt;br&gt;
Our database is managed and accessible; now it is time to bring the data to life for our end users. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you do?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Power BI Desktop, go to the Home ribbon, click Get Data, and select PostgreSQL database.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the Server box, paste your Aiven Host string followed by a colon and the port (e.g., &lt;code&gt;://aivencloud.com&lt;/code&gt;). In the Database box, type &lt;code&gt;defaultdb&lt;/code&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4y95v2uyvd81nythql09.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4y95v2uyvd81nythql09.png" alt=" " width="714" height="365"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose your &lt;strong&gt;Data Connectivity Mode&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Import:&lt;/strong&gt; Copies a snapshot of the data into Power BI (faster for performance).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DirectQuery:&lt;/strong&gt; Queries Aiven live every time someone clicks a visual.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click OK. A window will pop up asking for credentials. Select Database on the left menu, enter your &lt;code&gt;avnadmin&lt;/code&gt; username and password, and click Connect.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frupggfljf05lv74djuei.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frupggfljf05lv74djuei.png" alt=" " width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Navigator window will open. Check the boxes next to the tables you want to visualize, click Load, and start dragging fields onto your canvas to build your dashboard!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
By connecting Aiven, DBeaver, pgAdmin, and Power BI, you create a seamless pipeline. You can manage your backend structures universally in DBeaver, do deeper Postgres administration in pgAdmin, and serve fresh data to business decision-makers in Power BI with a single click of the refresh button.&lt;/p&gt;

</description>
      <category>postgressql</category>
      <category>powerbi</category>
      <category>dbeaver</category>
      <category>aiven</category>
    </item>
    <item>
      <title>Excel Beyond the Cells</title>
      <dc:creator>Solomon</dc:creator>
      <pubDate>Sat, 04 Jul 2026 22:08:27 +0000</pubDate>
      <link>https://dev.to/solo_495/excel-beyond-the-cells-4i8e</link>
      <guid>https://dev.to/solo_495/excel-beyond-the-cells-4i8e</guid>
      <description>&lt;p&gt;What comes to mind when you think of "Excel beyond the cells"? Throughout my data analysis journey, one tool that has been full of surprises is Excel. Most of us get to a point where we master the layout, learn several functions, and feel unstoppable. But then you are presented with a workbook containing some nested &lt;code&gt;XLOOKUPs&lt;/code&gt; that throw an error at the slightest inconvenience. That is exactly when things get ugly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. TAMING THE FORMULAS&lt;/strong&gt;&lt;br&gt;
Let's start with formulas, the foundation of almost every workbook. When formulas are left untamed, the result is unwanted errors in the workbook. While &lt;code&gt;XLOOKUPs&lt;/code&gt; are better compared to old &lt;code&gt;VLOOKUPs&lt;/code&gt; due to their ability to check left and right, they become difficult to deal with when left nested blindly. To avoid errors in such formulas, the best practice is to use the &lt;code&gt;IFERROR&lt;/code&gt; safety net.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A visual comparison of XLOOKUPs and VLOOKUPs&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fma6x4bof9dnpghy0o0wv.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fma6x4bof9dnpghy0o0wv.png" alt=" " width="777" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example of an XLOOKUP&lt;br&gt;
&lt;code&gt;=XLOOKUP(lookup_value, lookup_array, return_array,"Not Found")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Natively, &lt;code&gt;XLOOKUP&lt;/code&gt; has its own way of dealing with an error using the fourth argument written as "Not Found" in the example. The argument makes sure that the formula returns a value instead of &lt;code&gt;#NA&lt;/code&gt;.&lt;br&gt;
When a formula is expected to search multiple sources, IFERROR can be useful for gracefully falling back to another lookup. However, it should be used carefully because it can also hide unexpected errors.&lt;/p&gt;

&lt;p&gt;Example of a nested XLOOKUP utilising an IFERROR safety net&lt;br&gt;
&lt;code&gt;=IFERROR(XLOOKUP(A2, Table1_Lookup, Table1_Return), XLOOKUP(A2, Table2_Lookup, Table2_Return))&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Visual representation&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjlsuwjg056fordp4fu1l.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjlsuwjg056fordp4fu1l.png" alt=" " width="681" height="595"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. POWER QUERY&lt;/strong&gt;&lt;br&gt;
Once formulas become difficult to manage, the next logical step is automation with Power Query. Power Query is a robotic tool in Excel that eliminates the need to transform data manually. From deleting blank rows to adding custom columns and splitting columns, Power Query is the right tool for any data cleaning task. The most practical and enticing part is the fact that all these steps are recorded. When new data comes in, the data is cleaned with a single click of the refresh button.&lt;br&gt;
&lt;em&gt;Visual representation&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqw9uayhkzlbxkbaijnh5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqw9uayhkzlbxkbaijnh5.png" alt=" " width="584" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Pivot tables (The storyteller)&lt;/strong&gt;&lt;br&gt;
A pivot table takes thousands of rows and condenses them into a clickable summary. Analysis that can take hours to complete using formulas is completed in seconds using pivot tables. They are vital in creating summary tables and slicers in Excel dashboards, this creates a fully interactive and usable dashboard that can effectively support decision-making.&lt;/p&gt;

&lt;p&gt;Combining this and Power Query, a developer can create a self-sustaining ecosystem where the data is refreshed and fully updated on the dashboard&lt;/p&gt;

&lt;p&gt;In conclusion, Excel remains one of the best tools for exploring and understanding data. From basic analysis that can be handled using basic formulas to complex analysis that needs Power Query and Power Pivot, Excel is the go-to tool for entry-level analysts. However, as datasets grow, analysts need to use specific tools like Power BI for visualization, which is something I will explore more in my next article.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How Excel is Used in Real-World Data Analysis</title>
      <dc:creator>Solomon</dc:creator>
      <pubDate>Sun, 07 Jun 2026 10:45:25 +0000</pubDate>
      <link>https://dev.to/solo_495/how-excel-is-used-in-real-world-data-analysis-3m57</link>
      <guid>https://dev.to/solo_495/how-excel-is-used-in-real-world-data-analysis-3m57</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
Excel is a versatile software by Microsoft used to explore and manipulate data to generate meaningful insights from data. Due to its versatility, Excel is used in different fields, ranging from finance, engineering, and business&lt;br&gt;
&lt;strong&gt;Uses of Excel in real_world data analysis&lt;/strong&gt;&lt;br&gt;
Excel is used in the field of Health and Medicine to track patient data management systems. This is done by tracking clinic wait times, appointment volumes, and patient demographics. Secondly, researchers use Excel to organize trial phases and patient dosage responses.&lt;/p&gt;

&lt;p&gt;On the other hand, Excel is widely used in the field of Finance and Accounting. Billing and payroll heavily depend on Excel to generate automated invoices and expense logs. Also, it is used to track business and personal expenses with tools like a 'Budget tracker' in Excel. This feature helps individuals and businesses operate within their budgets. As a frequent user of a budget tracker, I can confidently say that Excel is a very functional tool in managing finances. Using features like &lt;code&gt;what if&lt;/code&gt; analyses helps businesses run financial models and make strategic business decisions.&lt;/p&gt;

&lt;p&gt;In Administration and Organization, Excel is used as light weight Customer relationship management(CRM). This is due to its ability to sort, filter, and store customer information. When it comes to task automation, organizations utilize features like VBA and macros to turn repetitive manual processes into automated processes.&lt;br&gt;
&lt;strong&gt;Features and Formulas in Excel&lt;/strong&gt;&lt;br&gt;
The first cool feature I learnt in Excel was the 'fill handle', clicking the tiny green square at the bottom of a cell and dragging it down quickly copies data or continues a pattern. This is one of the easiest and most convenient features in Excel.&lt;/p&gt;

&lt;p&gt;Formulas in Excel make it simple to perform basic statistics in Excel. Basic formulas like &lt;code&gt;SUM&lt;/code&gt; add a range of numbers together, and &lt;code&gt;COUNT&lt;/code&gt; counts how many cells in a range contain numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personal Reflection&lt;/strong&gt;&lt;br&gt;
Learning Excel has changed the way I view data. Instead of seeing data as just numbers, I now see it as a source of valuable insights. Through formulas, charts, and analytical tools, I have learnt how to identify trends and support decision-making. As someone interested in data analysis, Excel has become an essential tool for working with data efficiently and effectively.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>data</category>
      <category>datascience</category>
      <category>microsoft</category>
    </item>
  </channel>
</rss>
