大家好,又见面了,我是你们的朋友全栈君。
“页导航”是PowerBI在2020年5月的更新中一个非常关键的功能。我也写过一篇文章,如何在书签和页导航中进行选择:
PowerBI中的书签和导航页,如何选择呢?
而通过页导航的自定义参数链接可以实现给最终用户提供个性化定制的页面。
那么问题来了,为什么要给最终用户提供个性化的页面呢?
每一个终端用户,对于所想看到的页面是不同的,或者希望看到的报告风格是有差异的。你作为报告的设计者/PowerBI管理员,可能需要为每一个用户分别设置不同的报告。
一旦你要在报告中进行一些修改或者添加一些内容,你要么会修改大量的模型,要么会修改很多的报告。本身,要维护多个差不多相同的报告,就是一件很让人恼火的事情。
而对于最终用户来说,看到报告是为自己个性化定制的,一定是一件让人高兴愉快的事情。如果我是华北大区的负责人,当我打开报告时,显然想先看华北大区的销售分析。
其实依靠行级别筛选器,你完全可以做一个标准的报告,每个人登录后都只能看到自己地区的分析。但是在本案例中,我们期望的是,每一个大区的负责人都能够看到其他大区的数据。所以呢,不能使用行级别筛选器去筛选数据集。但是,我们还是要使用行级别安全筛选,当然,是在其他位置。
动态页面导航设置
想要实现不同人导航的页面不同,可以使用页面URL+用户ID匹配的方式来搞定。因为每一个页面在发布时都会被分配一个独一无二的ReportsSectionId,也就是URL链接,所以我们通过设置不同的用户ID去筛选不同的页面URL来实现个性化跳转。
最终实现效果:不同的人看到的页面数量是不同的:
不过,这种方式的可视化效果可以说比较差劲了,再就是还有一个最大的问题:它会弹出另一个全新的页面来打开这个URL。而要返回查看其他数据时,需要关闭新的页面。而今天要介绍的这个方法,完全避免了这个问题。
创建一个包含PageName的表,可以通过导入表的方式,也可以通过直接输入数据的方式:
再写一个度量值:
Page Navigation Destination = SELECTEDVALUE( ReportPages[PageName] )
之后我们就可以用这个度量值去进行导航了。
创建动态页面导航
在上图这个表中,我不仅输入了包含PageName的信息,同时也包含Page Description和Short Text这两列信息,所以说,目的自然不仅仅是单一地导航,做戏要做全套的,页面描述和按钮显示自然都是要有的:
-
定义动态页面导航显示文本
-
定义动态页面鼠标悬停时的提示
-
定义动态页面链接的目的地
再重复一次我们的目的,是要让每一个最终用户打开报告时,点击同一个报告的同一个按钮,但是到达的目的地页面是不同的。
以下按照步骤进行:
1.添加用户表,包含用户名和页面目标
我们需要根据登录用户的用户名来确定,他打开的页面具体导航到哪一个页面,所以我们需要一个包含用户名筛选的表。
2.对表模型创建关系
将以上两个表建立模型,注意双向一对多关系,并且在两个方向上启用安全筛选器。这个是成功的关键。慢慢品。
而则两个表与其他的维度表或数据表之间都没有任何关联,因为我们不对数据集本身进行筛选,仅仅是对页面导航进行筛选。
3.添加行级别安全筛选器
有了UserPrincipalName这一列,筛选时就很简单了,只要读取用户账号去做筛选即可:
[UserPrincipalName] = UserPrincipalName()
完成了这一步,通过用户账号就能判断它所代表的导航页面,那么点击时自然就会跳转到相应的页面了。
4.写几个度量值
前文说过,ReportPages表中有三列,所以我们要对该按钮实现三个功能:
-
定义动态页面导航显示文本
Button Title = SELECTEDVALUE( ReportPages[Short Text] )
-
定义动态页面鼠标悬停时的提示
Button Tooltip = SELECTEDVALUE( ReportPages[Page Description] )
-
定义动态页面链接
Page Navigation Destination = SELECTEDVALUE( ReportPages[PageName] )
5.设置页面导航
以上三个度量值分别对应在三个不同的参数位置上:
按钮文本:点击fx选择button title:
操作:目标fx点击选择Page Navigation Destination:
同样,工具提示点击fx选择Button Tooltip。不过工具提示有没有意义不大其实。有,稍微好看一点,没有,也不影响大局。
结果呈现:
由于我们是在本地进行呈现,本地的UserPrincipalName是计算机名,显然并不是用户账号,所以我们需要在建模中一角色身份查看,勾选其他用户和PageNavigation,然后输入一个账号:
这样,报告就被筛选了特定的用户,用户再筛选page信息,这样Title、Tooltip和Destination就都被限定了唯一值,自然就可以导航了:
导航目的页面:
选择另一个账号试试:
导航目的页面:
以上可以看出,不同的导航页面风格是不同的,适合最终用户的体验。
总个结:
通过以上的自定义动态页面导航,可以做到让每一个最终用户在点击同一个报告的同一个按钮,实现不同风格的页面跳转,让他们感觉,这报告就是完全为他们而设计,同时也符合不同用户的功能需要。
尤其是当你隐藏这些页面导航最终页面,只通过最开始的导航页进行跳转,整个报告会更加清晰整洁。
需要注意的一点是,以上方式看上去的确实现了不同用户只能看到特定的页面,而不能看到其他页面。但是,我们前文说过,每一个发布到云端的页面都会有独一无二的ReportSectionId,虽然你可能会将页面隐藏了,但是通过某些特定的算法,ReportSectionId,即你所隐藏的页面URL,是可以被计算出来的,尤其是当你学习了Power BI REST API之后,想看报告的隐藏页面还是so easy的。有时间后边写几篇。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138993.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...