You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI统计2020年已开收据数的度量值返回空白如何解决

Power BI DAX统计2020年收据总量问题排查与修正

问题现象

  • 需求:创建Power BI度量值统计2020年已开具收据的总数量,预期返回正确结果440000
  • 第一版DAX表达式始终返回空白,将其改为计算列后问题依旧存在,代码如下:
CALCULATE(SUM(Receipts[issued]), FILTER(Receipts, Receipts[Year] = 2020))
  • 调整后的第二版DAX表达式直接返回Year相关语法错误,无法正常运行,代码如下:
CALCULATE(SUM(Receipts[issued]), FILTER(Receipts, Receipts[Year].Year = 2020))
  • 环境前提:Receipts表中Year列的数据类型为日期类型,该表已通过日期字段与dimDate日期维度表建立模型关联。

问题根因

  • 第一版表达式返回空白:Receipts[Year]是日期类型,存储的是具体日期值(如2020/1/1、2020/12/31),直接和整数2020做相等判断永远无法匹配到行,因此聚合结果为空。
  • 第二版表达式报语法错误:DAX不支持类似面向对象语言的.Year属性写法直接取日期年份,必须通过DAX内置时间函数提取日期分量。
  • 写法不规范:已建立与日期维度表的模型关系时,直接在事实表上添加全表筛选属于低效写法,可能受关系筛选方向影响出现统计偏差,优先利用维度表做筛选更符合星型建模规范。

修正方案

按照性能和规范性从优到劣,可选择以下任意一种写法:

  1. 基于日期维度表筛选(推荐,性能最优)
    该写法利用已建立的模型关系自动传递筛选,不需要逐行扫描事实表:
    2020年已开收据总量 = 
    CALCULATE(
        SUM(Receipts[issued]),
        dimDate[Year] = 2020
    )
    

    注意:需确保dimDate维度表中存在整数类型的Year列,直接存储2020、2021这类四位年份值,这也是标准日期维度表的必备字段。

  2. 基于事实表日期列用YEAR函数筛选
    如果不使用日期维度表,可通过DAX内置YEAR()函数提取日期的年份值做匹配:
    2020年已开收据总量 = 
    CALCULATE(
        SUM(Receipts[issued]),
        FILTER(
            Receipts,
            YEAR(Receipts[Year]) = 2020
        )
    )
    
  3. 简化筛选写法
    简单等值筛选场景下可省略FILTER函数,直接将筛选条件传入CALCULATE,引擎会自动做查询优化:
    2020年已开收据总量 = 
    CALCULATE(
        SUM(Receipts[issued]),
        YEAR(Receipts[Year]) = 2020
    )
    

内容的提问来源于stack exchange,提问作者Sweepster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:03:28