2015-06-04 3 views
0

У меня есть googled и продолжайте заканчивать слишком медленными формулами. Я подозреваю, что если разбить формулу поэтапно (создание расчетных столбцов), я могу увидеть некоторое увеличение производительности.Расчет PERCENTILE в DAX

У меня есть таблица, содержащая несколько числовых столбцов вместе с некоторыми, которые будут в конечном итоге как slicers. Цель состоит в том, чтобы иметь 10, 25, 50, 75 и 90-й процентиль над некоторыми числовыми столбцами для выбранного слайсера.

Это то, что у меня есть для 10-го Percentile над столбцом «Total Pd».

TotalPaid10thPercentile:=MINX(
           FILTER(
            VALUES(ClaimOutcomes[Total Pd]), 
            CALCULATE(
               COUNTROWS(ClaimOutcomes), 
               ClaimOutcomes[Total Pd] <= EARLIER(ClaimOutcomes[Total Pd]) 
              )> COUNTROWS(ClaimOutcomes)*0.1 
            ), 
           ClaimOutcomes[Total Pd] 
          ) 

Это займет несколько минут, и данные пока не отображаются. У меня около 300K записей в этой таблице.

+0

Предложите, что вы просматриваете информацию на сайте Marco здесь, у нее есть хороший пример процентиля в DAX. http://www.daxpatterns.com/statistical-patterns/#skip-to-complete-pattern –

ответ

1

Я вычислил способ разбить расчет в серии шагов, которые принесли довольно быстрое решение.

Для расчета 10-го процентиля на Amount Paid в таблице Data, я последовал ниже из-оф-книги формулу:

Вычислить порядкового ранг для 10-го процентиля элемента

10ptOrdinalRank:=0.10*(COUNTX('Data', [Amount Paid]) - 1) + 1 

Он может иметь десятичный (дробный) номер, например 112.45

Вычислить десятичную запятую

10ptDecPart:=[10ptOrdinalRank] - TRUNC([10ptOrdinalRank]) 

Вычислить порядковый ранг элемента чуть ниже (пола)

10ptFloorElementRank:=FLOOR([10ptOrdinalRank],1) 

Вычислить порядковый ранг элемента чуть выше (потолок)

10ptCeilingElementRank:=CEILING([10ptOrdinalRank], 1) 

Вычислительный элемент, соответствующий этажу

10ptFloorElement:=MAXX(TOPN([10ptFloorElementRank], 'Data',[Amount Paid],1), [Amount Paid]) 

Вычислительный элемент, соответствующий потолок

10ptCeilingElement:=MAXX(TOPN([10ptCeilingElementRank], 'Data',[Amount Paid],1), [Amount Paid]) 

вычислить значение процентиля

10thPercValue:=[10ptFloorElement] + [10ptDecPart]*([10ptCeilingElement]-[10ptFloorElement]) 

Я обнаружил, производительность заметно быстрее, чем некоторых других решений, которые я нашел в сети , Надеюсь, это поможет кому-то в будущем.

Смежные вопросы