【问题标题】:Power BI: how to merge specific tablesPower BI:如何合并特定表
【发布时间】:2020-12-15 22:22:22
【问题描述】:

我有表 A,其中包含特定人员的数据,如下所示:

我有表 B,其中包含特定人群在不同时期的需求数据,如下所示:

我还有一个带有句号定义的附加表 C:

Period no  |  Date from | Date to
--------------------------------------
   1       | 27/01/2021 | 24/02/2021
   2       | 25/02/2021 | 24/03/2021
...

这里有两个问题:

  1. 表 A 中的某个人的开始日期和结束日期可以跨越多个时期,例如人类 B
  2. 开始日期和结束日期可能不包含整个期间,例如,它们可能只是几天。所以有一个算法可以计算这是否算作一个句点:
  • 如果少于 5 天,则不算数
  • 如果在 6 到 14 天之间,则为 0.5 天
  • 如果超过 14 天,则为 1 个期间

所以现在我想将表 A 与表 B 合并,以比较每个时期的需求和交付的内容。问题是如何处理这个? 我的第一个想法是在表 A 中添加 Period 和 Quantity 列,以便能够对其进行分组和合并——但是当这个部署可以跨越多个时期时呢?以及如何为周期实现这个条件逻辑?

【问题讨论】:

    标签: powerbi dax powerquery


    【解决方案1】:

    我认为这可行

    将期间定义作为表 1 引入

    使用公式添加自定义列

    = {Number.From([Date from])..Number.From([Date to])}
    

    然后将其扩展到行。这为您提供了每个日期到每个时期的匹配项

    文件..关闭并加载...连接

    该部分的完整示例代码是:

    let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Period no", Int64.Type}, {"Date from", type date}, {"Date to", type date}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each {Number.From([Date from])..Number.From([Date to])}),
    #"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "Custom"),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"Date from", "Date to"})
    in #"Removed Columns"
    

    拉入你的TableA,这里叫Table2

    添加具有类似公式的自定义列并扩展到行

    = {Number.From([Start of Deployment]) .. Number.From([End of Deployment])}
    

    现在将另一个表合并到这个表中并拉入句点

    单击选择类型和周期列并将它们分组,从新的自定义列中提取最大和最小日期

    使用公式添加工作持续时间的自定义列

    = 1+[DayMax]-[DayMin]
    

    然后添加一个自定义列来应用您的算法

    =  if [Duration]<6 then 0 else if [Duration] <15 then 0.5 else 1
    

    删除多余的列。完毕。文件...关闭并加载...连接

    您可以根据需要将其合并回您的表 B

    此表的完整代码

    let Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Type", type text}, {"Start of Deployment", type date}, {"End of Deployment", type date}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each {Number.From([Start of Deployment]) .. Number.From([End of Deployment])}),
    #"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "Custom"),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"Start of Deployment", "End of Deployment"}),
    #"Merged Queries" = Table.NestedJoin(#"Removed Columns",{"Custom"},Table1,{"Custom"},"Table1",JoinKind.LeftOuter),
    #"Expanded Table1" = Table.ExpandTableColumn(#"Merged Queries", "Table1", {"Period no"}, {"Period no"}),
    #"Grouped Rows" = Table.Group(#"Expanded Table1", {"Type", "Period no"}, {{"DayMin", each List.Min([Custom]), type number}, {"DayMax", each List.Max([Custom]), type number}}),
    #"Added Custom1" = Table.AddColumn(#"Grouped Rows", "Duration", each 1+[DayMax]-[DayMin]),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Algo", each if [Duration]<6 then 0 else if [Duration] <15 then 0.5 else 1),
    #"Removed Columns1" = Table.RemoveColumns(#"Added Custom2",{"DayMin", "DayMax", "Duration"})
    in #"Removed Columns1"
    

    【讨论】:

    • 这太好了,我只是有一个问题:我有多个定义人力资源的列:母国、东道国等。在这种情况下如何执行分组?
    • 编辑组步骤并在更多字段上分组
    • 顺序重要吗?
    • 在群里?不。只需在编辑该步骤时在组对话框顶部添加更多分组
    • 这行得通吗?如果是这样,如果你能接受答案会很好
    猜你喜欢
    • 2018-01-17
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2019-04-11
    • 1970-01-01
    • 2023-03-09
    • 2023-02-14
    相关资源
    最近更新 更多