Power BI作为全球最受欢迎的BI工具之一,其强大之处就是可以建立复杂计算和与用户互动的动态图/表格。这里,我简单介绍一下如何建立动态预算表。
假设你有一个项目报价表:
Medium_datasets/project.csv at main · checkming00/Medium_datasets · GitHub
但是客户的预算有限,不能全部完成。你的任务是建立一个动态的报告,展示在不同的预算金额下,什么项目可以被包含,什么项目不被包含。
我们一步一步来分解这个任务:
1. 数据准备
在Power BI中导入这个文件,可以看到它的建构:
它包含两列,一列为项目号码,另一列是项目的报价金额。首先我们要定义项目的优先级。假设客户想在有限的预算下,可以尽可能多地完成项目,那么报价越低的项目优先级就越高。
这样,先把报价列按从小到大排序:
然后添加一列序列号,这一列序列号就是金额的优先级序号:
把序列的列名改为“Project Rank”。到此,数据呈现如下:
然后应用到前台数据中。
2. 生成表格
按照需求,建立一个表格就可以清晰地呈现项目的包含状态。只要简单地使用“表格”图且把项目号码和报价放进去即可:
在图表中它长这样:
你可以按照自己的喜好去调整表格的格式、颜色等。这里我只把报价列改为金额格式,把列名改为Quote:
3. 建立DAX
现在你需要一个对话框可以让用户输入预算金额,在Modeling表单下,选择New parameter就可做到:
Power BI会弹窗一个对话框让你设置各种参数:
这里我设置如下:
- What will your variable adjust? : Numeric range
- Name: Funding Scenario
- Data type: Whole number
- Minimum: 0
- Maximum: 2300000
- Increment: 10000
- Default: 0
且保持下面的Add slicer to this page打勾,点击“Create”按钮。
然后你会看到一个可以输入的对话框出现在页面:
同样地,你可以按照自己的喜好去调整它的格式和式样。
请注意到,在右面表格栏,Power BI为了新增了一个表格,并包含两个DAX在内:
现在,你需要做的是建立一个DAX,可以根据用户输入的金额动态调整项目的包含/不包含状态。DAX如下:
Funding Scenario Inclusive =
VAR selected_rank = SELECTEDVALUE(project[Project Rank])
VAR quote = CALCULATE(
SUM(project[Quote]), ALLSELECTED(project), project[Project Rank] <= selected_rank
)
RETURN
IF(
HASONEVALUE(project[Project Rank]),
IF(
quote <= 'Funding Scenario'[Funding Scenario Value],
"Include",
"Not Include"
)
)
简单地解释一下:
变量selected_rank表示当前行的项目优先级数字。
变量quote表示把所有小于在当前行优先级数字的项目报价金额的汇总。其中ALLSELECTED是为了解除项目号码的筛选。
在最下面的公式中,HASONEVALUE是为了避免让内容出现Total地方。而当所有优先级数字小于当前行的项目报价金额汇总小于或等于用户输入的金额时,显示Include包含,否则显示Not Include不包含。
然后把这个DAX measure放到表格里:
此时,它显示所有项目不被包含。因为用户没有输入任何数字,当时设置默认为0。假设用户输入数字20000 (20万),它会成这样:
报价最低的四个项目金额汇总是37731 + 39343 + 39891 + 43525 = 160490 < 200000,所以他们被包含,下一个数字是46205,加在一起会大于20万,所以从下面开始所有项目不被包含。你可以尝试不同的数字来观看变化。
这篇文章向你简单地介绍了如何建立动态的预算计划,可以灵活地允许用户互动。如有需要,可以扩展成不同的项目优先级定义,让用户选择不同的优先级定义来查看不同的动态变化。
感谢观看。