背景:
- 报表包含所有地区、所有年份
- 用户希望进入页面后 ,不同区域的主管 默认自动显示对应管理地区的信息
如A区经理一打开报表,就是A区的信息 最新年份,而不用手动再筛选区域
思路:
1)有一个默认配置表,一打开的时候 运行默认配置表,用户筛选后 根据筛选显示结果。
2)通过iscrossfiltered,可以判断当前是否有筛选器起作用。判断如果有筛选器起作用,则按筛选器走;否则按照默认配置表
3)如果每个measure都按这么逻辑判断一下,那么会很复杂;可以用计算组解决这个问题
做法:
1)数据准备
2)关系构建
在原有的模型上,加了两个默认显示配置表,关系流向是从配置表到维度表
3)打开tabular editor
新建计算组(我起名叫DefultView)
然后新建一个item: "Yes" (意思是启用default显示)
VAR YearsAlreadyFiltered =
CALCULATE ( ISCROSSFILTERED ( 'Calendar'[YearName] ), ALLSELECTED () )
VAR UseDefaultYears =
CALCULATETABLE (
VALUES ( DefaultYear[year] ),
DefaultYear[USER] = USERPRINCIPALNAME ()
)
VAR YearsToUse =
FILTER (
VALUES ( 'Calendar'[YearName] ),
YearsAlreadyFiltered
|| 'Calendar'[YearName] IN UseDefaultYears
)
VAR DistrictAlreadyFiltered =
CALCULATE ( ISCROSSFILTERED ( STORE[地区] ), ALLSELECTED () )
VAR useDefultDistrict =
CALCULATETABLE (
VALUES ( DefaultDistrict[District] ),
DefaultDistrict[USER] = USERPRINCIPALNAME ()
)
VAR DistricToUse =
FILTER (
VALUES ( STORE[地区] ),
DistrictAlreadyFiltered
|| STORE[地区] IN useDefultDistrict
)
VAR result =
CALCULATE ( SELECTEDMEASURE (), YearsToUse, DistricToUse )
RETURN
result
然后新建一个NO item:(意思是不启用Default显示)
SELECTEDMEASURE()
保存并应用
另外新建一个显示栏,告知用户当前正在浏览的筛选范围
Measure.show =
VAR District =
IF (
ISCROSSFILTERED ( STORE[地区] ),
"District:" & CONCATENATEX ( VALUES ( STORE[地区] ), STORE[地区], ", " ),
"All Countries"
)
VAR Years =
IF (
ISCROSSFILTERED ( 'Calendar'[YearName] ),
"Years: " & CONCATENATEX ( VALUES ( 'Calendar'[YearName] ), 'Calendar'[YearName],", "),
"All Years"
)
VAR result = "Showing " & District & " and " & Years
RETURN
result
测试:
以其他身份查看
不算Bug的bug
全选状态下,地区还是只显示了默认配置
而我通过多选,每一个都点击后,是可以正常显示筛选项的
因为全选时 没有筛选 公式里Iscrossfiltered的不起作用