Я пытаюсь получить среднее значение нижней трети данных, в которых заработная плата отсортирована по возрастанию заработной платы.Я попытался просто вернуть TOPN, используя фильтр, чтобы не включать значения заработной платы BLANK ().Затем мне нужно просто выбрать столбец, который меня интересует, в расчете СРЕДНЕГО.Поэтому я написал что-то вроде следующего, где [withSalaryJobCount] - это вычисляемая мера, представляющая собой только количество строк, у которых есть не BLANK столбец yearSalary:
entryWages:= AVERAGE(
SELECTCOLUMNS(
CALCULATE(
TOPN(
[withSalaryJobCount]- [withSalaryJobCount]/3,
'table',
'table'[salaryAnnual],
ASC
),
FILTER(table, [salaryAnnual] <> BLANK())
),[entryWages]
"bottomThird",
[salaryAnnual]
)
)
Это ошибка с ошибкой:
The AVERAGE function only accepts a column reference as an argument
Оригинальный вопрос: У меня есть набор SQL-вычислений, которые дают мне процентильную заработную плату, а также то, что мы называем заработной платой на начальном и среднем уровнях.Список заработной платы заносится в таблицу, отсортированная по значению в столбце IDENTITY.Упрощенный запрос для вставки и расчета процентиля, вступления и опытной заработной платы приведен ниже:
CREATE TABLE #t1 (
id int identity,
salaryannual decimal(18,2)
)
INSERT INTO #t1
SELECT salaryannual
FROM table a
ORDER BY salaryannual
SELECT
(SELECT AVG(CAST(salaryannual AS BIGINT)) FROM #t1 WHERE ID>=minID AND ID<=minID+(ct/3)) entryLevelSalary,
(SELECT AVG(CAST(salaryannual AS BIGINT)) FROM #t1 WHERE ID>=maxID-(ct/3) AND ID<=maxID) experiencedSalary,
(select AVG(CAST(salaryannual AS BIGINT)) from #t1 where ID = minID + (ct/2+1)/2 or ID = minID + (ct/2+1)/2 + (ct/2+1)%2) q1,
(select AVG(CAST(salaryannual AS BIGINT)) from #t1 where ID = minID + (ct+1)/2 or ID = minID + (ct+1)/2 + (ct+1)%2 ) median,
(select AVG(CAST(salaryannual AS BIGINT)) from #t1 where ID = minID + ct+1 - ((ct/2+1)/2 + (ct/2+1)%2) or ID = minID + ct+1 -((ct/2+1)/2) ) q3,
(SELECT AVG(CAST(salaryannual AS BIGINT)) FROM #t1 WHERE ID>=minID AND ID<=maxID) avgSal
FROM
(
SELECT COUNT(*) ct, MIN(ID) minID, MAX(ID) maxID
FROM #t1
) uniqueIDs
Преобразование расчета процентиля имеет вид:
pct25Wages:= Calculate(PERCENTILE.INC('table'[salaryAnnual], .25), FILTER([withSalaryCount] > 6))
ФИЛЬТРиспользуется потому, что у нас есть минимальное требование, чтобы было как минимум 7 записей с зарплатой в будущем.
Мой вопрос: как преобразовать запись / опыт в запрос DAX / мера?
(SELECT AVG(CAST(salaryannual AS BIGINT)) FROM #t1 WHERE ID>=minID AND ID<=minID+(ct/3)) entryLevelSalary,
(SELECT AVG(CAST(salaryannual AS BIGINT)) FROM #t1 WHERE ID>=maxID-(ct/3) AND ID<=maxID) experiencedSalary,
Я пытался использовать расчет заработной платы STDDEV и AVG, как показано ниже, но он не дает ожидаемых результатов, и, глядя на него, я вижу, что он все равно не будет работать так, как я ожидал:
entryWages:= [avgWages] + 3 * [StdDevWage]