SAS Visual Analytics 如何让无 Yes 匹配的条件汇总显示 0?
为每个变量创建一个数值计算项:当该行变量为 'Yes' 时返回 count,否则返回 0。然后在对应的 Key Value visual 中,将该计算项的汇总方式设为 Sum。移除专门用于该指标的 variable_x = 'Yes' 或 variable_y = 'Yes' 对象筛选,由计算项内部判断条件。
这个方法的前提是对象接收的数据中仍有记录。如果报表、页面或交互筛选已经排除了全部记录,仅靠逐行计算项无法保证对象显示 0。
为什么原来的方法显示 (missing)?
示例中,variable_y 的两行都是 'No'。应用 variable_y = 'Yes' 筛选后,对象没有可用于汇总的记录,因此出现 (missing)。
已尝试的几种方法有以下问题:
if variable_x = 'Yes' then 1 else 0:每个匹配行贡献 1,汇总后得到的是匹配行数。count + 0:没有处理'Yes'条件,也无法让被筛选掉的记录重新出现。coalesce:即使某个环境提供缺失值替换函数,也需要区分“已有计算结果为缺失”和“对象已没有记录”这两种情况。
创建逐行计算项,再设置 Sum
在数据窗格中创建数值计算项,例如命名为 count_x_yes。通过表达式编辑器选择条件运算、实际变量字段和 count 字段,表达以下逻辑:
以下为逻辑伪代码,不是可直接粘贴的 SAS Visual Analytics 表达式:
count_x_yes =
IF variable_x = 'Yes'
THEN count
ELSE 0
count_y_yes =
IF variable_y = 'Yes'
THEN count
ELSE 0
条件成立时应返回 count 字段的值,不能用常量 1。具体表达式语法和菜单名称以当前版本的编辑器为准。
然后分别配置两个 Key Value visual:
- 第一个对象使用
count_x_yes作为度量,并将聚合方式设置为Sum。 - 第二个对象使用
count_y_yes作为度量,并将聚合方式设置为Sum。 - 移除这两个对象上用于选择
'Yes'的筛选。日期、地区等仍需生效的业务筛选可以保留。
按示例数据计算,各行贡献值如下:
| count | variable_x | variable_y | count_x_yes | count_y_yes |
|---|---|---|---|---|
| 10 | Yes | No | 10 | 0 |
| 20 | No | No | 0 | 0 |
| Sum | 10 | 0 |
两个指标各自判断对应的变量,无须同一行同时满足 variable_x = 'Yes' 和 variable_y = 'Yes'。
如果仍然显示缺失,检查哪些地方?
先检查对象实际接收的数据。报表筛选、页面筛选、对象筛选,以及其他对象触发的交互筛选,都可能提前移除记录。例如,如果上层筛选要求 variable_x = 'Yes',count_y_yes 也只能基于剩余记录计算,无法访问被排除的行。
还需要检查:
- 聚合方式:应使用
Sum。使用Count会再次变成计数。 - 字段类型:
count应为数值字段。 - 实际取值:确认条件对应数据中的
'Yes',留意大小写或额外空格。 - 匹配行的 count 是否缺失:上述逻辑只规定不匹配时返回 0。如果匹配行的
count也可能缺失,需要另外明确是否将其按 0 处理。
如果业务要求在日期范围内完全没有记录时也显示 0,需要进一步处理空数据场景。可以在数据准备阶段提供需要展示的指标或维度组合,并补齐零值记录;采用这种方案时,也要保证这些记录不会被后续筛选全部排除。
备注:内容仅供参考。
