我正在尝试计算女性工资中位数与男性工资中位数的比率(工资字段称为Bscmpnstntotal)。我想我需要类似以下内容的东西,但是它会产生语法错误:
=IF (ATTR([Gender]="female") THEN WINDOW_MEDIAN([Bscmpnstntotal]) ELSE 0 END / IF (ATTR([Gender]="male") THEN WINDOW_MEDIAN([Bscmpnstntotal]) ELSE 0 END
答案 0 :(得分:2)
您为什么使用WINDOW_MEDIAN?这是一个表calc函数,这意味着它将对汇总查询结果的表进行操作,而不是对数据源中的原始数据行进行操作。您可以可选地提供偏移量,以对表格结果窗口的特定切片进行操作。
例如,WINDOW_MEDIAN(SUM(Profit),-2,0)
这将从当前行到前两行的总利润中位数
由于在IF中返回一个聚合和一个单一值0,所以您会遇到语法错误。如果将其更改为以下内容,则可以避免该语法错误:
function createObject(arr){
let obj = {};
arr.forEach(item => obj[item.id] = item )
return obj;
}
function getArray(obj) {
return Object.values(obj)
}
let mergedArray = getArray({
...createObject(array1),
...createObject(array2)
})
但是不要这样做:
一种更安全的方法是隔离Bscmpnstntotal。原因是您希望仅对女性条目计算中位数,而对于没有男性的女性,则不希望其数字为0。
因此,创建一个像这样的计算字段:
MEDIAN(IF [gender] = 'Male' THEN [Bscmpnstntotal] ELSE 0 END)
对男性也做同样的事情
然后有一个类似calc的字段:
[女性中位数] / [男性中位数]