Forum Discussion

Talal141218's avatar
Talal141218
Helper III
6 months ago
Solved

Averagex issue

Hello Profis, 
 
I am working with a measure called [Durchlauf. in Tagen], which calculates the number of days between different date fields. I attempted to compute an average that includes only values greater than or equal to zero (>= 0).

Furthermore i want to calculate the Average for this Measure ( Durchlauf in Tage) . Unfortunatley i am getting  resulsts don't conrespond with Excel results when i use Averageif. More Screenshots for Avearge in Power BI and in Excel as below: 

 

Thanks in Advance

 
  • Hi Talal141218,
    Thank you for posting your query in the Microsoft Fabric Community Forum.
    I’ve reproduced your scenario in Power BI Desktop using my sample data aligned with your table structure.

    To match Excel AVERAGEIF(>=0), I used the following approach:

    • Base measure: [Durchlauf. in Tagen] (row-level day difference)
    Durchlauf. in Tagen =
    
    VAR PickDate =
    
        SELECTEDVALUE ( Fact_SalesLine[SalesPicklistDate] )
    
    VAR ShipDate =
    
        SELECTEDVALUE ( Fact_SalesLine[SalesLineShippingDateRequested] )
    
    RETURN
    
    IF (
    
        NOT ISBLANK ( PickDate )
    
            && NOT ISBLANK ( ShipDate ),
    
        DATEDIFF ( PickDate, ShipDate, DAY )
    )

     

    • Final measure: Average_Durchlauf_GE_0, which materializes the row-level values and calculates the average only for values ≥ 0 using AVERAGEX
    Average_Durchlauf_GE_0 =
    
    VAR BaseTable =
    
        ADDCOLUMNS (
    
            VALUES ( Fact_SalesLine[SalesLineID] ),
    
            "__Durchlauf", [Durchlauf. in Tagen]
    
        )
    
    RETURN
    
    AVERAGEX (
    
        FILTER ( BaseTable, [__Durchlauf] >= 0 ),
    
        [__Durchlauf]
    )

    For your reference, I’m attaching the .pbix file so you can review the complete implementation.
    Thanks, pcoley & GeraldGEmerick for sharing valuable insights.



    Best regards,
    Ganesh Singamshetty.

8 Replies

  • v-ssriganesh's avatar
    v-ssriganesh
    Community Support

    Hi Talal141218,
    Thank you for posting your query in the Microsoft Fabric Community Forum.
    I’ve reproduced your scenario in Power BI Desktop using my sample data aligned with your table structure.

    To match Excel AVERAGEIF(>=0), I used the following approach:

    • Base measure: [Durchlauf. in Tagen] (row-level day difference)
    Durchlauf. in Tagen =
    
    VAR PickDate =
    
        SELECTEDVALUE ( Fact_SalesLine[SalesPicklistDate] )
    
    VAR ShipDate =
    
        SELECTEDVALUE ( Fact_SalesLine[SalesLineShippingDateRequested] )
    
    RETURN
    
    IF (
    
        NOT ISBLANK ( PickDate )
    
            && NOT ISBLANK ( ShipDate ),
    
        DATEDIFF ( PickDate, ShipDate, DAY )
    )

     

    • Final measure: Average_Durchlauf_GE_0, which materializes the row-level values and calculates the average only for values ≥ 0 using AVERAGEX
    Average_Durchlauf_GE_0 =
    
    VAR BaseTable =
    
        ADDCOLUMNS (
    
            VALUES ( Fact_SalesLine[SalesLineID] ),
    
            "__Durchlauf", [Durchlauf. in Tagen]
    
        )
    
    RETURN
    
    AVERAGEX (
    
        FILTER ( BaseTable, [__Durchlauf] >= 0 ),
    
        [__Durchlauf]
    )

    For your reference, I’m attaching the .pbix file so you can review the complete implementation.
    Thanks, pcoley & GeraldGEmerick for sharing valuable insights.



    Best regards,
    Ganesh Singamshetty.

    • Talal141218's avatar
      Talal141218
      Helper III

      Hi, 

      Thanks for your Support. As you see in the Screenshot. I did't get in your formula the Total of Average. Could you please help me in this topic. Best wishes. 

       

  • Talal141218 One issue I see is that you are using SUMMARIZE in your AVERAGEX function and also adding a column using CALCULATE within the SUMMARIZE. There is an article out there somewhere from SQLBI that says not to do that and instead use ADDCOLUMNS. Not sure if that is your issue but with what you are doing you can get wonky results.

    • Talal141218's avatar
      Talal141218
      Helper III

      GeraldGEmerick  Thanks for your advice, i tried without them and easy Funktions with Average and Filter, but also didn't work. 

  • Talal141218 Please try with this:

    Durchlauf in Tagen =
    VAR T =
        FILTER (
            ADDCOLUMNS (
                Fact_SalesLine,
                "@val", [Durchlauf. in Tagen]
            ),
            [@val] >= 0
        )
    RETURN
        AVERAGEX (
            T[SalesPiklistDate_NK],
            [@val]
        )

    I hope this helps. If so please mark it as a solution. Kudos are welcome!

    • Talal141218's avatar
      Talal141218
      Helper III

      Thanks for your answer, but unfortuntely did't work. I want Average for a Measure "Durch laufzeit in Tagen"

  • Ray_Minds's avatar
    Ray_Minds
    Solution Supplier

     

    Query : 
    Average_Durchlauf_GE_0 =

    VAR BaseTable =

     ADDCOLUMNS (

      VALUES ( Fact_SalesLine[SalesLineID] ),

    "__Durchlauf", [Durchlauf. in Tagen]

      )

    RETURN

      AVERAGEX (

     FILTER ( BaseTable, [__Durchlauf] >= 0 ),

     [__Durchlauf]

     )
    Result :