DAX公式需聚合函数报错,如何实现每平方公里人口计算?
DAX新手问题解答:计算每平方公里就业人口
为什么公式报错?
DAX要求在引用跨表的多行列时必须用聚合函数——如果'Samenvoegen2'[2016]对应多条行记录,DAX无法自动确定要取哪一行的数值,因此强制要求用聚合操作把多值转成单一值。
COUNT函数的效果?
完全不适用。COUNT('Samenvoegen2'[2016])只会统计该列中非空值的数量,和你需要的百分比数值毫无关系,别用这个函数。
能不能不用聚合函数?
只有一种情况可以:当'Samenvoegen2'和'geonames'是一对一关联时(即每个地理区域对应唯一的2016百分比),DAX能自动匹配对应行的数值,这时候可以直接用RELATED函数拉取数据,不用聚合:
Employment per km2 = RELATED('Samenvoegen2'[2016]) * 'geonames'[Population] / 'geonames'[Area(in sq km)]
注意:这个公式要写在geonames表的计算列里,前提是两个表已经正确建立了一对一的关系。
该选哪种聚合函数?
既然你明确2016列是唯一百分比,那用MAX、MIN、LASTNONBLANK这类取单一值的聚合函数都可以——因为唯一值的情况下,这些函数返回的结果就是那个你需要的百分比。比如:
Employment per km2 = CALCULATE(MAX('Samenvoegen2'[2016]) * 'geonames'[Population] / 'geonames'[Area(in sq km)])
或者简化成(如果表关系正确,CALCULATE甚至可以省略):
Employment per km2 = MAX('Samenvoegen2'[2016]) * 'geonames'[Population] / 'geonames'[Area(in sq km)]
需要添加筛选吗?
如果你的数据里没有多余的冗余行(比如同一个地理区域对应多个2016百分比),不需要额外加筛选。如果存在其他无关维度(比如多年份数据),可以在CALCULATE里加筛选条件锁定2016年,但你已经直接引用了2016列,所以暂时不需要。
如何得到每平方公里人口的列表?
- 如果用计算列:在
geonames表创建上面的计算列后,把该列和地理名称列一起放到表格可视化组件中,就能得到每个区域的数值列表。 - 如果用度量值:把
geonames里的地理维度(比如地区名称)拖到可视化的行区域,再把度量值拖到值区域,即可生成列表。
内容的提问来源于stack exchange,提问作者Hksdnwl
相关产品推荐
相关产品推荐

