Project

Building a Comprehensive Sales and Inventory Analytics Dashboard with Power BI

A practical project to harness the power of Power BI for deep insights into sales and inventory data using DAX.

Empty image or helper icon

Building a Comprehensive Sales and Inventory Analytics Dashboard with Power BI

Description

This project focuses on building a robust data model within Power BI that incorporates two key fact tables—sales data and inventory data—along with a date table for time-based analysis. Participants will learn how to leverage DAX to create measures that provide valuable insights, such as inventory value divided by sales. The project is structured around three main curriculum units, guiding you from data modeling to advanced analytics.

The original prompt:

build a model with two fact tables and one date table. One table is sales data and second table is inventory data. Create measures to calculate inventory value divided by sales

Data Modeling and Integration in Power BI Using DAX

Introduction

This practical guide will walk you through the steps to create a data model and perform data integration in Power BI using DAX (Data Analysis Expressions). The goal is to transform sales and inventory data into actionable insights.

Setting up Power BI Environment

  1. Import Data: Begin by importing the sales and inventory datasets into Power BI.

    • Go to Home -> Get Data -> Excel, CSV, or connect to your database of choice.
    • Select your files and load the data into Power BI.
  2. Data Preparation:

    • Check for any missing values and handle them appropriately.
    • Ensure that data types are correctly set (e.g., dates are in date format, numbers in numeric format).

Data Modeling

  1. Create Relationships:
    • Navigate to the Model view.
    • Drag and drop to create relationships between tables (e.g., Sales table and Products table through ProductID).
Relationships:
Sales[ProductID] --> Products[ProductID]
Inventory[ProductID] --> Products[ProductID]
  1. Creating Calculated Columns:
    • In the Sales table, create a calculated column to compute TotalSales.
TotalSales = Sales[Quantity] * Sales[UnitPrice]
- In the `Inventory` table, create a calculated column to compute `StockValue`.
StockValue = Inventory[StockQuantity] * Inventory[UnitCost]
  1. Creating Measures:
    • Measures are essential for summarizing data. For example, total revenue and total stock value.
TotalRevenue = SUM(Sales[TotalSales])
TotalStockValue = SUM(Inventory[StockValue])

Data Integration

  1. Integration and Aggregation:
    • Aggregate sales and inventory data to show the current stock and revenue for products.
CurrentStock = 
    CALCULATE(
        SUM(Inventory[StockQuantity]),
        Inventory[StockQuantity] > 0
    )

RevenueByProduct = 
    SUMX(
        Inventory,
        Inventory[StockQuantity] * RELATED(Sales[UnitPrice])
    )
  1. Creating a Date Table:
    • Use a date table to perform time-based analysis.
Date = 
    CALENDAR(
        MIN(Sales[OrderDate]), 
        MAX(Sales[OrderDate])
    )

Year = YEAR(Date[Date])
Month = FORMAT(Date[Date], "MMM")
  1. Time Intelligence:
    • Add measures that use time intelligence, like year-to-date (YTD) sales.
YTD_Sales = 
    CALCULATE(
        [TotalRevenue],
        DATESYTD(Date[Date])
    )

Visualization Setup

  1. Creating Visualizations:

    • Switch to the Report view.
    • Create standard visualizations such as bar charts, line charts, and tables to represent the aggregated data.
  2. Linking Slicers:

    • Add slicers for the date, product category, etc., to allow dynamic filtering of data.
  3. Custom Visuals:

    • Use conditional formatting to highlight KPIs.

Final Steps

  1. Publishing the Report:

    • Once your data model and visuals are ready, publish the report to Power BI Service.
  2. Setting Up Dashboard:

    • Pin the visualizations to a dashboard for real-time insights.
  3. Schedule Data Refresh:

    • Set up a schedule to automatically refresh the data to ensure the report always shows the latest information.

By following these steps, you will create a robust data model and perform data integration using DAX in Power BI, resulting in powerful insights into your sales and inventory data.

Advanced DAX for Sales and Inventory Metrics in Power BI

Sales Metrics

Total Sales Amount

Total Sales Amount = 
SUMX(
    Sales,
    Sales[Quantity] * Sales[Unit Price]
)

Year-over-Year Sales Growth

YoY Sales Growth = 
VAR CurrentYearSales = CALCULATE([Total Sales Amount], YEAR(Sales[Date]) = YEAR(TODAY()))
VAR PreviousYearSales = CALCULATE([Total Sales Amount], YEAR(Sales[Date]) = YEAR(TODAY()) - 1)
RETURN
    DIVIDE(CurrentYearSales - PreviousYearSales, PreviousYearSales, 0)

Sales by Product Category

Sales by Product Category = 
SUMMARIZE(
    Sales,
    Product[Category],
    "Category Sales", [Total Sales Amount]
)

Inventory Metrics

Total Inventory Quantity

Total Inventory Quantity = 
SUM(Inventory[Quantity])

Inventory Turnover Ratio

Inventory Turnover Ratio = 
DIVIDE(
    [Total Sales Amount],
    AVERAGE(Inventory[Quantity])
)

Days Sales of Inventory (DSI)

Days Sales of Inventory (DSI) = 
DIVIDE(
    [Total Inventory Quantity] * 365,
    [Total Sales Amount]
)

Combining Metrics for Dashboard Insights

Sales to Inventory Ratio

Sales to Inventory Ratio = 
DIVIDE(
    [Total Sales Amount],
    [Total Inventory Quantity]
)

Inventory Reorder Point

Reorder Point considering a lead time of 7 days and safety stock of 100 units:

Reorder Point = 
VAR LeadTime = 7
VAR SafetyStock = 100
VAR AverageDailySales = DIVIDE([Total Sales Amount], 365)
RETURN
    (LeadTime * AverageDailySales) + SafetyStock

Filter and Context-Sensitive Measures

Sales with Context Filtering (e.g., by Region)

Sales by Region = 
CALCULATE(
    [Total Sales Amount],
    Sales[Region] = "Specific Region"
)

Remaining Inventory by Warehouse

Remaining Inventory by Warehouse = 
CALCULATE(
    [Total Inventory Quantity],
    Inventory[Warehouse] = "Specific Warehouse"
)

Implementing these metrics using DAX in Power BI will allow for powerful, data-driven insights into sales and inventory management. Each measure or calculated column can be created within the Power BI environment, enabling the construction of sophisticated and interactive reports and dashboards.

Interactive Dashboards and Insights in Power BI Using DAX

Below is a practical implementation to build interactive dashboards and gain insights into sales and inventory data in Power BI using DAX.

1. Setting Up Key Measures

Total Sales

Create a measure for total sales revenue:

Total Sales = SUM('Sales'[SalesAmount])

Total Units Sold

Create a measure for the total units sold:

Total Units Sold = SUM('Sales'[Quantity])

Always-on-Time Delivery Rate

Calculate the rate of on-time deliveries:

On-Time Delivery Rate = 
DIVIDE(
    COUNTROWS(FILTER('Sales', 'Sales'[DeliveryDate] <= 'Sales'[ExpectedDate])),
    COUNTROWS('Sales')
)

2. Dynamic Time-Based Metrics

Year-to-Date (YTD) Sales

YTD Sales = 
CALCULATE(
    [Total Sales],
    DATESYTD('Date'[Date])
)

Monthly Sales

Monthly Sales = 
CALCULATE(
    [Total Sales],
    DATESMTD('Date'[Date])
)

Sales by Month

Create a measure to visualize sales by month.

Sales by Month = 
SUMMARIZE(
    'Sales',
    'Date'[MonthName], 
    "SalesAmount", [Total Sales]
)

3. Inventory Metrics

Total Inventory Value

Total Inventory Value = 
SUMX(
    'Inventory',
    'Inventory'[Quantity] * 'Inventory'[UnitPrice]
)

Days of Inventory Remaining

Estimate the days of inventory remaining based on the average sales:

Days of Inventory Remaining = 
DIVIDE(
    [Total Inventory Value],
    [Total Sales] / DISTINCTCOUNT('Sales'[Date])
)

4. Conditional Formatting and KPI Indicators

Sales Growth Rate

Calculate the sales growth rate compared to the previous period:

Sales Growth Rate = 
DIVIDE(
    [Total Sales] - CALCULATE([Total Sales], PREVIOUSMONTH('Date'[Date])),
    CALCULATE([Total Sales], PREVIOUSMONTH('Date'[Date]))
)

5. Interactive Filters and Slicers

Top 10 Products by Sales

Create a dynamic table for the top 10 products by sales:

Top 10 Products = 
TOPN(
    10, 
    ADDCOLUMNS(
        'Products',
        "TotalSales", [Total Sales]
    ),
    [TotalSales], 
    DESC
)

6. Insights Dashboard

  1. Sales Overview:

    • Use a line chart to visualize YTD Sales and Monthly Sales.
    • Add slicers for date range and product categories.
  2. Key Metrics:

    • Create cards for Total Sales, Total Units Sold, On-Time Delivery Rate, Total Inventory Value, and Sales Growth Rate.
  3. Sales Performance:

    • Use a bar chart to display Sales by Month.
    • Use conditional formatting to highlight Sales Growth Rate with green (positive) and red (negative).
  4. Product Analysis:

    • A table or matrix visual for the Top 10 Products by sales, including columns for Product Name, Total Sales, and Quantity Sold.
  5. Inventory Insights:

    • Use a gauge or KPI visual for Days of Inventory Remaining.

Adjust Interactions

Within Power BI, adjust the interactions between visuals to ensure that selections in slicers, and elements in charts propagate through all visuals in the report accordingly. Use the "Edit Interactions" feature to manage these dependencies.

The above DAX measures and implementation steps allow for dynamic, sliceable, and filterable insights within your interactive Power BI dashboard, without redundantly covering steps from data modeling and advanced DAX calculations handled in earlier parts of your project.

Certainly! Let's add a parameter in Power BI using DAX that allows switching between Year-to-Date (YTD) and the current month for each metric.

Step-by-Step Implementation

1. Add a Parameter to Switch Between YTD and Current Month

  1. In Power BI, go to the Modeling tab.
  2. Click on New Parameter and create a parameter called Date Filter Type.
Parameter: Date Filter Type
Values: 
- "YTD"
- "Current Month"

2. Create Measures in DAX

Now you need to create measures that will use the 'Date Filter Type' parameter to switch calculations between YTD and the current month.

Example Measure for Sales
  1. Create a base measure for Sales:
Sales Amount = SUM(Sales[Amount])
  1. Create a measure for YTD Sales:
YTD Sales Amount = CALCULATE([Sales Amount], DATESYTD(Calendar[Date]))
  1. Create a measure for Current Month Sales:
Current Month Sales Amount = CALCULATE([Sales Amount], 
    FILTER(
        ALL(Calendar),
        Calendar[Year] = YEAR(TODAY()) &&
        Calendar[Month] = MONTH(TODAY())
    )
)
  1. Create a switch measure that will toggle between YTD and Current Month based on the parameter:
Selected Period Sales Amount = SWITCH(
    SELECTEDVALUE('Date Filter Type'[Date Filter Type]),
    "YTD", [YTD Sales Amount],
    "Current Month", [Current Month Sales Amount],
    [Sales Amount]  -- Default case (if nothing is selected)
)

Final Steps

  1. Add the Date Filter Type parameter to your report so users can select between "YTD" and "Current Month."
  2. Replace existing metrics in your visuals with the new Selected Period Sales Amount measure.

By following these steps, you will be able to dynamically switch between YTD and the current month for each metric in your Power BI report.