Daily DAX : Day 284 LASTNONBLANKVALUE

 The **LASTNONBLANKVALUE** function in Power BI DAX (Data Analysis Expressions) is used to retrieve the last non-blank value in a column, based on a specified sort order defined by another column or expression. It’s particularly useful for scenarios where you need to find the most recent non-empty value in a dataset, such as the last recorded sale, inventory level, or status update.


### Syntax

```

LASTNONBLANKVALUE(<column>, <expression>)

```


- **<column>**: The column that defines the sort order (e.g., a date or time column).

- **<expression>**: The expression or column whose last non-blank value you want to retrieve.


### How It Works

1. The function evaluates the `<column>` to determine the order (ascending or descending).

2. It then looks at the `<expression>` and returns the last value that is not blank, based on the sort order of `<column>`.


### Key Points

- **Non-blank**: The function ignores blank or null values in the `<expression>` column.

- **Sort order**: The `<column>` is typically a date, timestamp, or numeric column that defines the sequence.

- **Context**: The function respects the filter context in your Power BI model, so it only considers rows that are active in the current context.

- **Return value**: It returns a single value (not a table).


### Use Case

**Scenario**: You have a sales dataset with dates and sales amounts, but some dates have no sales (blank values). You want to find the most recent sales amount for a given product or category.


**Example**:

Suppose you have the following table `SalesData`:


| Date       | Product | SalesAmount |

|------------|---------|-------------|

| 2025-01-01 | A       | 100         |

| 2025-01-02 | A       |             |

| 2025-01-03 | A       | 150         |

| 2025-01-04 | A       |             |


You want to find the last non-blank `SalesAmount` for Product A.


**DAX Formula**:

```dax

LastSale = LASTNONBLANKVALUE(SalesData[Date], SalesData[SalesAmount])

```


**Result**: 

- The function sorts by `SalesData[Date]` in ascending order.

- It evaluates `SalesData[SalesAmount]` and finds the last non-blank value, which is `150` (corresponding to 2025-01-03).


### Practical Applications

1. **Inventory Management**: Retrieve the last recorded stock level for a product based on the most recent date.

2. **Sales Tracking**: Find the most recent sales amount or transaction for a customer or region.

3. **Status Updates**: Get the latest non-blank status (e.g., "Active" or "Inactive") for a project or account.

4. **Financial Reporting**: Determine the last recorded balance or metric for a given period.


### Example in a Measure

To create a measure that calculates the last non-blank sales amount for a specific product in a filtered context:


```dax

LastNonBlankSales = 

CALCULATE(

    LASTNONBLANKVALUE(SalesData[Date], SalesData[SalesAmount]),

    SalesData[Product] = "A"

)

```


This measure returns the last non-blank `SalesAmount` for Product A, respecting any additional filters (e.g., a specific year or region) applied in the report.


### Notes

- **Performance**: For large datasets, ensure the sort column (e.g., Date) is optimized (e.g., indexed or properly modeled) to avoid performance issues.

- **Alternative**: If you need the last non-blank value in a more complex scenario, you might combine `LASTNONBLANKVALUE` with `CALCULATE` or use `FILTER` to refine the context.

- **Comparison to LASTNONBLANK**: The older `LASTNONBLANK` function is similar but works with a single column and doesn’t allow a separate sort order column, making `LASTNONBLANKVALUE` more flexible.


### Limitations

- It returns only one value, so it’s not suitable for retrieving multiple rows or complex aggregations.

- The sort order is always ascending based on the `<column>`; for descending order, you may need to manipulate the data or use other DAX patterns.


This function is a powerful tool for time-based or sequential analysis in Power BI, especially when dealing with sparse or incomplete data.

Comments

Popular posts from this blog

Daily DAX : Day 65 INFO.TABLEPERMISSIONS

Daily DAX : Day 55 PV