《power BI 视频7》六合一图表案例

本文介绍如何在Power BI中构建一个动态的柱状图,横坐标通过切片器切换年份、产品和城市,纵坐标切换销量或销售金额。使用笛卡尔积、SWITCH和SELECTEDVALUE函数实现数据筛选,并通过TREATAS函数根据选择的坐标轴筛选案例表内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例

我们想要建立一个柱状图,横坐标可以通过切片器切换,内容分别为 年份、产品、城市

纵坐标也可以通过切片器切换,内容分别为销量或者销售金额
在这里插入图片描述

而要完成这个功能,我们需要将横坐标单独做一个表,表的内容为笛卡尔积形式的。将 年份、产品和城市和他们三个包含的内容通过笛卡尔积的形式列出来。

纵坐标同理,需要将销售量和销售金额,以及具体的销售量和销售金额的度量值表示出来。

之后便可以通过SWITCH函数以及SELECTEDVALUE函数,将要筛选的内容通过柱形图表示出来。

我们分别建立三个 年份、产品、城市 的单行单列的表

ROW(“年份1”, “年份”)
ROW(“产品1”, “产品”)
ROW(“城市1”, “城市”)

然后将案例表中的年份、产品和城市通过VALUE函数筛选出一个不重复的单列表来

VALUES(‘案例’[年份])
VALUES(‘案例’[产品])
VALUES(‘案例’[城市])

然后使用笛卡尔积函数

年份 = CROSSJOIN( ROW(“年份”, “年份”), VALUES(‘案例’[年份]))
产品 = CROSSJOIN(ROW(“产品”, “产品”), VALUES(‘案例’[产品]))
城市 = CROSSJOIN(ROW(“城市”, “城市”), VALUES(‘案例’[城市]))

然后我们将这三个表通过UNION函数连接起来,生成一个新的表

表1 = UNION(‘年份’ , ‘产品’)
横坐标 = UNION(‘表1’ , ‘城市’)

即:

横坐标 = UNION(
				UNION(CROSSJOIN( ROW("年份1", "年份"), VALUES('案例'[年份])) ,
					CROSSJOIN(ROW("产品1", "产品"), VALUES('案例'[产品])
				),
			CROSSJOIN(ROW("城市1", "城市"), VALUES('案例'[城市]))
			)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210328144330240.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hhbl9weXRob24=,size_16,color_FFFFFF,t_70

手动更改一下表的名字。

同理,我们再来建一个纵坐标的表

ROW(“类别”,“总销量”)
ROW(“类别”,“总销售金额”)

纵坐标 = UNION(ROW(“类别”,“总销量”),ROW(“类别”,“总销售金额”))
在这里插入图片描述

而我们的柱状图的值为总销量、总销售金额两个度量值

总销量 = SUM(‘案例’[销量])
总销售金额 = SUM(‘案例’[销售金额])


现在我们准备好了横坐标、纵坐标和值
在这里插入图片描述
我们需要在使用切片器选择不同的横坐标和纵坐标的时候,表格的坐标内容和度量值能相应的变化,就需要我们判断所选的内容。

在这里插入图片描述
因为该图的表达涉及到坐标轴的选择,一个坐标轴在同一时间有且只能有一个选择,所以我们需要使用SELECTEDVALUE函数将切片器所选的坐标轴给返回。

因为需要判定所选的坐标轴为所有备选内容中的哪一个,所以需要用到SWITCH函数

因为用坐标轴表和案例表是没有产生联系的,所以如果想通过坐标轴来筛选案例表中的内容,需要使用TREATAS函数,用第一个参数筛选第二个参数。

因此,当想要显示金额的时候,因为切片器已经对横坐标的大类做好了选择,我们只需要筛选大类下的内容作为横坐标即可,在不同横坐标下需要显示的两个度量值表达式如下:

显示销量 = SWITCH(
SELECTEDVALUE(‘横坐标’[横坐标]),
“年份”, CALCULATE([总销量], TREATAS(VALUES(‘横坐标’[类别]), ‘案例’[年份])),
“产品”, CALCULATE([总销量], TREATAS(VALUES(‘横坐标’[类别]), ‘案例’[产品])),
“城市”, CALCULATE([总销量], TREATAS(VALUES(‘横坐标’[类别]), ‘案例’[城市])),
“”)

显示金额 = SWITCH(
SELECTEDVALUE(‘横坐标’[横坐标]),
“年份”, CALCULATE([总销售金额], TREATAS(VALUES(‘横坐标’[类别]), ‘案例’[年份])),
“产品”, CALCULATE([总销售金额], TREATAS(VALUES(‘横坐标’[类别]), ‘案例’[产品])),
“城市”, CALCULATE([总销售金额], TREATAS(VALUES(‘横坐标’[类别]), ‘案例’[城市])),
“”)

横坐标的切片器筛选做好了,同理可得纵坐标的筛选器表达式为:

纵坐标值 = SWITCH(
SELECTEDVALUE(‘纵坐标’[类别]),
“总销量”, [显示销量],
“总销售金额”, [显示金额]

)

类别拖到纵坐标中,纵坐标值拖到值中,即可显示

在这里插入图片描述


我们还可以将 后面三个度量值 显示销量、显示金额、纵坐标值 通过VAR来合并成一个度量值:

纵轴值 =
VAR salesvolume = SWITCH(
SELECTEDVALUE(‘横坐标’[横坐标]),
“年份”, CALCULATE([总销量], TREATAS(VALUES(‘横坐标’[类别]), ‘案例’[年份])),
“产品”, CALCULATE([总销量], TREATAS(VALUES(‘横坐标’[类别]), ‘案例’[产品])),
“城市”, CALCULATE([总销量], TREATAS(VALUES(‘横坐标’[类别]), ‘案例’[城市])),
“”)
VAR salesmount = SWITCH(
SELECTEDVALUE(‘横坐标’[横坐标]),
“年份”, CALCULATE([总销售金额], TREATAS(VALUES(‘横坐标’[类别]), ‘案例’[年份])),
“产品”, CALCULATE([总销售金额], TREATAS(VALUES(‘横坐标’[类别]), ‘案例’[产品])),
“城市”, CALCULATE([总销售金额], TREATAS(VALUES(‘横坐标’[类别]), ‘案例’[城市])),
“”)
return
SWITCH(
SELECTEDVALUE(‘纵坐标’[类别]),
“总销量”, salesvolume,
“总销售金额”, salesmount )


度量值还可以定义新的列

评价 =
VAR zongfen = ‘案例2’[数学学] + ‘案例2’[语文]
return
if(zongfen >= 160, “优秀”,“一般”)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值