sql - 如果选择的类别级别低于配置的级别,则显示最低级别
问题描述
我有下表
类别
Category Id | Name | Parent Id | Category Level
-------------------------------------------------------------
1 | Vehicle | Null | 1
2 | Car | 1 | 2
3 | Sedan | 2 | 3
4 | Computer | Null | 1
5 | Laptop | 4 | 2
6 | Gaming | 5 | 3
7 | Alienware | 6 | 4
类别的级别是根据类别层次结构确定的。
在类别表中,我们有 2 个主要类别车辆和计算机
如果我选择了第 4 级,那么我想要第 4 级的记录,如果该类别中没有第 4 级,那么我想要最低级别的记录。所以在输出中,我们将得到轿车(车辆中最低)和 Alienware(4 级)。
谁能建议我如何在 Power BI 中实现这一点。
解决方案
考虑最高级别:4,让您的表类别包含如下记录
现在使用下面的代码在Power Query 编辑器中创建一个新表Category_new -
let
Source = Category,
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Category Id", Int64.Type}, {"Name", type text}, {"Parent Id", Int64.Type}, {"Category Level", Int64.Type}}),
#"Reordered Columns" = Table.ReorderColumns(#"Changed Type",{"Category Level", "Category Id", "Name", "Parent Id"}),
#"Merged Queries" = Table.NestedJoin(#"Reordered Columns", {"Parent Id"}, #"Reordered Columns", {"Category Id"}, "Reordered Columns", JoinKind.LeftOuter),
#"Expanded Reordered Columns" = Table.ExpandTableColumn(#"Merged Queries", "Reordered Columns", {"Parent Id"}, {"Reordered Columns.Parent Id"}),
#"Renamed Columns" = Table.RenameColumns(#"Expanded Reordered Columns",{{"Reordered Columns.Parent Id", "Parent Id 2"}}),
#"Merged Queries1" = Table.NestedJoin(#"Renamed Columns", {"Parent Id 2"}, #"Renamed Columns", {"Category Id"}, "Renamed Columns", JoinKind.LeftOuter),
#"Expanded Renamed Columns" = Table.ExpandTableColumn(#"Merged Queries1", "Renamed Columns", {"Parent Id"}, {"Renamed Columns.Parent Id"}),
#"Renamed Columns1" = Table.RenameColumns(#"Expanded Renamed Columns",{{"Renamed Columns.Parent Id", "Parent Id 3"}}),
#"Merged Queries2" = Table.NestedJoin(#"Renamed Columns1", {"Parent Id 3"}, #"Renamed Columns1", {"Category Id"}, "Renamed Columns1", JoinKind.LeftOuter),
#"Expanded Renamed Columns1" = Table.ExpandTableColumn(#"Merged Queries2", "Renamed Columns1", {"Parent Id"}, {"Renamed Columns1.Parent Id"}),
#"Renamed Columns2" = Table.RenameColumns(#"Expanded Renamed Columns1",{{"Renamed Columns1.Parent Id", "Parent Id 4"}}),
#"Added Custom" = Table.AddColumn(#"Renamed Columns2", "Custom", each List.Min({[Category Id], [Parent Id], [Parent Id 2], [Parent Id 3], [Parent Id 4]})),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Custom.1", each List.Max({[Category Id], [Parent Id], [Parent Id 2], [Parent Id 3], [Parent Id 4]})),
#"Renamed Columns3" = Table.RenameColumns(#"Added Custom1",{{"Custom", "Root Category"}, {"Custom.1", "Max Level"}}),
#"Merged Queries3" = Table.NestedJoin(#"Renamed Columns3", {"Root Category"}, #"Renamed Columns3", {"Category Id"}, "Renamed Columns3", JoinKind.LeftOuter),
#"Expanded Renamed Columns3" = Table.ExpandTableColumn(#"Merged Queries3", "Renamed Columns3", {"Name"}, {"Renamed Columns3.Name"}),
#"Renamed Columns4" = Table.RenameColumns(#"Expanded Renamed Columns3",{{"Renamed Columns3.Name", "Root Category Name"}}),
#"Grouped Rows" = Table.Group(#"Renamed Columns4", {"Root Category Name"}, {{"max_level", each List.Max([Max Level]), type nullable number}}),
#"Merged Queries4" = Table.NestedJoin(#"Grouped Rows", {"max_level"}, Category, {"Category Id"}, "Category", JoinKind.LeftOuter),
#"Expanded Category" = Table.ExpandTableColumn(#"Merged Queries4", "Category", {"Name"}, {"Category.Name"}),
#"Renamed Columns5" = Table.RenameColumns(#"Expanded Category",{{"Category.Name", "lowest in category"}})
in
#"Renamed Columns5"
这是您的最终输出-
推荐阅读
- python - 使用 Pandas 合并两个 DataFrame
- processing - 生成一个模式并在偶数行的图像之间的奇数行上渲染每个图像,使用处理
- javascript - 在 css 中转换 translateY 而不实际移动元素
- c# - 如果windbg附加到挂钩全局鼠标事件的进程,鼠标滞后
- python - 当我使用我的 discord.py 机器人时,我不断收到这个 Heroku 错误。我使用的是 Heroku 的 github 存储库,而不是工具带
- python - 让 requests.get() 等到页面完全加载?
- python - Selenium Python:单击包含 JavaScript 的 onclick 元素
- node.js - 推送通知 - 模型不是构造函数
- r - 样本集 70 并从 7 列中选择 3 列作为子集
- javascript - 在 JavaScript 中,如何将 Date 对象(未来 10 分钟)保存到 localStorage