Power BI:如何用参数作为列名实现周度服务器状态对比
实现步骤
1. 重塑数据结构(关键前提)
原表是宽表(每列对应一个周),这种结构无法支持动态周度对比,先转成窄表:
- 进入Power Query编辑器,选中
Server Name列,右键选择逆透视其他列 - 重命名逆透视后的列:将
Attribute改为Week(设置为整数类型),Value改为IsActive(将1转为True,null转为False,设置为布尔类型) - 关闭并应用,得到如下结构的表:
| Server Name | Week | IsActive |
|---|---|---|
| AAAA | 24 | True |
| AAAA | 25 | True |
| AAAA | 26 | True |
| AAAA | 27 | True |
| AAAA | 28 | False |
| BBBB | 24 | False |
| ... | ... | ... |
2. 创建周选择参数
- 在Power BI主页,点击建模选项卡 → 新建参数
- 参数设置:
- 名称:
SelectedWeek - 类型:整数
- 最小值:你的最小周号(比如24)
- 最大值:你的最大周号(比如28)
- 增量:1
- 默认值:选一个常用周(比如25)
- 名称:
- 勾选添加切片器,方便用户在报表页选择周号
3. 计算动态状态(用度量值替代计算列)
因为要跟随所选周动态更新,用度量值比静态计算列更合适:
- 新建度量值
ServerStatus:
ServerStatus = VAR SelectedWeek = SELECTEDVALUE('SelectedWeek'[SelectedWeek]) VAR CurrentWeekActive = MAX(IF('YourTableName'[Week] = SelectedWeek, 'YourTableName'[IsActive])) VAR PreviousWeekActive = MAX(IF('YourTableName'[Week] = SelectedWeek - 1, 'YourTableName'[IsActive])) RETURN SWITCH( TRUE(), CurrentWeekActive && PreviousWeekActive, "Active", NOT CurrentWeekActive && PreviousWeekActive, "Deactivated", CurrentWeekActive && NOT PreviousWeekActive, "Activated", NOT CurrentWeekActive && NOT PreviousWeekActive, "Inactive" )
替换YourTableName为你实际的表名
4. 统计各类状态的服务器数量
分别创建四个度量值:
- 活跃服务器数:
ActiveCount = CALCULATE(DISTINCTCOUNT('YourTableName'[Server Name]), FILTER('YourTableName', [ServerStatus] = "Active"))
- 激活服务器数:
ActivatedCount = CALCULATE(DISTINCTCOUNT('YourTableName'[Server Name]), FILTER('YourTableName', [ServerStatus] = "Activated"))
- 停用服务器数:
DeactivatedCount = CALCULATE(DISTINCTCOUNT('YourTableName'[Server Name]), FILTER('YourTableName', [ServerStatus] = "Deactivated"))
- 不活跃服务器数:
InactiveCount = CALCULATE(DISTINCTCOUNT('YourTableName'[Server Name]), FILTER('YourTableName', [ServerStatus] = "Inactive"))
5. 报表页配置
- 将
SelectedWeek切片器添加到报表页 - 用卡片视觉对象绑定四个统计度量值,或用矩阵/表格展示单服务器状态
- 用户选择不同周号时,所有统计会自动更新,对比所选周与前一周的状态
内容的提问来源于stack exchange,提问作者Heltal
相关产品推荐
相关产品推荐

