DAX中引用虚拟表列计算百分位数报错,求解决方案
DAX解决:虚拟表列作为PERCENTILE.INC参数报错的问题
问题场景
按日期分组计算交易重量总和后,求这些分组值的第二四分位数(20分位)。使用SUMMARIZE生成包含分组求和结果的虚拟表后,直接将虚拟表的列传入PERCENTILE.INC时触发报错:
Table variable 'tbl_group' cannot be used in current context because a base table is expected.
原代码:
MyPercntile= var tbl_group=SUMMARIZE(site,site[تاريخ],"summm", CALCULATE(sum(site[حجم معامله به تن])) ) var bb=PERCENTILE.INC(tbl_group[summm],0.2) return bb
报错原因
PERCENTILE.INC的第一个参数要求是模型中的物理基础列,或能在当前行上下文直接计算的表达式,无法直接引用变量虚拟表中的计算列——因为虚拟表不属于模型的基础表结构。
两种解决方法
方法1:使用PERCENTILEX.INC(推荐,适配虚拟表场景)
PERCENTILEX.INC是迭代型分位函数,专门支持传入表变量,并能引用表内的计算列:
MyPercntile = VAR tbl_group = SUMMARIZE( site, site[تاريخ], "summm", CALCULATE(SUM(site[حجم معامله به تن])) ) RETURN PERCENTILEX.INC(tbl_group, [summm], 0.2)
- 第一个参数传入虚拟表
tbl_group - 第二个参数指定要计算分位的列(虚拟表中的
summm) - 第三个参数为分位值(0.2对应第二四分位数)
方法2:直接用VALUES+CALCULATE生成分组值集
无需提前生成虚拟表,直接通过VALUES获取唯一日期,配合CALCULATE计算每个日期的求和值,传入PERCENTILE.INC:
MyPercntile = PERCENTILE.INC( VALUES(site[تاريخ]), CALCULATE(SUM(site[حجم معامله به تن])), 0.2 )
VALUES(site[تاريخ])提供分组的维度(所有唯一日期)CALCULATE(SUM(...))自动计算每个日期对应的交易重量总和PERCENTILE.INC基于这些分组求和值计算分位
内容的提问来源于stack exchange,提问作者beehroid
相关产品推荐
相关产品推荐

