設計者思維丨權(quán)限軸

應用背景

數(shù)據(jù)的本質(zhì)是為了業(yè)務服務谎僻,從而達到更高效的工作方式窒朋,實現(xiàn)數(shù)據(jù)對業(yè)務的賦能和推動作用。
因此在構(gòu)建報表時腋粥,需要開發(fā)者有設計思維晦雨,能夠考慮多種應用場景,幫助業(yè)務解決實際應用中的問題隘冲。
例如闹瞧,在實際業(yè)務場景中,管理層用戶習慣向下管理的方式对嚼,那么在查看報表時夹抗,能否也保留這種方式呢?

規(guī)則描述

  • 組織架構(gòu)分為多級纵竖,1級漠烧、2級、3級靡砌,數(shù)字越小已脓,級別越高

  • 上級用戶有權(quán)限查看下屬子部門數(shù)據(jù)

  • 各級用戶在查看報表時,默認展開下級部門通殃,例如1級部門用戶度液,則展示下屬所有2級部門,以此類推

  • 當用戶分管多個平級部門時画舌,則展示自身所在層級堕担,不進行展開

案例數(shù)據(jù)


圖1和圖2兩張事實表分別存儲Actual和Budget數(shù)據(jù)。

  • 預算和實際存在掛在父級部門不下放的情況曲聂,因此事實表存在1級2級3級部門混合在一列的情況

  • 除了預算和實際存在此情況外霹购,有時候項目也會存在這種情況

圖3是維度表,存儲部門數(shù)據(jù)朋腋。

  • 因為存在預算和實際不下放的情況齐疙,所以需要將本部門下落到子級膜楷,保證該部門的數(shù)據(jù)完整

  • 除了保證數(shù)據(jù)完整,還要保證數(shù)據(jù)可進行鉆取贞奋,父級部門既可以看到下屬子級部門的數(shù)據(jù)赌厅,也可以看到掛靠在本部門的數(shù)據(jù)

圖4是維度表,存儲Actual和Budget的類別數(shù)據(jù)轿塔。

級別 字段1 字段2 字段3
1 一級 一級 一級
1 一級 二級 二級
1 一級 二級 三級
2 一級 一級 一級
2 二級 二級 二級
2 二級 三級 三級
3 一級 一級 一級
3 二級 二級 二級
3 三級 三級 三級

圖5是多維的維度表特愿,本身是部門維度數(shù)據(jù)的變體。

  • 多維表結(jié)構(gòu)圖勾缭,是多維表的設計理念

  • 級別分為3級洽议,代表著部門的層級結(jié)構(gòu)

  • 從權(quán)限管理的角度來說,子級部門不可以看到歸屬上級部門的數(shù)據(jù)

  • 每個級別中漫拭,都有不屬于該級別的數(shù)據(jù),例如:2級部門中混稽,存在1級部門采驻,這個是為了保證測試時,每個級別的數(shù)據(jù)都是完整的匈勋,減少測試的工作量

圖6是配置表礼旅,存儲用戶的權(quán)限信息。

圖7是表模型洽洁,多維表和配置表不需要建立模型關(guān)系痘系。

構(gòu)建度量值

01.Actual = 
SUM ( 'Fact_Act'[實際] )
02.Budget =
SUM ( 'Fact_Bud'[預算] )
03.AnalysisActual =
VAR Analysis=
    VALUES ('Dim_Analysis'[L3])
VAR Result=
    CALCULATE ([01.Actual], FILTER ('Dim_Dept','Dim_Dept'[部門2] IN Analysis))
RETURN
    Result
04.AnalysisBudget =
VAR Analysis=
    VALUES ('Dim_Analysis'[L3])
VAR Result=
    CALCULATE ([02.Budget], FILTER ('Dim_Dept','Dim_Dept'[部門2] IN Analysis))
RETURN
    Result
05.AnalysisRate = 
DIVIDE ( [03.AnalysisActual], [04.AnalysisBudget] )

可視化結(jié)果

添加軸權(quán)限

06.DisplayLevel =
VAR Access =
    CALCULATE (
        MIN ( 'Config_Access'[ID_DepartmentLevel] ),
        'Config_Access'[LB_AdAccount] = USERNAME ()
    ) + 0
VAR AccessCount =
    COUNTROWS (
        CALCULATETABLE (
            VALUES ( 'Config_Access'[LB_Accessible] ),
            'Config_Access'[LB_AdAccount] = USERNAME (),
            'Config_Access'[ID_DepartmentLevel] = Access
        )
    )
VAR AccessLevel =
    IF ( AccessCount > 1 && Access <> 0, Access - 1, Access )
VAR Result =
    IF (
        AccessLevel <> 3,
        VALUE ( MIN ( 'Dim_Analysis'[LB_LEVEL] ) ) - AccessLevel,
        VALUE ( MIN ( 'Dim_Analysis'[LB_LEVEL] ) ) - 2
    )
RETURN
    Result

DAX解析

  • 變量Access是為了獲取當前用戶的最大權(quán)限,數(shù)字越小權(quán)限越大

  • 如果用戶有訪問此報表的權(quán)限饿自,但是權(quán)限表中沒有對應的權(quán)限數(shù)據(jù)汰翠,則該用戶為Admin權(quán)限,Access度量值需要進行補0操作

  • 變量AccessCount是為了獲取當前用戶的權(quán)限行數(shù)昭雌,因為存在一個用戶管理多個部門的情況

  • 變量AccessLevel是為了輸出參數(shù)复唤,實際場景中,如果用戶管理多個部門烛卧,全部展開下屬部門數(shù)據(jù)會變的特別多佛纫,因此不需要展開,僅需要展示同級即可

  • 變量Result是判斷用戶默認的查看層級总放,如果用戶非3級部門呈宇,那么管理多個部門看本級,管理一個部門看子級局雄,3級部門則看本級

結(jié)果

從結(jié)果上看甥啄,權(quán)限控制展示的維度是正確的,但是展示的數(shù)據(jù)不正確哎榴,A的達成率應該是16.67%型豁,C的達成率應該是2.33%僵蛛。

產(chǎn)生原因

  • 篩選器會將X軸的所有字段與列圖例里面的字段組合,重新構(gòu)建上下文

  • 篩選器構(gòu)建上下文的過程中迎变,度量值03參與了此過程充尉,導致一部分值被排除在外了

  • 類別維度表與部門維度表之間沒有直接關(guān)系,二者在一起有類似笛卡爾積的效果衣形,也對結(jié)果有影響

解決方案

度量值內(nèi)部權(quán)限判斷驼侠,不依賴于篩選器判斷

07.DisplayRate =
VAR Access=
    CALCULATE (
        MIN ('Config_Access'[ID_DepartmentLevel]),
'Config_Access'[LB_AdAccount]= USERNAME ()
)+0
VAR AccessCount=
    COUNTROWS (
        CALCULATETABLE (
            VALUES ('Config_Access'[LB_Accessible]),
'Config_Access'[LB_AdAccount]= USERNAME (),
'Config_Access'[ID_DepartmentLevel]=Access
)
)
VAR AccessLevel=
    IF (AccessCount>1&&Access<>0,Access-1,Access)
VAR Result=
    IF (
AccessLevel<>3,
        VALUE ( MIN ('Dim_Analysis'[LB_LEVEL]))-AccessLevel,
        VALUE ( MIN ('Dim_Analysis'[LB_LEVEL]))-2
)
RETURN
    IF (Result=1,[05.AnalysisRate], BLANK () )

結(jié)果如下:

度量值內(nèi)部屏蔽多余上下文干擾

08.AnalysisRateExcept =
CALCULATE (
    DIVIDE ( [03.AnalysisActual], [04.AnalysisBudget] ),
    ALLEXCEPT ( 'Dim_Analysis', 'Dim_Analysis'[L1] ),
    ALL ( 'Dim_Type'[類別] )
)

結(jié)果如下:

計算組封裝,屏蔽干擾因素

VAR Access =
    CALCULATE (
        MIN ('Config_Access'[ID_DepartmentLevel]),
'Config_Access'[LB_AdAccount]= USERNAME ()
)+0
VAR AccessCount=
    COUNTROWS (
        CALCULATETABLE (
            VALUES ('Config_Access'[LB_Accessible]),
'Config_Access'[LB_AdAccount]= USERNAME (),
'Config_Access'[ID_DepartmentLevel]=Access
)
)
VAR AccessLevel=
    IF (AccessCount>1&&Access<>0,Access-1,Access)
VAR Result=
    IF (
AccessLevel<>3,
        VALUE ( MIN ('Dim_Analysis'[LB_LEVEL]))-AccessLevel,
        VALUE ( MIN ('Dim_Analysis'[LB_LEVEL]))-2
)
RETURN
    IF (Result=1, SELECTEDMEASURE (), BLANK () )

結(jié)果如下:

補充

  • 若部門連接類別谆吴,類別連接事實表倒源,則不會存在此問題

  • 上述問題的誘因,也存在笛卡爾積的原因句狼,導致內(nèi)部計值流發(fā)生了變化

特別鳴謝夕楓大佬



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笋熬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腻菇,更是在濱河造成了極大的恐慌胳螟,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筹吐,死亡現(xiàn)場離奇詭異糖耸,居然都是意外死亡,警方通過查閱死者的電腦和手機丘薛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門嘉竟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洋侨,你說我怎么就攤上這事舍扰。” “怎么了希坚?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵妥粟,是天一觀的道長。 經(jīng)常有香客問我吏够,道長勾给,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任锅知,我火速辦了婚禮播急,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘售睹。我一直安慰自己桩警,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布昌妹。 她就那樣靜靜地躺著捶枢,像睡著了一般握截。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上烂叔,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天谨胞,我揣著相機與錄音,去河邊找鬼蒜鸡。 笑死胯努,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的逢防。 我是一名探鬼主播叶沛,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼忘朝!你這毒婦竟也來了灰署?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤局嘁,失蹤者是張志新(化名)和其女友劉穎氓侧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體导狡,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年偎痛,在試婚紗的時候發(fā)現(xiàn)自己被綠了旱捧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡踩麦,死狀恐怖枚赡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谓谦,我是刑警寧澤贫橙,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站反粥,受9級特大地震影響卢肃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜才顿,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一莫湘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧郑气,春花似錦幅垮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽示弓。三九已至,卻和暖如春呵萨,著一層夾襖步出監(jiān)牢的瞬間奏属,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓢湃。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓扔仓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親氯檐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容