Forum Discussion

Taher28's avatar
Taher28
Frequent Visitor
7 months ago
Solved

Power BI – Card “Opening” Count Works but Table Rows Do Not Show (Backlog Logic)

Power BI – Card “Opening” Count Works but Table Rows Do Not Show (Backlog Logic) Scenario / Requirement I have a report with multiple status cards (Opening, New, Moved, Drop, Closing). When a user...
  • Jaywant-Thorat's avatar
    7 months ago

    Excellent question, this is a classic DAX context mismatch problem, and your instincts are actually correct. The issue is not your business logic; it’s how row context vs filter context behaves when you try to reuse a backlog-style measure at row level.

    Let’s break it cleanly and then I’ll give you the correct, reliable pattern.

     

    Why the Card Works but the Table Shows No Rows?
    The core reason (this is the key)

    Your Opening Count measure works because:

    • It is evaluated once in a pure filter context
    • ALL ( Created Date ) removes the slicer
    • MIN ( Created Date ) comes from the slicer context
    • CALCULATE builds a virtual filtered set of rows

    Perfect for aggregation (card)

     

    But the table filter fails because:

    SELECTEDVALUE() is the wrong tool here

    In a table:

    • Each row already has a row context
    • But SELECTEDVALUE does NOT read row context
    • It only works when exactly one value exists in filter context

    Result:

    - RowCreatedDate = BLANK

    - RowAgreementDate = BLANK

    - Your IF condition → always FALSE

    - T able returns zero rows

    👉 This is expected DAX behavior, not a bug.

    Important Rule to Remember:

    Row-level filtering must reproduce the same filter logic as the measure — not reinterpret it row by row using SELECTEDVALUE.

    Solution:

    >> Step1: Create a Boolean-style filter measure (NO SELECTEDVALUE)

    ---DAX---

    Is Opening =
    VAR UserStartDate =
    CALCULATE (
    MIN ( 'Consolidated Grants'[Created Date] ),
    ALLSELECTED ( 'Consolidated Grants' )
    )

    VAR SelectedYear =
    YEAR ( UserStartDate )

    VAR ForcedEndDate =
    DATE ( SelectedYear, 12, 31 )

    RETURN
    IF (
    CALCULATE (
    COUNTROWS ( 'Consolidated Grants' ),
    ALL ( 'Consolidated Grants'[Created Date] ),
    'Consolidated Grants'[Created Date] < UserStartDate,
    'Consolidated Grants'[Agreement Signed Date.] >= UserStartDate,
    'Consolidated Grants'[Agreement Signed Date.] <= ForcedEndDate
    ) > 0,
    1,
    0
    )

    ---DAX---

    Why this works

    • The row is filtered naturally

    • No need to read row values manually

    • DAX engine evaluates the row inside the same logic as the card

    >> Step 2: Use it as a Visual-level filter

    ---DAX---

    Is Opening = 1

    ---DAX---

     

    Now:

    • Card count 

    • Table rows 

    • Cross-filtering 

    • Slicers 

    =================================================================
    Did I answer your question? Mark my post as a solution! This will help others on the forum!

    Appreciate your Kudos!!

    Jaywant Thorat | MCT | Data Analytics Coach
    Linkedin: https://www.linkedin.com/in/jaywantthorat/
    Join #MissionPowerBIBharat = https://shorturl.at/5ViW9
    #MissionPowerBIBharat
    LIVE with Jaywant Thorat from 10 Jan 2026
    8 Days | 8 Sessions | 1 hr daily | 100% Free