在DAX中为全年后续月份分配相同的对角线值
填充DAX矩阵上三角区域的实现方案
需求说明
数据集包含Year、MonthNumber、Customerid、Deposit_Year、Deposit_Month字段,需构建矩阵:
- 行维度:
Deposit_Year+Deposit_Month - 列维度:
Year+MonthNumber
要求填充矩阵上对角线区域——将对应存款年月(行)的唯一客户数,分配给同一年份的所有后续月份(列)。
现有基础度量值
已实现计算对角线(行存款年月=列年月)的唯一客户数:
Count Distinct Customer First Month of Year = VAR selected_year= SELECTEDVALUE(table1[Year]) VAR selected_month=SELECTEDVALUE(table1[MonthNumber]) RETURN CALCULATE( DISTINCTCOUNT(table1[CustomerID]), FILTER(table1, table1[Deposit_Year]=selected_year && table1[Deposit_Month]=selected_month) )
上三角填充的改进度量值
修改度量值逻辑,实现将对角线值映射到同一年份的后续月份:
Count Distinct Customer Upper Triangle = VAR current_deposit_year = SELECTEDVALUE(table1[Deposit_Year]) VAR current_deposit_month = SELECTEDVALUE(table1[Deposit_Month]) VAR current_col_year = SELECTEDVALUE(table1[Year]) VAR current_col_month = SELECTEDVALUE(table1[MonthNumber]) RETURN IF( // 判断是否属于上三角区域:列年份=行存款年份,且列月份≥行存款月份 current_col_year = current_deposit_year && current_col_month >= current_deposit_month, // 清除列维度的筛选干扰,确保取到对应存款年月的唯一客户数 CALCULATE( DISTINCTCOUNT(table1[CustomerID]), ALL(table1[Year], table1[MonthNumber]), table1[Deposit_Year] = current_deposit_year, table1[Deposit_Month] = current_deposit_month ), BLANK() // 非上三角区域返回空白 )
逻辑说明
- 捕获当前行上下文的
Deposit_Year、Deposit_Month,以及列上下文的Year、MonthNumber - 通过条件判断锁定上三角区域范围
- 使用
ALL(table1[Year], table1[MonthNumber])清除列维度的筛选干扰,保证取到对应存款年月的准确客户计数 - 非上三角区域返回空白,仅保留目标区域的数据
内容的提问来源于stack exchange,提问作者Veli K
相关产品推荐
相关产品推荐

