BOSS:(愁眉苦脸)白茶呢?
同事:(推一推)醒醒,白茶,BOSS喊你!
白茶:(一脸懵)咋了,老板?
BOSS:(一脸嫌弃)白茶,有个需求,用户要求在同一个图表中,指标可以切换。
白茶:这个之前做过啊,就是动态指标啊!
BOSS:别急,还有,就是我们不同的用户,角色是不一样的,能不能让不同用户进来看到图表的坐标轴因人而异?
白茶:权限轴?
BOSS:是的!
白茶:OK,能搞!
BI报表在实际应用中,往往需要对报表权限进行配置,例如RLS权限、OLS权限、页面权限等等。
其实,除了这三种权限之外,还有一种特殊的权限需求。
一张BI报表,面对的用户有很多,而不同的用户角色是不一样的。很多时候,用户期望打开报表时,可以根据自己的角色,看到自己需要观测的维度。
那么在PowerBI中,如何去实现这样的需求呢?
先来看看本期的案例数据:
案例数据共计五张表。Date日期表,Product产品表,Store门店表,Access权限表,Sales销售事实表。
从Access权限表中可以看到,我们一共有三个用户,分别代表分店负责人、产品负责人、市场负责人,我们需要做到,根据用户的不同角色,自动适配对应的维度坐标轴。
将数据导入到PowerBI,模型关系如下图:
小伙伴们注意,Access这张表,不需要和其他表建立模型关系。
构建基础的度量值:
销售数量:
代码语言:txt复制A.销售数量 =
SUM ( Fact_Sales[Quantity] )
销售金额:
代码语言:txt复制B.销售金额 =
SUMX ( 'Fact_Sales', [Quantity] * RELATED ( Dim_Product[Price] ) )
构建指标切换的维度表:
添加动态切换度量值:
代码语言:txt复制C.KPI =
IF ( SELECTEDVALUE ( Dim_KPI[Sort] ) = 1, [A.销售数量], [B.销售金额] )
到这里,我们的准备工作就结束了,思考一下,下一步要如何达成权限轴的动态切换效果。
思考一下
1
2
3
......
权限动态轴需要完成两个条件:
1.需要有一张包含所有用户需求维度的表;
2.需要根据用户权限配置维度表的数据权限。
构建动态分析维度表:
新建一张表,输入如下代码:
代码语言:txt复制Dim_Analysis =
VAR Store =
SELECTCOLUMNS (
ADDCOLUMNS ( DISTINCT ( 'Dim_Store'[StoreName] ), "Analysis", "1" ),
"Analysis", [Analysis],
"Display", [StoreName]
)
VAR ProductName =
SELECTCOLUMNS (
ADDCOLUMNS ( DISTINCT ( 'Dim_Product'[ProductName] ), "Analysis", "2" ),
"Analysis", [Analysis],
"Display", [ProductName]
)
VAR City =
SELECTCOLUMNS (
ADDCOLUMNS ( DISTINCT ( 'Dim_Store'[City] ), "Analysis", "3" ),
"Analysis", [Analysis],
"Display", [City]
)
RETURN
UNION ( Store, ProductName, City )
结果如下:
这段代码,相当于把门店、产品、城市这三个维度强行组合生成一张新的表。
添加如下度量值:
代码语言:txt复制D.AnalysisKPI =
VAR Store =
TREATAS ( VALUES ( 'Dim_Analysis'[Display] ), 'Dim_Store'[StoreName] )
VAR ProductName =
TREATAS ( VALUES ( 'Dim_Analysis'[Display] ), 'Dim_Product'[ProductName] )
VAR City =
TREATAS ( VALUES ( 'Dim_Analysis'[Display] ), 'Dim_Store'[City] )
VAR Analysis =
SELECTEDVALUE ( 'Dim_Analysis'[Analysis] )
RETURN
SWITCH (
TRUE (),
Analysis = "1", CALCULATE ( [C.KPI], Store ),
Analysis = "2", CALCULATE ( [C.KPI], ProductName ),
Analysis = "3", CALCULATE ( [C.KPI], City ),
BLANK ()
)
效果如下:
白茶希望标题也可以根据用户的权限进行自动适配。
添加如下代码:
代码语言:txt复制E.Title =
VAR T1 =
IF ( SELECTEDVALUE ( Dim_KPI[Sort] ) = 1, "Sales Volume", "Revenue" )
VAR T2 =
SELECTEDVALUE ( Dim_Analysis[Analysis] )
VAR T3 =
SWITCH (
TRUE (),
T2 = "1", "Store",
T2 = "2", "Product",
T2 = "3", "City",
"BaiCha"
)
RETURN
T1 & " Analysis By " & T3
添加用户权限度量值:
度量值如下:
代码语言:txt复制F.Access =
VAR UserAccess =
CALCULATETABLE (
VALUES ( Dim_Access[行权限] ),
'Dim_Access'[邮箱] = USERPRINCIPALNAME ()
)
VAR Access =
SELECTEDVALUE ( Dim_Analysis[Analysis] ) IN UserAccess
RETURN
Access
在建模面板下,选择管理角色,输入角色“Access”,输入如下代码:
代码语言:txt复制[F.Access]=True()
结果如下:
美化一下报表,最终展示的效果如下图:
(BOSS:Nice!)
Demo文件在知识星球。
这里是白茶,一个PowerBI的初学者。