根据两组中位数计算比率

时间:2018-10-09 15:43:24

标签: tableau

我正在尝试计算女性工资中位数与男性工资中位数的比率(工资字段称为Bscmpnstntotal)。我想我需要类似以下内容的东西,但是它会产生语法错误:

=IF (ATTR([Gender]="female") THEN WINDOW_MEDIAN([Bscmpnstntotal]) ELSE 0 END / IF (ATTR([Gender]="male") THEN WINDOW_MEDIAN([Bscmpnstntotal]) ELSE 0 END

1 个答案:

答案 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的字段:

[女性中位数] / [男性中位数]