DAX问题:如何获取对应ID的Lead_Weight总和作为计算分母?
解决DAX中按ID计算权重占比的问题
你之前用SUMMARIZE报错,是因为这个函数返回的是表对象(多列结构),而DIVIDE的两个参数都需要是标量值(单个数字),类型不匹配导致报错。直接用上下文控制函数就能解决,不需要创建虚拟表。
方法一:用ALLEXCEPT简化写法
创建新度量值,替换其中的Leads为你的实际表名,ID为你的唯一ID列名:
Lead_Weight_Ratio = DIVIDE( [Lead_Weight], CALCULATE( SUM([Lead_Weight]), ALLEXCEPT(Leads, Leads[ID]) ) )
ALLEXCEPT(Leads, Leads[ID]):保留当前行的ID筛选上下文,移除其他所有筛选条件,确保计算的是当前ID对应的所有Lead_Weight总和。DIVIDE自动处理除零场景,避免报错。
方法二:用VAR+FILTER(更直观,适合新手理解)
如果想更清楚看到逻辑,用变量定义当前ID和对应总和:
Lead_Weight_Ratio = VAR Current_ID = MAX(Leads[ID]) // 获取当前行的ID值 VAR Total_Weight_For_ID = CALCULATE( SUM([Lead_Weight]), FILTER( ALL(Leads), // 忽略当前行的其他筛选条件 Leads[ID] = Current_ID // 筛选出和当前行ID相同的所有行 ) ) RETURN DIVIDE([Lead_Weight], Total_Weight_For_ID)
两种方法都能实现“每行[Lead_Weight]除以对应ID的总和”的需求,选你觉得容易理解的就行。
内容的提问来源于stack exchange,提问作者Brad
相关产品推荐
相关产品推荐

