如何使用DAX查询按日期逐行获取Power BI的Order Failure %度量值
解决Power BI中DAX查询按日期返回度量值逐行数据的问题
核心原因
你当前查询返回汇总值,是因为度量值的计算依赖上下文环境。若查询未明确指定按日期列构建行上下文,度量值会默认在全局上下文下计算汇总结果。以下是具体解决方案:
方法1:使用SUMMARIZE按日期分组计算
通过SUMMARIZE函数将日期列作为分组依据,让度量值在每个日期的独立上下文下计算:
EVALUATE SUMMARIZE ( '你的数据表名', -- 替换为实际表名 '你的数据表名'[日期列], -- 替换为实际日期列名 "Order Failure %", [Order Failure %] -- 关联你的度量值 ) ORDER BY '你的数据表名'[日期列] -- 按日期排序结果
SUMMARIZE会自动对日期列去重,按唯一日期分组计算对应度量值,适合按天/周期聚合的场景。
方法2:使用SELECTCOLUMNS+VALUES获取逐行日期数据
如果需要保留所有原始日期行(包括重复日期),可以用VALUES提取所有唯一日期,再通过SELECTCOLUMNS逐行计算度量值:
EVALUATE SELECTCOLUMNS ( VALUES ('你的数据表名'[日期列]), -- 获取所有唯一日期 "日期", '你的数据表名'[日期列], "Order Failure %", [Order Failure %] ) ORDER BY '你的数据表名'[日期列]
检查度量值本身的上下文问题
如果上述方法仍返回汇总值,需排查度量值是否存在强制忽略日期上下文的逻辑。例如:
- 错误示例(用
ALL忽略了日期上下文):
Order Failure % = DIVIDE( CALCULATE(COUNT('表'[失败订单]), ALL('表'[日期列])), CALCULATE(COUNT('表'[总订单]), ALL('表'[日期列])), 0 )
- 修改为保留日期上下文的正确写法:
Order Failure % = DIVIDE( COUNT('表'[失败订单]), COUNT('表'[总订单]), 0 )
若需保留其他筛选上下文(如地区、产品),可使用ALLEXCEPT替代ALL,仅排除指定外的上下文:
Order Failure % = DIVIDE( CALCULATE(COUNT('表'[失败订单]), ALLEXCEPT('表', '表'[日期列])), CALCULATE(COUNT('表'[总订单]), ALLEXCEPT('表', '表'[日期列])), 0 )
内容的提问来源于stack exchange,提问作者Uday S
相关产品推荐
相关产品推荐

