Find rows relative to current row's value in excel (DAX)

后端 未结 3 930
不思量自难忘°
不思量自难忘° 2021-01-22 08:51

Is there a way to filter rows based on your current row\'s value using DAX (I\'m using power pivot) ?

In other words, If I had a table \"progress\" with \'ID\' that is i

相关标签:
3条回答
  • 2021-01-22 09:12

    JShmay,

    the solution could be much simpler if you use combination of SUMX function and EARLIER.

    Simply add a new calculated column with this formula:

    =SUMX (
        FILTER ( Progress, EARLIER ( [ID] ) = [ID] + 1 ),
        Progress[PERCENTAGE]
    )
    

    EARLIER returns the current row, so if you compare it with the previous one, it can then return the correct value. This approach might not be very intuitive, but it's much more efficient and could save you lot of time.

    The output should then look like this:

    enter image description here

    Try playing around to achieve the desired result, but I believe this is the simplest and most efficient approach (as far as processing time goes).

    Hope this helps.

    UPDATE: Read this article about using EARLIER in DAX queries. It might be helpful.

    0 讨论(0)
  • 2021-01-22 09:12

    The answer is yes. However, I'd need to see an exact sample of what you have. It sounds like you've got two columns of data and want a third that gives you some sort of answer based upon the interaction with the first two. Based upon what you're describing, a pivot table seems unnecessary so I wouldn't waste your time with one.

    0 讨论(0)
  • 2021-01-22 09:24

    An alternative to Petr's elegant solution is to approach this using a measure.

    Which is best in this case will depend on the specifics of your model, the size of your table, how often you will use this calculation and how many times you will want to replicate it (i.e. if you wanted to add 10 calc columns, that would be a bad idea).

    I like the measure approach because it uses a very re-usable pattern:

    =
    SUMX (
        VALUES ( Progress[ID] ),
        CALCULATE (
            SUM ( Progress[PERCENTAGE] ),
            FILTER (
                ALL ( Progress ),
                Progress[ID]
                    = MAX ( Progress[ID] ) - 1
            )
        )
    )
    

    Be careful of totals using this method - turning them off is probably the 'right' thing to do.

    Formula prettified using Dax Formatter

    0 讨论(0)
提交回复
热议问题