请在文末下载附件
一、背景
在 Power BI 数据分析的道路上有一个闭环:明细数据(详细信息)=>数据清洗=>根据业务建立模型=>出具数据分析报告(可视化)=>洞见问题=>根据问题指标返回业务人员问题指标的明细数据=>推动改善,监控洞见。
很多时候在洞见问题后,业务人员一般情况下第一时间会说:"给我看看明细数据"。因为业务人员对自己的业务最为清晰,所以需要通过大指标发现问题后,再对明细数据消化找到问题所在,实现数据驱动业务的逻辑。
那么洞见问题后,数据分析人员如何快速的给到明细数据呢?
这就引出我们今天的话题,Power BI 显示详细信息(Show Details)。
二、效果展示
我先来看一个 Power BI 报告页面示例。
在图中,红色框选出来的指标是有问题的,我们想看到一个数据明细如何做到呢?
通过 Power BI Desktop 外部工具 Analyze in Excel
(下载地址:https://jiaopengzi.com/tools) 可以构建和矩阵相同的透视表,实现显示详细信息。
显示详细信息的操作过程。
如果拿到附件出现如下报错,是因为Power BI 每次启动的服务端口都是随机的。所以需要借助 DAX Studio 去拿到端口修改过来即可。
Excel中保存的 Analysis Server 的信息。
通过 DAX Studio 我们可以看到当前打开的 Power BI Desktop 文件的 Server 信息,点击复制替换上图中的信息。
以上都是在本地,数据分析人员通过 Power BI Desktop 去操作。
那么我们如何在业务人员不拿到 .pbix
文件的情况下,把这个能力开放给业务人员自己呢?
可以在 Power BI 在线服务中通过分发报告到对应的业务人员,通过导出
=>在 Excel 中分析
的功能实现。
当然还可以使用 Power BI Report Server 来实现。
三、模型设计
前面我们展示了最终效果,获取当前指标值按照报表开发定义规则在当前上下文的明细数据的模型如何设计的呢?
这里需要引入引入一个知识点:Detail Rows Expression
。
度量值本身有自己的表达式,也有明细行的表达式。对应的明细数据可以使用函数 DETAILROWS
获取。
一般情况下,简单的聚合函数写的度量值对应的明细数据就是聚合函数包裹的列对应的表。如果是复杂度量值,就不会显示明细数据。比如这里的 03_YOY%
。
为了能够很好的服务于业务人员,Detail Rows Expression 需要根据业务的需求提前设计好,如:01_销售金额
度量值的 Detail Rows Expression。
01_销售金额
度量值的 Expression
SUM ( 'T05_订单子表'[F_06_产品销售金额] ) / 1E6
01_销售金额
度量值的 Detail Rows Expression
VAR fenzi =
SELECTCOLUMNS (
'T05_订单子表',
"订单编号", RELATED ( 'T04_订单主表'[F_01_订单编号] ),
"大区]", RELATED ( 'D00_大区表'[F_02_大区] ),
"省份", RELATED ( 'D01_省份表'[F_05_省简称2] ),
"城市", RELATED ( 'D02_城市表'[F_03_城市] ),
"区县", RELATED ( 'D03_区县表'[F_03_区县] ),
"门店名称", RELATED ( 'T01_门店表'[F_02_门店名称] ),
"下单日期", RELATED ( 'T04_订单主表'[F_03_下单日期] ),
"客户名称", RELATED ( 'T02_客户表'[F_02_客户名称] ),
"客户性别", RELATED ( 'T02_客户表'[F_04_客户性别] ),
"客户行业", RELATED ( 'T02_客户表'[F_06_客户行业] ),
"客户职业", RELATED ( 'T02_客户表'[F_07_客户职业] ),
"产品分类", RELATED ( 'T00_产品表'[F_02_产品分类] ),
"产品名称", RELATED ( 'T00_产品表'[F_03_产品名称] ),
"产品销售价格", RELATED ( 'T00_产品表'[F_04_产品销售价格] ),
"折扣比例", 'T05_订单子表'[F_04_折扣比例],
"产品销售数量", 'T05_订单子表'[F_05_产品销售数量],
"产品销售金额", 'T05_订单子表'[F_06_产品销售金额],
"送货日期", RELATED ( 'T04_订单主表'[F_04_送货日期] )
)
RETURN
fenzi
02_销售金额_去年同期
度量值的 Expression
02_销售金额_去年同期 = CALCULATE ( [01_销售金额], DATEADD ( 'A00_Calendar'[C01_Dates], -1, YEAR ) )
02_销售金额_去年同期
度量值的 Detail Rows Expression
VAR fenmu =
CALCULATETABLE (
DETAILROWS ( [01_销售金额] ),
DATEADD ( 'A00_Calendar'[C01_Dates], -1, YEAR )
)
RETURN
fenmu
03_YOY%
度量值的 Expression
03_YOY% =
VAR fenzi = [01_销售金额]
VAR fenmu =
CALCULATE ( [01_销售金额], DATEADD ( 'A00_Calendar'[C01_Dates], -1, YEAR ) )
VAR _percent =
DIVIDE ( fenzi - fenmu, fenmu, BLANK () )
RETURN
_percent
03_YOY%
度量值的 Detail Rows Expression
VAR fenzi =
ADDCOLUMNS ( DETAILROWS ( [01_销售金额] ), "@分类", "分子" )
VAR fenmu =
ADDCOLUMNS ( DETAILROWS ( [02_销售金额_去年同期] ), "@分类", "分母" )
VAR detail =
UNION ( fenzi, fenmu )
RETURN
detail
四、总结
- 本地使用 Power BI Desktop 相对来说不需要账号免费可用,但这个能力是在分析人员手中,就看如何去平衡。
- 如果 Power BI 在线服务报告分发,需要有对应的账号以及相应的产品购买。
- Detail Rows Expression 的设计需要符合业务人员需求,比如案例中我们增加了分类:分子、分母的识别,让业务人员很方便快捷地锁定问题。
- Detail Rows Expression 也可以配合度量值的 Expression 输出一些文本引导,设计一些如 TOPN、新老客户、购买次数等特定场景的解决方案。
五、B站直播讲解:
时间:2023-04-25 晚 20:00
房间:https://live.bilibili.com/27083331
可长按识别二维码进入房间
by焦棚子
请点击【立即购买】或者【升级VIP】获得案例附件。
评论