如何编写DAX查询指定日期间隔内的所有发票及对应总数量
前置场景假设
- 我们默认两张多对多关联的表为
Invoice(发票主表,存储发票唯一标识、开票日期等维度信息)、InvoiceItem(发票行项表,存储每笔商品/服务的数量信息),两张表通过InvoiceID字段建立多对多关联 - 你可根据自己的实际表名、字段名替换对应内容
方案1:生成查询结果表(返回完整的发票+总数量数据集)
直接执行以下DAX语句即可:
日期范围发票总数量查询 = // 自定义日期间隔,可根据需求调整 VAR StartDate = DATE(2024, 1, 1) VAR EndDate = DATE(2024, 6, 30) RETURN ADDCOLUMNS( // 筛选日期间隔内的所有发票 FILTER( Invoice, Invoice[InvoiceDate] >= StartDate && Invoice[InvoiceDate] <= EndDate ), // 计算对应发票的总数量,显式处理多对多关系筛选 "总数量", CALCULATE( SUM(InvoiceItem[Quantity]), CROSSFILTER(Invoice[InvoiceID], InvoiceItem[InvoiceID], BOTH) ) )
方案2:可视化度量值(适配Power BI表格/矩阵组件,可响应切片器动态筛选)
如果不需要生成静态计算表,仅需要在可视化组件中给每一行发票展示对应总数量,直接创建以下度量值:
发票总数量 = CALCULATE( SUM(InvoiceItem[Quantity]), CROSSFILTER(Invoice[InvoiceID], InvoiceItem[InvoiceID], BOTH) )
在表格组件中拖入发票的所有需要展示的字段、再拖入该度量值,同时绑定日期切片器,即可动态查询任意日期间隔的发票及对应总数量。
注意事项
- 如果你的多对多关系是通过中间桥接表实现的,只需要将
CROSSFILTER的两个关联字段替换为对应表和桥接表的关联字段即可 - 必须显式指定
CROSSFILTER的筛选方向为双向,避免多对多关系默认单向筛选导致的计算结果错误
内容的提问来源于stack exchange,提问作者NguyenKhoi
相关产品推荐
相关产品推荐

