船舶振动数据建模与可视化:Order筛选及图表构建咨询
翻译后的问题
现有包含Vessel(船舶)、Date(日期)、Mode(模式)、Side(舷侧)、Plane(平面)等多维度的船舶振动数据集,需要将Order字段取最近半整数后筛选出{0.5,1.5,2.0,2.5,3.0}范围内的值,以此为系列构建Velocity(振动速度)vs Nominal Speed(标称转速)的散点/折线图。请问是否需要为每个细分维度(比如James船左舷轴向面950rpm)单独构建
CALCULATETABLE(FILTER(ALL))表达式,再将这些数据集作为图表值?
解决方案建议
完全不用给每个细分维度单独写CALCULATETABLE(FILTER(ALL)),这种做法太冗余,推荐两种更高效的实现方式:
方式一:计算列+筛选器联动(直观易维护)
- 先给数据集新增计算列,处理Order字段取最近半整数:
处理后Order = MROUND('振动数据集'[Order], 0.5) - 再新增一个标记列,筛选出符合范围的值:
符合条件Order = IF('振动数据集'[处理后Order] IN {0.5,1.5,2.0,2.5,3.0}, "是", "否") - 直接使用原始数据集构建图表:
- 将
符合条件Order设为页面/图表级筛选器,只勾选"是" - 把Nominal Speed拖到X轴,Velocity拖到Y轴
- 把Vessel、Side、Plane等细分维度拖到「图例」区域,图表会自动按维度分组生成对应系列,完全不用手动拆分数据集
- 将
方式二:度量值动态计算(无计算列场景适用)
如果不想新增计算列,直接写一个度量值控制有效数据的聚合:
有效振动速度 = CALCULATE( AVERAGE('振动数据集'[Velocity]), // 可根据需求替换为SUM/MAX等聚合函数 FILTER( '振动数据集', MROUND('振动数据集'[Order], 0.5) IN {0.5,1.5,2.0,2.5,3.0} ) )
使用时把Nominal Speed拖到X轴,这个度量值拖到Y轴,再将细分维度拖到图例,图表会自动根据上下文拆分每个维度的系列,还能动态响应筛选器的变化。
核心逻辑
DAX的核心优势就是利用上下文自动分组,只要把细分维度字段放到图表的图例/筛选面板,它会自动帮你拆分每个维度的数据集,手动写N个CALCULATETABLE完全是做无用功,既浪费时间又不利于后期维护。
内容的提问来源于stack exchange,提问作者hic24
相关产品推荐
相关产品推荐

