如何在Power BI中用DAX基于两列动态计算价格中位数?
在Power BI中用DAX实现按数量重复价格后的中位数计算
假设你的数据源表名为SalesTable(请根据实际表名替换),可以通过以下DAX度量值完成需求:
Weighted Median = VAR ExpandedTable = GENERATE( SalesTable, SELECTCOLUMNS( SEQUENCE([数量]), "ExpandedPrice", [价格] ) ) RETURN MEDIANX(ExpandedTable, [ExpandedPrice])
代码说明
- 构建展开表:用
GENERATE遍历原表每一行,结合SEQUENCE([数量])生成对应数量的序列(比如数量为2时生成两个元素的序列),再通过SELECTCOLUMNS把序列元素替换为当前行的价格,得到价格按数量重复后的完整数据集。 - 计算中位数:用
MEDIANX遍历展开后的数据集,直接计算价格列的中位数。
兼容旧版本Power BI(无SEQUENCE函数)
如果你的Power BI版本不支持SEQUENCE函数,可提前创建一个包含连续整数的Numbers表(数值范围覆盖原表中最大的数量值),修改代码如下:
Weighted Median = VAR ExpandedTable = GENERATE( SalesTable, SELECTCOLUMNS( FILTER(Numbers, Numbers[Number] <= [数量]), "ExpandedPrice", [价格] ) ) RETURN MEDIANX(ExpandedTable, [ExpandedPrice])
结果验证
针对你提供的示例数据,展开后的价格数组为[12, 10, 10, 5, 5, 5, 7],排序后为[5, 5, 5, 7, 10, 10, 12],中位数为第4个元素7,上述度量值会正确返回该结果。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

