如何解决DAX Measure 使用其中的参数计算平均值
我有这样的数据,
App_Num Days Price
A1 10 100
A1 11 150
A2 11 200
A3 12 250
A3 12 300
A4 20 350
A4 21 400
平均天数在卡片视觉上显示为 13.857。
现在,设置了两个参数供用户调整值并查看。
- 总值(最小和最大范围)
- 天
例如,如果用户选择 0-280-,则预期会列出 A1(100 + 150 = 250 小于 280)和 A2(200 小于 280)。
我使用了这样的 DAX 并构建了一个这样的表,
Apps_in_scope =
Var min_amount = Min('Total Value'[Total Value])
Var max_amount = Max('Total Value'[Total Value])
var required_app_num = SELECTEDVALUE(Table1[App_Num])
Var required_amount = CALCULATE(sum(Table1[Price]),FILTER(Table1,Table1[App_Num] = required_app_num))
var in_scope = if(And(required_amount <= max_amount,required_amount >= min_amount),1,0)
return in_scope
我能够产生这样的视觉效果,
App_Num Apps_in_scope
A1 1
A2 1
A3 0
A4 0
现在选择总价格范围后,如果用户手动选择天数参数为 15,那么我的平均值将按照此逻辑移动。
- A1 有 2 笔交易,在选定的价格范围内 280 将变为 (15*2)
- A2 有 1 笔交易,并且在选定的价格范围 280 内变为 (15*1)
- A3 有 2 个事务,将保持不变 (12+12)
- A4 有 2 笔交易,将保持不变 (20+21)
所以我想放在卡片上的新度量现在预计会显示 (15+15+15+12+12+20+21)/7 = 15.714
我该如何编写此度量。请帮我解决这个问题
解决方法
这是假设您的价格范围和天数选择有单独的表(如假设参数表)。
My measure =
VAR apps =
SELECTCOLUMNS (
FILTER (
SUMMARIZE ( Table1,Table1[App_Num],"Total Price",SUM ( Table1[Price] ) ),[Total Price] >= MIN ( 'Total Value'[Total Value] )
&& [Total Price] <= MAX ( 'Total Value'[Total Value] )
),"App_Num",[App_Num]
)
RETURN
AVERAGEX (
Table1,IF ( Table1[App_Num] IN apps,SELECTEDVALUE ( Days[Days] ),Table1[Days] )
)
,
我会稍微调整您的度量,以便它更适合取平均值:
Apps_in_scope_2 =
VAR min_amount = MIN ( 'Total Value'[Total Value] )
VAR max_amount = MAX ( 'Total Value'[Total Value] )
VAR required_amount =
CALCULATE ( SUM ( Table1[Price] ),ALLEXCEPT ( Table1,Table1[App_Num] ) )
VAR in_scope =
IF ( AND ( required_amount <= max_amount,required_amount >= min_amount ),1,0 )
RETURN
in_scope
通过这种调整,平均值相当简单:
AvgMeasure =
VAR DaysParam = SELECTEDVALUE ( DaysSlicer[Days] )
RETURN
AVERAGEX( Table1,IF( [Apps_in_scope_2] = 1,DaysParam,Table1[Days] ) )
编辑:
这里有一个替代版本,它不使用第一个度量,但应该可以更好地扩展到大型数据表。
AvgAlternate =
VAR min_amount = MIN ( 'Total Value'[Total Value] )
VAR max_amount = MAX ( 'Total Value'[Total Value] )
VAR DaysParam = SELECTEDVALUE ( DaysSlicer[Days] )
VAR apps =
ADDCOLUMNS (
SUMMARIZE (
Table1,"@Price",SUM ( Table1[Price] ),"@Rows",COUNT ( Table1[Price] )
),"@Days",IF (
AND ( [@Price] <= max_amount,[@Price] >= min_amount ),DaysParam * [@Rows],CALCULATE ( SUM ( Table1[Days] ) )
)
)
RETURN
DIVIDE ( SUMX ( apps,[@Days] ),SUMX ( apps,[@Rows] ) )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。