如何使用SSRS Expression隐藏存在Active状态的LocationID所有行?
实现方案
核心逻辑是:只保留那些整个LocationID下没有任何Active状态记录的所有行。下面分几种常用工具给出具体实现方法:
1. SQL 实现(适用于数据库数据源)
方法一:子查询筛选符合条件的LocationID
先找出所有不存在Active状态的LocationID,再关联原表获取这些LocationID的所有数据:
SELECT t.* FROM your_table t WHERE t.LocationID NOT IN ( SELECT DISTINCT LocationID FROM your_table WHERE Status = 'Active' );
方法二:窗口函数标记(更高效,适合大数据量)
用窗口函数计算每个LocationID下是否存在Active状态,然后筛选出没有Active的组:
WITH location_status AS ( SELECT *, MAX(CASE WHEN Status = 'Active' THEN 1 ELSE 0 END) OVER (PARTITION BY LocationID) AS has_active FROM your_table ) SELECT * FROM location_status WHERE has_active = 0;
2. Power BI 实现
方法一:DAX 计算列标记
添加一个计算列,标记当前LocationID是否存在Active状态:
Has Active = VAR CurrentLoc = 'Table'[LocationID] RETURN CALCULATE( COUNTROWS('Table'), 'Table'[LocationID] = CurrentLoc, 'Table'[Status] = "Active" ) > 0
然后在报表筛选器中,设置Has Active等于FALSE即可。
方法二:DAX 度量值筛选(适合实时计算)
创建一个度量值,然后在视觉对象的筛选器中使用:
Show Location = VAR CurrentLoc = SELECTEDVALUE('Table'[LocationID]) RETURN IF( CALCULATE(COUNTROWS('Table'), 'Table'[LocationID] = CurrentLoc, 'Table'[Status] = "Active") = 0, 1, 0 )
将该度量值添加到视觉对象的筛选器,设置为等于1。
3. Excel 实现
方法一:辅助列+筛选
- 在空白列(比如E列)输入公式,判断当前LocationID是否存在Active状态:
(假设LocationID在A列,Status在D列)=COUNTIFS($A:$A,$A2,$D:$D,"Active")=0 - 下拉填充公式后,筛选E列为
TRUE的行即可。
方法二:高级筛选
- 创建条件区域,用公式条件:
=COUNTIFS($A:$A,A2,$D:$D,"Active")=0 - 选择数据区域,使用「数据」选项卡的「高级」筛选,选择条件区域即可。
内容的提问来源于stack exchange,提问作者WillyH
相关产品推荐
相关产品推荐

