Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

Dynamic quartile calculations using measures

Refer the below dataset, I need to calculate or categorize the value field below in to quartiles. I have a Category slicer in the report , which is a multiselect slicer and when i select a category, the quartile calculation should recalculate.

 

CategoryGenderIDValue
AM148
AF229
AM339
AM412
AM512
AF639
BF725
BF824
BM921
BM1014
BF1139
CM1213
CM1346
CM1437
CM1534
CF1647
CF1714
CM1817
CM1927
CM2014

Just to updatethe question, 

am using a measure like below

Quartile_Num =

VAR Weights = SUMMARIZE ( ALLSELECTED(TESTDATA), TESTDATA[ID], "Metric",Sum([Value])

VAR UQ1 =PERCENTILEX.INC(Weights, [Metric], 0.25)
VAR UQ2 = PERCENTILEX.INC(Weights, [Metric], 0.50)
VAR UQ3 = PERCENTILEX.INC(Weights, [Metric], 0.75)

VAR CurrW = CALCULATE(Sum([Value])

RETURN
SWITCH (
TRUE (),
CurrW <= UQ1, "Q1",
CurrW > UQ1 && CurrW <= UQ2, "Q2",
CurrW > UQ2 && CurrW <= UQ3, "Q3",
"Q4"
)
 
along with this, am using a disconnected table for Quartile labels.
the issue i have is when i was calculating count for each gender, the percentile calculation is getting recalculated based on that filter and i dont want that. i have only one slicer in my report, that is for category. i want only that filter to affect the percentile calculation.
 
Current Result

Expected Result as per excel



  • Anonymous's avatar
    Anonymous
    4 years ago

    I was able to resolve the issue by using below measure.

     

    Count of employees =
    var _p1=CALCULATE(PERCENTILE.INC(TESTDATA[Value],0.25),ALLEXCEPT(TESTDATA,TESTDATA[Value],TESTDATA[Category]))
    var _p2=CALCULATE(PERCENTILE.INC(TESTDATA[Value],0.5),ALLEXCEPT(TESTDATA,TESTDATA[Value],TESTDATA[Category]))
    var _p3=CALCULATE(PERCENTILE.INC(TESTDATA[Value],0.75),ALLEXCEPT(TESTDATA,TESTDATA[Value],TESTDATA[Category]))
    var _p4=CALCULATE(PERCENTILE.INC(TESTDATA[Value],1),ALLEXCEPT(TESTDATA,TESTDATA[Value],TESTDATA[Category]))
    return SWITCH(SELECTEDVALUE(QuartileLabel[Label]),
    "Q1",CALCULATE(DISTINCTCOUNT(TESTDATA[ID]),FILTER(TESTDATA,TESTDATA[Value]<=_p1)),
    "Q2",CALCULATE(DISTINCTCOUNT(TESTDATA[ID]),FILTER(TESTDATA,TESTDATA[Value]>_p1 && TESTDATA[Value]<=_p2)),
    "Q3",CALCULATE(DISTINCTCOUNT(TESTDATA[ID]),FILTER(TESTDATA,TESTDATA[Value]>_p2&& TESTDATA[Value]<=_p3)),
    "Q4",CALCULATE(DISTINCTCOUNT(TESTDATA[ID]),FILTER(TESTDATA,TESTDATA[Value]>_p3&& TESTDATA[Value]<=_p4)))
     
     

5 Replies

    • Anonymous's avatar
      Anonymous
      Not applicable
      CategoryGenderIDValue
      AM148
      AF229
      AM339
      AM412
      AM512
      AF639
      BF725
      BF824
      BM921
      BM1014
      BF1139
      CM1213
      CM1346
      CM1437
      CM1534
      CF1647
      CF1714
      CM1817
      CM1927
      CM2014

      Just to update you, i have gone through the links that you posted but its not getting what i wanted.

      am using a measure like below

      Quartile_Num =

      VAR Weights = SUMMARIZE ( ALLSELECTED(TESTDATA), TESTDATA[ID], "Metric",Sum([Value])

      VAR UQ1 =PERCENTILEX.INC(Weights, [Metric], 0.25)
      VAR UQ2 = PERCENTILEX.INC(Weights, [Metric], 0.50)
      VAR UQ3 = PERCENTILEX.INC(Weights, [Metric], 0.75)

      VAR CurrW = CALCULATE(Sum([Value])

      RETURN
      SWITCH (
      TRUE (),
      CurrW <= UQ1, "Q1",
      CurrW > UQ1 && CurrW <= UQ2, "Q2",
      CurrW > UQ2 && CurrW <= UQ3, "Q3",
      "Q4"
      )
       
      along with this, am using a disconnected table for Quartile labels.
      the issue i have is when i was calculating count for each gender, the percentile calculation is getting recalculated based on that filter and i dont want that. i have only one slicer in my report, that is for category. i want only that filter to affect the percentile calculation
  • Anonymous's avatar
    Anonymous
    Not applicable

    Hi Anonymous,

    AFAIK, you can use measure expression to interact with filter selection and return category tags based on current value, but measures cannot be used on axis or legend fields. (current they only support columns)
    For this scenario, I'd like to suggest you use table visuals instead to show the record with measure expression results of categories.

    BTW, calculated column/table formulas are not able to dynamically change based on slicer/filters. (they are working on different data levels and you can't use child level to affect its parent)

    Notice: the data level of power bi.

    Database(external) -> query table(query, custom function, query parameters) -> data model table(table, calculate column/table) -> data view with virtual tables(measure, visual, filter, slicer)

    Regards,

    Xiaoxin Sheng

  • Anonymous's avatar
    Anonymous
    Not applicable

    I was able to resolve the issue by using below measure.

     

    Count of employees =
    var _p1=CALCULATE(PERCENTILE.INC(TESTDATA[Value],0.25),ALLEXCEPT(TESTDATA,TESTDATA[Value],TESTDATA[Category]))
    var _p2=CALCULATE(PERCENTILE.INC(TESTDATA[Value],0.5),ALLEXCEPT(TESTDATA,TESTDATA[Value],TESTDATA[Category]))
    var _p3=CALCULATE(PERCENTILE.INC(TESTDATA[Value],0.75),ALLEXCEPT(TESTDATA,TESTDATA[Value],TESTDATA[Category]))
    var _p4=CALCULATE(PERCENTILE.INC(TESTDATA[Value],1),ALLEXCEPT(TESTDATA,TESTDATA[Value],TESTDATA[Category]))
    return SWITCH(SELECTEDVALUE(QuartileLabel[Label]),
    "Q1",CALCULATE(DISTINCTCOUNT(TESTDATA[ID]),FILTER(TESTDATA,TESTDATA[Value]<=_p1)),
    "Q2",CALCULATE(DISTINCTCOUNT(TESTDATA[ID]),FILTER(TESTDATA,TESTDATA[Value]>_p1 && TESTDATA[Value]<=_p2)),
    "Q3",CALCULATE(DISTINCTCOUNT(TESTDATA[ID]),FILTER(TESTDATA,TESTDATA[Value]>_p2&& TESTDATA[Value]<=_p3)),
    "Q4",CALCULATE(DISTINCTCOUNT(TESTDATA[ID]),FILTER(TESTDATA,TESTDATA[Value]>_p3&& TESTDATA[Value]<=_p4)))