QlikSense:获取当前筛选范围外的行值及相关技术术语咨询
问题
我需要创建表达式以获取用户筛选范围外、特定层级的数据值。我的事实表为多事实表堆叠结构,数据模型示例如下:
| Tablename | Country | State | Sales | Target |
|---|---|---|---|---|
| Sales | US | California | 100 | null |
| Sales | US | California | 200 | null |
| Sales | US | New York | 200 | null |
| Target | US | null | null | 500 |
| Sales | CA | Toronto | 100 | null |
| Sales | CA | Toronto | 200 | null |
| Sales | CA | Vancouver | 200 | null |
| Target | CA | null | null | 500 |
销售数据处于州/城市层级,目标数据处于国家层级。用户会选择单个州/城市,将其销售数据与对应国家的目标数据对比查看贡献占比(如加利福尼亚州为300/500=60%)。但用户筛选州/城市后,目标值会返回0。我推测需使用p()函数(因销售与目标数据通过Country字段关联而非直接关联),请问如何通过Set Analysis实现?另外,这种通过共同列值建立关联的关系对应的专业术语是什么?
解决方案
一、Set Analysis实现目标值获取
用户筛选州/城市后,目标数据因State字段为null被排除,需通过Set Analysis忽略State筛选,同时保留选中州对应的Country维度,以此正确提取国家层级的目标值。
目标值计算表达式
Sum({<State=, Country=p(Country)>} Target)
表达式解析:
<State=:清除当前对State字段的所有筛选,让State为null的目标数据能被纳入计算范围Country=p(Country):通过p()函数获取当前筛选上下文里Country的实际取值(即选中州所属的国家),保留该维度筛选以确保目标值与当前选中区域匹配Sum(Target):对符合条件的目标值求和
贡献占比完整表达式
Sum(Sales) / Sum({<State=, Country=p(Country)>} Target)
二、专业术语
这种通过公共维度字段(如Country)建立不同层级数据关联的模式,属于共享维度关联(Shared Dimension Association);而你所用的堆叠式多事实表结构,专业上称为合并事实表(Combined Fact Table),不同业务事实(销售、目标)通过公共维度键(Common Dimension Key)实现关联。
内容的提问来源于stack exchange,提问作者QlikQlack
相关产品推荐
相关产品推荐

