Power BI数据建模:如何基于可用食材筛选可制作菜品
解决Power BI食材筛选菜品不符合预期的问题
需求与问题
需要基于菜品-食材表格创建食材筛选器,实现:
- 筛选「面粉」时,仅显示「苹果派」和「披萨」
- 筛选「番茄酱」时,显示「意面」和「披萨」
按以下建模后出现异常:选择「番茄酱」和「意大利面」时,本该仅显示「意面」,却同时显示了「披萨」。
初始表格
| Dish | Ingredients |
|---|---|
| 苹果派 | 苹果, 糖, 面粉, 鸡蛋 |
| 意面 | 意大利面, 番茄酱 |
| 披萨 | 面粉, 番茄酱, 奶酪 |
我创建的事实表(含错误)
| Dish | Ingredients |
|---|---|
| 苹果派 | 苹果 |
| 苹果派 | 糖 |
| 苹果派 | 面粉(原拼写为slour) |
| 苹果派 | 鸡蛋 |
| 意面 | 意大利面 |
| 意面 | 番茄酱 |
| 披萨 | 面粉 |
| 披萨 | 番茄酱 |
| 意面 | 奶酪 |
创建的维度表
| Ingredients |
|---|
| 苹果 |
| 糖 |
| 面粉 |
| 鸡蛋 |
| 意大利面 |
| 番茄酱 |
| 奶酪 |
问题根源
- 事实表存在数据错误:「意面」的食材中错误添加了「奶酪」,导致数据基准不准确
- 默认的表关联逻辑是返回包含任意选中食材的菜品,而非包含所有选中食材的菜品,这是筛选不符合预期的核心原因
解决方案
1. 修正事实表数据
删除错误的「意面-奶酪」记录,修正后的事实表如下:
| Dish | Ingredients |
|---|---|
| 苹果派 | 苹果 |
| 苹果派 | 糖 |
| 苹果派 | 面粉 |
| 苹果派 | 鸡蛋 |
| 意面 | 意大利面 |
| 意面 | 番茄酱 |
| 披萨 | 面粉 |
| 披萨 | 番茄酱 |
| 披萨 | 奶酪 |
2. 创建DAX度量值
在事实表中创建以下度量值,用于判断菜品是否包含所有选中的食材:
可制作菜品 = VAR 选中食材 = VALUES('维度表'[Ingredients]) VAR 菜品所需食材 = CALCULATETABLE(VALUES('事实表'[Ingredients]), ALLEXCEPT('事实表', '事实表'[Dish])) RETURN IF(COUNTROWS(EXCEPT(选中食材, 菜品所需食材)) = 0, 1, 0)
3. 配置视觉对象与筛选器
- 将「事实表」中的「Dish」字段添加到目标视觉对象(如表格、卡片)
- 为该视觉对象添加筛选器:选择上述「可制作菜品」度量值,设置为等于1
- 使用「维度表」中的「Ingredients」作为筛选器控件
完成以上设置后,筛选多个食材时,只会显示包含所有选中食材的菜品,符合预期需求。
内容的提问来源于stack exchange,提问作者ninelondon
相关产品推荐
相关产品推荐

