如何在Power BI中按年月拆分并展示缺失付款记录?
在Power BI中实现各年月缺失付款情况的展示
可以通过Power Query或DAX两种方式实现,具体操作如下:
方法一:使用Power Query构建缺失付款数据集
步骤:
- 整理客户基础数据:加载
Client Table,保留[Client Id]和[Client Name]字段,移除重复项,确保每个客户仅保留一条记录。 - 生成唯一年月列表:加载
Date Table,添加自定义列提取年月值,公式为:
将该列命名为= Date.Year([Date]) * 100 + Date.Month([Date])YearMonth,随后移除重复的YearMonth值,得到所有需统计的年月维度。 - 创建客户-年月全组合:将客户表与年月列表进行交叉合并(Power Query编辑器中选择两张表,点击「合并查询」→「交叉合并」),生成所有客户在每个年月的完整组合。
- 关联付款数据:为
Payment Table添加相同规则的YearMonth列,再将其与上述交叉表合并,匹配条件设为[Client Id]和YearMonth。 - 筛选缺失付款记录:添加自定义列标记付款状态:
筛选出标记为「缺失」的行,或直接保留= if [Payment Id] is null then "缺失" else "已付款"Payment Id为空的记录,整理后加载到数据模型即可用于可视化。
方法二:使用DAX计算缺失付款
方式1:创建计算表生成缺失记录
- 生成客户-年月全组合表:新建计算表,输入DAX公式:
再添加计算列关联客户名称:客户年月全组合 = CROSSJOIN( VALUES('Client Table'[Client Id]), VALUES('Date Table'[YearMonth]) -- 需先为Date Table添加YearMonth列:YearMonth = YEAR('Date Table'[Date])*100 + MONTH('Date Table'[Date]) )Client Name = RELATED('Client Table'[Client Name]) - 标记付款状态:在计算表中添加计算列:
付款状态 = VAR CurrentClient = [Client Id] VAR CurrentYM = [YearMonth] VAR HasPayment = CALCULATE( COUNTROWS('Payment Table'), 'Payment Table'[Client ID] = CurrentClient, YEAR('Payment Table'[Payment Date])*100 + MONTH('Payment Table'[Payment Date]) = CurrentYM ) RETURN IF(HasPayment = 0, "缺失", "已付款") - 提取缺失记录:可直接创建仅包含缺失付款的计算表:
缺失付款记录 = FILTER( '客户年月全组合', [付款状态] = "缺失" )
方式2:用度量值在报表中直接展示
若无需单独数据集,可创建度量值在矩阵等可视化中直接显示缺失情况:
缺失付款标记 = VAR CurrentYM = SELECTEDVALUE('Date Table'[YearMonth]) VAR CurrentClient = SELECTEDVALUE('Client Table'[Client Id]) VAR HasPayment = CALCULATE( COUNTROWS('Payment Table'), 'Payment Table'[Client ID] = CurrentClient, YEAR('Payment Table'[Payment Date])*100 + MONTH('Payment Table'[Payment Date]) = CurrentYM ) RETURN IF(HasPayment = 0, "缺失", BLANK())
使用矩阵可视化时,行放客户名称、列放年月、值放该度量值,即可直观看到各年月的缺失付款客户。
注意事项
- 确保
Date Table的日期范围覆盖所有需统计的付款周期,若存在早于现有付款日期的应统计周期,需手动调整Date Table的生成范围。 - 提前建立表间关系:
Client Table与Payment Table通过[Client Id]建立一对多关系,Date Table与Payment Table通过[Payment Date]建立关系。
内容的提问来源于stack exchange,提问作者New2Programming
相关产品推荐
相关产品推荐

