這篇文章籌備了很久,最近正好有一個(gè)合適的契機(jī),終于可以和大家見面了啼辣。Power BI在權(quán)限控制和頁面控制方面柳弄,對于大多數(shù)人而言并不是一個(gè)很好用的功能玖媚,結(jié)合自己的經(jīng)歷,準(zhǔn)備直接給大家分享終極方案。
內(nèi)容過多,有些細(xì)節(jié)可能照顧不到破婆,有疑問的可以留言,我會迭代上去胸囱。
背景
20年我開始搭建企業(yè)級的Power BI模型祷舀。和以前作為分析師以個(gè)人分析為目的并不相同,企業(yè)級的部署需要考慮的內(nèi)容很多,我選擇了使用Power BI報(bào)表服務(wù)器的部署方案蔑鹦。
首先面臨的問題就是如何給用戶做權(quán)限控制夺克,如何讓用戶使用Power BI報(bào)表像使用網(wǎng)頁一樣箕宙,讓有權(quán)限的人看到應(yīng)該看到的報(bào)表頁面嚎朽。
在Power BI原有的功能中,雖然可以做行級別權(quán)限控制柬帕,但不夠靈活哟忍。對于頁面控制+權(quán)限控制更是無力。尤其是對于初入Power BI的新手陷寝,權(quán)限控制簡直是個(gè)災(zāi)難锅很。
后來經(jīng)過不斷的嘗試和反復(fù)的摸索學(xué)習(xí),最終找到了一套簡單的維護(hù)方案凤跑。
方案的主體部分爆安,參考了佐羅老師《BI真經(jīng)》高級版的內(nèi)容。
什么情況下使用該方案仔引?
該權(quán)限控制方案扔仓,適合報(bào)表數(shù)量非常多,比如100+咖耘,權(quán)限控制要求非常復(fù)雜翘簇,比如使用幾十個(gè)字段甚至更多字段進(jìn)行權(quán)限控制,那么這個(gè)方案就是你要找的最好的方案儿倒。如果你僅僅只有幾個(gè)賬號版保,權(quán)限相對穩(wěn)定,那么這個(gè)方案可能并沒有那么優(yōu)秀夫否。
各種Power BI部署方案與該權(quán)限控制方案的配合
Power BI Rerpot Server
- 報(bào)表服務(wù)器的配置服務(wù)賬戶彻犁,目前在報(bào)表服務(wù)器自身來說是三種:內(nèi)置-虛擬服務(wù)賬戶、內(nèi)置-網(wǎng)絡(luò)服務(wù)凰慈、域賬戶汞幢。其中推薦使用的也就是大多數(shù)人都在使用的,使用域控制溉瓶。
Power BI Report Server部署與配置詳解 - 權(quán)限控制依然需要建立企業(yè)的域賬號急鳄,通過預(yù)控管理賬戶和密碼作為第一道權(quán)限控制。
- 報(bào)表服務(wù)器的部署堰酿,一共有兩道權(quán)限疾宏。第一道是域賬號,也就是必須先擁有域賬號才能登錄報(bào)表服務(wù)器触创,然后是Power BI的權(quán)限控制坎藐,只有域賬號訪問Power BI是看不到任何數(shù)據(jù)了,全部是大叉子。咱們這個(gè)權(quán)限部署方案岩馍,指的是在你使用域賬號登錄到后臺以后碉咆,點(diǎn)擊查看Power BI某個(gè)模型的權(quán)限,控制范圍在Power BI模型中蛀恩。
- 在以前的方案中疫铜,權(quán)限調(diào)整有2-3次,第一次是通過報(bào)表服務(wù)器后臺的管理文件夾創(chuàng)建域用戶賬號双谆。
管理文件夾 -
第二次是在報(bào)表服務(wù)器上壳咕,某個(gè)模型的設(shè)置中,選擇模型的管理選項(xiàng)顽馋,可以看到安全性谓厘,安全性可以獨(dú)立設(shè)置,也可以使用管理文件夾中維護(hù)的域賬號寸谜。
安全性 -
第三次是行級別安全性竟稳,這個(gè)就是咱們本次方案涉及到的部分,正常是通過配置角色熊痴,在角色中對不用的維度表中的字段做權(quán)限控制他爸,使用當(dāng)前方案后,則在這一步不需要做任何操作愁拭。
行級別安全性
創(chuàng)建域賬號以后讲逛,將用戶姓名、用戶賬號及對應(yīng)的權(quán)限維護(hù)到權(quán)限配置表岭埠。然后按照后面的方法配置盏混,就可以實(shí)現(xiàn)權(quán)限控制和頁面控制了。
Power BI Pro
-
Power BI Pro和報(bào)表服務(wù)器的大同小異惜论,區(qū)別在于如果使用了這個(gè)權(quán)限控制方案许赃,報(bào)表發(fā)布到Pro賬戶之后,不需要再設(shè)置安全性馆类。
安全性 -
也就是下面這個(gè)操作可以不用做混聊,這樣權(quán)限部署更加的靈活,而且部署的步驟也減少了乾巧。
行級控制
SSAS + Power BI
- 這個(gè)方案沒有直接操作過句喜,但是原理雷同。
- 將Excel配置表加載到SSAS模型中沟于,SSAS里面是可以寫計(jì)算組的咳胃,通過計(jì)算組控制,完全繞過了角色配置旷太。
- 權(quán)限需要調(diào)整時(shí)展懈,調(diào)整的是Excel文件销睁,SSAS模型不用調(diào)整,只做刷新即可存崖。
Power BI Preminum
和Power BI Pro雷同冻记,但沒有親測過。
總結(jié)
- 所有的權(quán)限對應(yīng)關(guān)系都在Excel中提前做好来惧,比如使用地區(qū)字段進(jìn)行控制冗栗,分別給不同的人分配不同的地區(qū)權(quán)限,然后在Power BI模型中刷新违寞,通過計(jì)算組判斷度量值來做權(quán)限控制贞瞒,包括頁面控制偶房。
- Pro用了這個(gè)方案趁曼,不用在網(wǎng)頁賬號再配制一次權(quán)限,報(bào)表服務(wù)器棕洋,從原來的配置2-3次挡闰,減少到1-2次。
- 該方案解決的是Power BI模型內(nèi)部的權(quán)限
Power BI權(quán)限控制流程
整個(gè)權(quán)限控制是由兩個(gè)大的部分構(gòu)成:
- 如何自動(dòng)完成員工入職或離職賬號掰盘。比如根據(jù)OA賬號密碼摄悯,自動(dòng)創(chuàng)建域賬號。
- 如何自動(dòng)根據(jù)已調(diào)整的賬號配置相關(guān)的權(quán)限
本次重點(diǎn)講的是第二個(gè)部分愧捕,第一個(gè)部分目前我尚未整理出更好的方法奢驯,這部分是需要有相關(guān)開發(fā)能力作為支持才可以完成。
進(jìn)入正題
思路講解
- 先在Excel中做好頁面次绘、權(quán)限瘪阁、角色的配置,然后加載到PBI進(jìn)行權(quán)限控制的處理邮偎。這部分控制使用計(jì)算組來做控制管跺,解決了使用角色配置繁瑣的問題。
- 除了導(dǎo)航頁禾进,其他全部隱藏豁跑,在導(dǎo)航頁根據(jù)當(dāng)前用戶做頁面權(quán)限的判斷,進(jìn)入頁面后自動(dòng)做行級別權(quán)限的判斷泻云,達(dá)到最終控制的目的艇拍。
技術(shù)拆解
如何制作配置表
配置表在Excel中完成,簡單方便快捷宠纯,若定位于實(shí)現(xiàn)系統(tǒng)自動(dòng)化娇哆,另當(dāng)別論治力。配置完成后Power BI直接讀取最新記錄。需要三張Excel配置表,用于定義痊班,頁面配置缨称、用戶權(quán)限睦尽、角色權(quán)限当凡,加載到模型里面的是頁面配置和用戶權(quán)限兩張表宁玫。
Excel配置表中的數(shù)據(jù)從何而來眷射?
頁面配置 來源于你要做的Power BI看板芥被,比如你想要做10個(gè)看板席镀,并且10個(gè)看板分屬3個(gè)部門,那么在頁面配置表屎篱,就是將3個(gè)部門維護(hù)到[部門名稱]字段葵蒂,10個(gè)看板維護(hù)到后面的頁面描述、頁面標(biāo)題秦士、報(bào)表標(biāo)題等做好對應(yīng)即可。
權(quán)限配置 用戶權(quán)限配置來源于兩部分伍宦,一部分是頁面權(quán)限,另一部分是行級別權(quán)限乏梁,我將相關(guān)內(nèi)容做到了一個(gè)權(quán)限表中关贵。這里面的用戶名稱揖曾、用戶賬號,對應(yīng)的就是報(bào)表服務(wù)器的域賬號或者Power BI Rro的Pro賬號。至于這些賬號怎么進(jìn)入到Excel中绿鸣,目前的方案還只能是手工維護(hù),如果有開發(fā)條件暂氯,是可以根據(jù)入職或離職的員工賬號潮模,直接自動(dòng)寫入到Excel表中的,或者可以將權(quán)限表直接維護(hù)到數(shù)據(jù)庫中痴施,直接用任務(wù)修改數(shù)據(jù)庫里面的權(quán)限內(nèi)容擎厢,道理是一樣的究流。
對于域賬號,可以根據(jù)入職或離職的員工信息动遭,自動(dòng)創(chuàng)建域賬號梯嗽,同時(shí)保持和OA的賬號密碼一致,實(shí)現(xiàn)單點(diǎn)登錄沽损,然后再將該域賬號寫入到權(quán)限表灯节,這么Power BI的權(quán)限控制就可以實(shí)現(xiàn)全自動(dòng)了。
- 角色配置 角色的配置是我為了減少權(quán)限配置的成本增加的功能绵估,因?yàn)閷?shí)際維護(hù)會有很多人是一樣的角色炎疆,開一樣的權(quán)限,只需要選擇角色国裳,自動(dòng)匹配到對應(yīng)的權(quán)限即可形入,不用再為每一個(gè)人配置詳細(xì)的權(quán)限。
頁面配置
頁面配置表缝左,需要幾個(gè)關(guān)鍵的字段亿遂,其他的根據(jù)自己的實(shí)際需求添加,參考了佐羅老師的方案渺杉,做了一些調(diào)整蛇数。
該配置表為“表”,相關(guān)引用使用表的引用是越,而非單元格耳舅,可以減少數(shù)據(jù)調(diào)整導(dǎo)致的錯(cuò)誤。不了解的請補(bǔ)充下關(guān)于“表”的知識后再繼續(xù)倚评。
頁面權(quán)限表可以無限向下或向右拓展
自然序號 = IF( [@部門名稱] <> "", ROW()-ROW(頁面配置表[#標(biāo)題]), "" )
內(nèi)容序號 = IF( [@自然序號] <> "", [@自然序號] - COUNTBLANK( OFFSET( 頁面配置表[[#標(biāo)題],[自然序號]], 0, 0, ROW( ) - ROW( 頁面配置表[[#標(biāo)題],[自然序號]] ) ) ), "" )
部門序號 = IF( [@部門名稱] <> "", COUNTBLANK( OFFSET( 頁面配置表[[#標(biāo)題],[自然序號]], 0, 0, ROW( ) - ROW( 頁面配置表[[#標(biāo)題],[自然序號]] ) ) ), "" )
頁面序號 = IF( [@部門名稱] <> "", [@自然序號] - MINIFS( [自然序號], [部門名稱], [@部門名稱] ), "" )
部門編號 = IF( [@部門名稱] <> "", [@部門序號]*1000+[@頁面序號], "" )
部門名稱 公司部門名稱
頁面描述 頁面功能的描述
是否啟用 是否啟用對應(yīng)的報(bào)表頁
頁面標(biāo)題 報(bào)表頁的名稱
報(bào)表標(biāo)題 報(bào)表頁中浦徊,用于自動(dòng)顯示報(bào)表標(biāo)題
......
角色權(quán)限
當(dāng)用戶特別多時(shí),就需要使用角色進(jìn)行配置天梧,可以減少維護(hù)成本盔性。相關(guān)內(nèi)容以“;”做間隔。
角色權(quán)限表可以無限向右和向下拓展
角色編號 使用自然順序創(chuàng)建角色編號
角色名稱 增加角色的名稱呢岗,自定義設(shè)置
快速配置 個(gè)人增加的一個(gè)快速配置頁面權(quán)限的功能
頁面權(quán)限 對應(yīng)角色擁有的頁面權(quán)限
城市 根據(jù)城市字段做權(quán)限控制
產(chǎn)品類別 根據(jù)產(chǎn)品類別做權(quán)限控制
......
角色配置表中冕香,頁面權(quán)限部分,我做了兩個(gè)中間表敷燎,可以快速方便的維護(hù)角色擁有的頁面權(quán)限暂筝,當(dāng)報(bào)表頁面特別多時(shí),該方式可以減少維護(hù)成本硬贯。該方式支持開通指定的頁面焕襟。
該部分通過Power Query完成。
let
源 = Excel.CurrentWorkbook(){[Name="頁面配置表"]}[Content],
篩選的行 = Table.SelectRows(源, each ([是否啟用] = 1)),
刪除的其他列 = Table.SelectColumns(篩選的行,{"部門序號", "頁面編號", "部門名稱"}),
更改的類型 = Table.TransformColumnTypes(刪除的其他列,{{"頁面編號", type text}, {"部門序號", type text}}),
分組的行 = Table.Group(更改的類型, {"部門名稱","部門序號"}, {{"頁面權(quán)限", each Text.Combine([頁面編號],";"), type nullable text}}),
添加的后綴 = Table.TransformColumns(分組的行, {{"頁面權(quán)限", each _ & ";", type text}})
in
添加的后綴
let
源 = Excel.CurrentWorkbook(){[Name="角色配置表"]}[Content],
刪除的其他列 = Table.SelectColumns(源,{"角色編號", "角色名稱", "快速配置"}),
篩選的行 = Table.SelectRows(刪除的其他列, each ([快速配置] <> null)),
按分隔符拆分列 = Table.SplitColumn(Table.TransformColumnTypes(篩選的行, {{"快速配置", type text}}, "zh-CN"), "快速配置", Splitter.SplitTextByDelimiter("+", QuoteStyle.Csv), {"快速配置.1", "快速配置.2"}),
用位置分列 = Table.SplitColumn(按分隔符拆分列, "快速配置.1", Splitter.SplitTextByRepeatedLengths(1), {"快速配置.1.1", "快速配置.1.2", "快速配置.1.3", "快速配置.1.4", "快速配置.1.5", "快速配置.1.6"}),
按分隔符拆分列1 = Table.SplitColumn(用位置分列, "快速配置.2", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"快速配置.2.1", "快速配置.2.2"}),
逆透視的其他列 = Table.UnpivotOtherColumns(按分隔符拆分列1, {"角色編號","角色名稱"}, "屬性", "序號"),
刪除的列 = Table.RemoveColumns(逆透視的其他列,{"屬性"}),
合并的查詢 = Table.NestedJoin(刪除的列, {"序號"}, 部門名稱權(quán)限, {"部門序號"}, "部門名稱權(quán)限分組", JoinKind.LeftOuter),
#"展開的“部門名稱權(quán)限分組”" = Table.ExpandTableColumn(合并的查詢, "部門名稱權(quán)限分組", {"頁面權(quán)限"}, {"頁面權(quán)限"}),
已添加自定義 = Table.AddColumn(#"展開的“部門名稱權(quán)限分組”", "頁面權(quán)限合并", each if [頁面權(quán)限] = null then [序號] else [頁面權(quán)限]),
分組的行 = Table.Group(已添加自定義, {"角色編號","角色名稱"}, {{"頁面權(quán)限", each Text.Combine([頁面權(quán)限合并],";"), type nullable text}}),
替換的值 = Table.ReplaceValue(分組的行,";;",";",Replacer.ReplaceText,{"頁面權(quán)限"})
in
替換的值
最后使用Vlookup函數(shù)饭豹,將不同角色名稱對應(yīng)的頁面權(quán)限取值到角色表中即可鸵赖。
用戶權(quán)限
用戶權(quán)限表可以無限向下或向右拓展务漩,增加的列字段會在進(jìn)入Power BI時(shí),自動(dòng)做轉(zhuǎn)換處理它褪。
需要給當(dāng)前本地電腦饵骨,配置一個(gè)賬戶,使用UserPrincipalName()返回本地電腦的賬戶茫打,并賦予所有權(quán)限居触。
用戶名稱 新增使用用戶姓名
用戶賬號 用戶使用賬號
角色名稱 角色名稱 該部分可以通過做Excel數(shù)據(jù)有效性取值角色權(quán)限表中角色名稱列
頁面權(quán)限 使用函數(shù),通過角色名稱匹配到該角色擁有的頁面權(quán)限
城市 使用函數(shù)老赤,通過角色名稱匹配到該角色擁有的城市權(quán)限
產(chǎn)品類別 使用函數(shù)轮洋,通過角色名稱匹配到該角色擁有的產(chǎn)品類別權(quán)限
加載頁面配置表
篩選保留是否啟用字段中不是null的值,調(diào)整數(shù)字字段為整數(shù)抬旺,正常加載弊予。
添加部門編號輔助列,為模型中關(guān)系建立做準(zhǔn)備开财。
let
源 = Excel.Workbook(File.Contents("D:\桌面\學(xué)習(xí)課程\權(quán)限控制\權(quán)限控制配置表.xlsx"), null, true),
頁面配置表_Table = 源{[Item="頁面配置表",Kind="Table"]}[Data],
更改的類型 = Table.TransformColumnTypes(頁面配置表_Table,{{"自然序號", Int64.Type}, {"內(nèi)容序號", Int64.Type}, {"部門序號", Int64.Type}, {"頁面序號", Int64.Type}, {"頁面編號", Int64.Type}, {"是否啟用", Int64.Type}}),
篩選的行 = Table.SelectRows(更改的類型, each ([是否啟用] = 1)),
復(fù)制的列 = Table.DuplicateColumn(篩選的行, "頁面編號", "部門編號輔助"),
更改的類型1 = Table.TransformColumnTypes(復(fù)制的列,{{"部門編號輔助", type text}})
in
更改的類型1
加載權(quán)限配置表
只要你做的配置表字段跟我一樣汉柒,那么就可以根據(jù)M公式還原出操作步驟。
let
源 = Excel.Workbook(File.Contents("D:\桌面\學(xué)習(xí)課程\權(quán)限控制\權(quán)限控制配置表.xlsx"), null, true),
權(quán)限配置表_Table = 源{[Item="權(quán)限配置表",Kind="Table"]}[Data],
更改的類型 = Table.TransformColumnTypes(權(quán)限配置表_Table,{{"用戶名稱", type text}, {"用戶賬號", type text}, {"角色名稱", type text}, {"頁面權(quán)限", type text}, {"地區(qū)", type text}, {"產(chǎn)品類別", type text}}),
逆透視的其他列 = Table.UnpivotOtherColumns(更改的類型, {"用戶名稱", "用戶賬號", "角色名稱"}, "權(quán)限類型", "擁有權(quán)限"),
生成權(quán)限列表 = Table.TransformColumns(#"逆透視的其他列", {{"擁有權(quán)限", each List.RemoveItems( Text.Split( _ ,";" ) , {""} ) }}),
#"展開的“擁有權(quán)限”" = Table.ExpandListColumn(生成權(quán)限列表, "擁有權(quán)限"),
更改的類型1 = Table.TransformColumnTypes(#"展開的“擁有權(quán)限”",{{"擁有權(quán)限", type text}}),
篩選的行 = Table.SelectRows(更改的類型1, each [擁有權(quán)限] <> null)
in
篩選的行
處理表關(guān)系
不需要做任何表關(guān)系處理责鳍,也不需要做角色配置碾褂。
計(jì)算組準(zhǔn)備
需要使用Tabular Editor軟件來完成。
連接需要操作的模型
在Tables文件夾上右擊選擇創(chuàng)建計(jì)算組
新建一個(gè)組薇搁,并根據(jù)自己的喜好命名斋扰,這里命名為啟用
點(diǎn)擊啟用,右側(cè)填寫以下內(nèi)容:
CALCULATE(
SELECTEDMEASURE() ,
KEEPFILTERS( TREATAS( CALCULATETABLE( VALUES( '權(quán)限配置表'[擁有權(quán)限] ) , '權(quán)限配置表'[用戶賬號] = USERPRINCIPALNAME( ) , '權(quán)限配置表'[權(quán)限類型] = "地區(qū)" ) , '地理位置'[地區(qū)] ) ) ,
KEEPFILTERS( TREATAS( CALCULATETABLE( VALUES( '權(quán)限配置表'[擁有權(quán)限] ) , '權(quán)限配置表'[用戶賬號] = USERPRINCIPALNAME( ) , '權(quán)限配置表'[權(quán)限類型] = "產(chǎn)品類別" ) , '產(chǎn)品'[產(chǎn)品類別] ) ) ,
KEEPFILTERS( TREATAS( CALCULATETABLE( VALUES( '權(quán)限配置表'[擁有權(quán)限] ) , '權(quán)限配置表'[用戶賬號] = USERPRINCIPALNAME( ) , '權(quán)限配置表'[權(quán)限類型] = "頁面權(quán)限" ) , '頁面配置表'[部門編號輔助] ) ) ,
{ "可以添加其他篩選" }
)
制作導(dǎo)航頁
看不懂的需要補(bǔ)一下Power BI按鈕的知識啃洋。
- 1、左上角 當(dāng)前用戶 插入空白按鈕屎鳍,然后選擇按鈕文本使用度量值[用戶 當(dāng)前用戶]
用戶 當(dāng)前用戶 = "當(dāng)前用戶:" & SELECTEDVALUE( '權(quán)限配置表'[用戶名稱], "管理員" )
- 2宏娄、中間標(biāo)題使用空白按鈕賦予按鈕文本或單獨(dú)插入公司Logo
- 3、右上角 模型日期 方法同當(dāng)前用戶按鈕
模型日期 = MAXX( all( '訂單' ), '訂單'[訂單日期] )
- 4逮壁、使用切片器展示孵坚,將頁面配置表[部門名稱]字段,調(diào)整為橫向展示窥淆;
- 5卖宠、該部分導(dǎo)航和右側(cè)的導(dǎo)航是兩套方案;使用空白按鈕制作忧饭,適合在特定場景使用扛伍,維護(hù)成本高,但可以直接點(diǎn)擊跳轉(zhuǎn)到對應(yīng)頁面词裤。
每個(gè)按鈕需要四個(gè)度量值:按鈕文本刺洒、字體顏色鳖宾、邊框顏色、導(dǎo)航目標(biāo)唧喉、工具提示虏冻。其中字體顏色和邊框顏色使用一個(gè)度量值纱兑。有多少個(gè)按鈕就得配置多少套。
這里利用了按鈕可以使用度量值的特性拇惋。
首頁 頁面控制 導(dǎo)航目標(biāo) 2000 = //頁導(dǎo)航 目標(biāo)
var t1 = SUMMARIZE( FILTER( '頁面配置表', '頁面配置表'[頁面編號] = 2000 ),'頁面配置表'[報(bào)表標(biāo)題] )
var t2 = UserPrincipalName() in VALUES( '權(quán)限配置表'[用戶賬號] )
return if( t2, t1, BLANK() )
首頁 頁面控制 懸浮文字 2000 = //頁導(dǎo)航 工具提示
var t1 = SUMMARIZE( FILTER( '頁面配置表', '頁面配置表'[頁面編號] = 2000 ),'頁面配置表'[頁面標(biāo)題] )
var t2 = UserPrincipalName() in VALUES( '權(quán)限配置表'[用戶賬號] )
return if( t2, t1, BLANK() )
首頁 頁面控制 按鈕文本 2000 = //按鈕文本
var t1 = SUMMARIZE( FILTER( '頁面配置表', '頁面配置表'[頁面編號] = 2000 ),'頁面配置表'[頁面標(biāo)題] )
var t2 = UserPrincipalName() in VALUES( '權(quán)限配置表'[用戶賬號] )
return if( t2, t1, BLANK() )
首頁 頁面控制 文本顏色 2000 = //邊框顏色 或 字體顏色
var t1 = SUMMARIZE( FILTER( '頁面配置表', '頁面配置表'[頁面編號] = 2000 ),'頁面配置表'[頁面標(biāo)題] )
var t2 = UserPrincipalName() in VALUES( '權(quán)限配置表'[用戶賬號] )
var t3 = if( t1 <> BLANK() && t2, "#1a1a1a", "#cccccc" )
return t3
可以實(shí)現(xiàn)有權(quán)限的高亮顯示,無權(quán)限的淺灰色顯示的效果抹剩。
-
6撑帖、獲取更多視覺對象,搜索Text吧兔。需要Power BI賬號才可以使用磷仰。
公告欄 =
"<br>"&
"1、成功祝賀Test公司上市境蔼,股票代碼 000000灶平,歡迎關(guān)注!"&
"<br>"&
"<br>"&
"2箍土、Test年銷售額突破100億逢享,連續(xù)5年增長超30%,成為行業(yè)新星吴藻,獲得獨(dú)角獸企業(yè)提名瞒爬;"&
"<br>"&
"<br>"&
"3、東北區(qū)連續(xù)3年出現(xiàn)下滑20%沟堡,建議重新評估市場前景侧但!"
- 7、使用矩陣航罗,在行標(biāo)題設(shè)置中禀横,關(guān)閉漸變布局,將頁面配置表[部門名稱]粥血、[頁面描述]放到矩陣的行中柏锄,并拓展到下一級顯示;
關(guān)閉漸變布局
將度量值[導(dǎo)航欄 保留]放到值中复亏,修改度量值展示名稱為“_”趾娃,縮小字段寬度至最小,達(dá)到隱藏的效果缔御。
特別注意:該步驟操作時(shí)抬闷,必須將本地電腦的用戶賬號放入Excel配置表中,否則將無權(quán)限查看任何數(shù)據(jù)刹淌。使用UserPrincipalName()饶氏,判斷當(dāng)前電腦本地用戶賬名讥耗,然后作為賬號維護(hù)。
為了安全該處沒有對沒賬號的用戶賦予所有權(quán)限疹启,而是必須維護(hù)本地賬號才可以查看古程。
導(dǎo)航欄 保留 = //用于篩選出符合當(dāng)前用戶權(quán)限的頁面,需要提前將本地電腦的用戶賬號添加到Excel配置表中喊崖,使用函數(shù)UserPrincipalName()挣磨,計(jì)算出當(dāng)前電腦的賬戶。
COUNT( '頁面配置表'[自然序號] )
這里講下為何要增加這樣一個(gè)操作荤懂,權(quán)限配置表中的權(quán)限是通過TREATAS函數(shù)與其他維度表掛在一起茁裙,其中頁面控制部分也是一樣,因?yàn)閇部門名稱]节仿、[頁面描述]都是在行上晤锥,本身無交互,只有當(dāng)前用戶頁面權(quán)限和與頁面相關(guān)的度量值交互時(shí)廊宪,才能產(chǎn)生篩選效果矾瘾。
舉例說明,比如使用地區(qū)做權(quán)限控制箭启,如果只放地區(qū)到矩陣壕翩,則無法直接產(chǎn)生只有當(dāng)前用戶有權(quán)限的地區(qū)分類,若增加一個(gè)銷售件數(shù)產(chǎn)生交互傅寡,則可以達(dá)到篩選的效果放妈。
這個(gè)原因是因?yàn)橛?jì)算組只能對度量值起作用,無法對表進(jìn)行篩選荐操。
- 8芜抒、第7個(gè)部分和第8個(gè)部分是搭配使用,首先選擇矩陣中的一行托启,當(dāng)行唯一時(shí)挽绩,第8部分的按鈕得到唯一的導(dǎo)航目標(biāo),并且顏色變?yōu)榫G色驾中,點(diǎn)擊可以實(shí)現(xiàn)跳轉(zhuǎn)效果。
導(dǎo)航欄 文本 = //顯示文本
var t1 = SELECTEDVALUE( '頁面配置表'[頁面標(biāo)題] )
return if( ISBLANK( t1 ), "?? 請選擇一個(gè)頁面", "?? 點(diǎn)擊進(jìn)入" )
導(dǎo)航欄 顯示 = //懸停提示
SELECTEDVALUE( '頁面配置表'[頁面描述] )
導(dǎo)航欄 目標(biāo) = //導(dǎo)航目標(biāo)頁名稱
var t1 = SELECTEDVALUE( '頁面配置表'[頁面標(biāo)題] )
var t2 = UserPrincipalName() in VALUES( '權(quán)限配置表'[用戶賬號] )
return if( ISBLANK( t1 ) || ISBLANK( t2 ), "", t1)
導(dǎo)航欄 顏色 = //符合選擇條件和不符合選擇條件的顏色調(diào)整模聋,不唯一為紅色肩民,唯一為綠色。
var t1 = [導(dǎo)航欄 目標(biāo)]
return if( ISBLANK( t1 ) || COUNTROWS( VALUES( '頁面配置表'[頁面描述] ) ) <> 1, "#FD625E", "#01B8AA" )
創(chuàng)建報(bào)表頁
以上已經(jīng)完成權(quán)限控制的部署链方,剩下的就是完成頁面的調(diào)整持痰。
- 新建一個(gè)空白頁,隱藏該頁祟蚀,插入空白按鈕配置報(bào)表標(biāo)題工窍,并制作返回按鈕割卖,返回按鈕的目標(biāo)頁和懸停提示使用度量值。
單擊報(bào)表頁面空白處患雏,將頁面配置表[報(bào)表標(biāo)題]鹏溯,放入可視化-保留所有篩選器,篩選該頁需要顯示的標(biāo)題淹仑。
然后丙挽,添加AOP設(shè)置.權(quán)限,選擇設(shè)置權(quán)限控制+頁面控制匀借,加入篩選后颜阐,選擇啟用。
導(dǎo)航欄 報(bào)表標(biāo)題 = SELECTEDVALUE( '頁面配置表'[報(bào)表標(biāo)題] )
導(dǎo)航頁 返回提示 = "點(diǎn)擊返回導(dǎo)航頁"
導(dǎo)航頁 返回目標(biāo) = "導(dǎo)航頁"
復(fù)制該頁吓肋,并對頁面重命名為頁面配置表[頁面標(biāo)題]字段包含的報(bào)表頁名稱凳怨,同時(shí)篩選該頁對應(yīng)的[報(bào)表標(biāo)題]。
后續(xù)有新增頁面直接復(fù)制原來的報(bào)表是鬼,然后做相應(yīng)的調(diào)整肤舞。
這樣一個(gè)成熟簡單的Power BI方案就部署完成了。
配置表的使用
權(quán)限配置表屑咳,是在Excel中配置萨赁,可以直接加載Excel文件到Power BI模型,如果是報(bào)表服務(wù)器部署方案兆龙,建議是放到服務(wù)器上修改杖爽,或者也可以將權(quán)限配置表導(dǎo)入到數(shù)據(jù)庫。
后記
歷時(shí)兩周紫皇,終于寫完了慰安,期間搭建模型花費(fèi)了一周的時(shí)間,各種調(diào)試聪铺,寫文章實(shí)在是太浪費(fèi)時(shí)間了化焕,尤其是這種文章,整體框架又大铃剔,不太容易寫清楚撒桨,換了好幾個(gè)方案,最終才定的這個(gè)键兜。
這個(gè)方案解決的是在Power BI當(dāng)中的權(quán)限控制凤类,至于員工入職或離職新增的賬號如何自動(dòng)同步讓Power BI加載,這又是另一個(gè)話題了普气,如果有機(jī)會谜疤,我會繼續(xù)寫這部分的內(nèi)容。
原來是打算寫的非常詳細(xì)照顧一下初學(xué)者,但是有些知識如果無限拓展夷磕,可能會造成文章主題重點(diǎn)不突出履肃,因此部分Power BI基本知識就一概而過了,如果很多內(nèi)容還看不懂坐桩,可能還需要補(bǔ)充一些其他的知識尺棋。
- Excel中什么是“表”
- Power Query高級編輯器的使用
- Power BI基本圖表的使用,比如切片器撕攒、矩陣
- 按鈕的功能陡鹃,熟悉按鈕的特性及如何配合使用度量值
- 什么是Power BI計(jì)算組
- 會使用Tabular Editor操作Power BI
- 能理解TREATAS的用法
- 掌握Power BI基本操作
寫之前特意找佐羅老師咨詢了下,因?yàn)樯婕暗绞召M(fèi)課程中的內(nèi)容抖坪,得到佐羅老師允許后萍鲸,才有了現(xiàn)在這篇文章,在此非常感謝佐羅老師擦俐。
個(gè)人水平有限脊阴,文章也有很多不足之處,忘不惜賜教蚯瞧。
參考資料來源: