【问题标题】:Split table into multiple tables based on 2 columns根据2列将表拆分为多个表
【发布时间】:2022-12-22 11:38:01
【问题描述】:

我正在使用 Power Query,我需要将主表拆分为多个表。是否可以根据 2 个值条件将一个表拆分为多个表?

我有下表,我需要根据产品和工作日创建多个表

预期的输出如下所示:

你知道我该怎么做吗?我每天有多种产品

【问题讨论】:

  • AFAIK,单个查询只能输出单个表。如果您想要多个表,则需要创建多个相关查询。

标签: split powerquery m


【解决方案1】:

如 cmets 中所述,一个 PowerQuery 查询不可能生成多个表。只能输出一张表。

因此,您需要将数据模块化。

从源表开始:

  • 姓名:tbl_SourceData
  • 代码:
    let
        Source = Table.FromRows(
            {
                {"ID0003", "7/18/2022", "Mon", 1, 523},
                {"ID0003", "7/16/2022", "Sat", 6, 235},
                {"ID001", "7/18/2022", "Mon", 1, 124},
                {"ID001", "7/4/2022", "Mon", 1, 125},
                {"ID001", "7/15/2022", "Fri", 5, 132},
                {"ID001", "7/1/2022", "Fri", 5, 124},
                {"ID001", "7/16/2022", "Sat", 6, 413},
                {"ID001", "7/17/2022", "Sun", 7, 124},
                {"ID002", "7/15/2022", "Fri", 5, 523},
                {"ID003", "7/15/2022", "Fri", 5, 324}
            },
            {"Product", "Date", "Weekdate", "#Weekdate", "Volume"}
        ),
        fix_Date = Table.TransformColumns(Source,{{"Date", each Date.From(_, "en-US"), type date}}),
        fix_Types = Table.TransformColumnTypes(fix_Date, {{"Product", type text}, {"Weekdate", type text}, {"Date", type date}, {"#Weekdate", Int64.Type}, {"Volume", Int64.Type}})
    in
        fix_Types
    
  • 数据: |产品 |日期 |周末 | #周末 |卷 | |---|---|---|---|---| | ID0003 | 2022 年 7 月 18 日 |星期一 | 1 | 523| | ID0003 | 2022 年 7 月 16 日 |星期六 | 6 | 235 | | ID001 | 2022 年 7 月 18 日 |星期一 | 1 | 124 | | ID001 | 2022 年 7 月 4 日 |星期一 | 1 | 125 | | ID001 | 2022 年 7 月 15 日 |星期五 | 5 | 132 | | ID001 | 2022 年 7 月 1 日 |星期五 | 5 | 124 | | ID001 | 2022 年 7 月 16 日 |星期六 | 6 | 413 | | ID001 | 2022 年 7 月 17 日 |太阳 | 7 | 124 | | ID002 | 2022 年 7 月 15 日 |星期五 | 5 | 523| | ID003 | 2022 年 7 月 15 日 |星期五 | 5 | 324 |

如果您检查 Productx#Weekdate 组合的数量,您会发现您需要构建 8 个不同的子查询:

  • 姓名:tbl_UniqueCombinations
  • 代码:
    let
        Source = tbl_SourceData,
        Select = Table.SelectColumns(Source,{"Product", "#Weekdate"}),
        Distinct = Table.Distinct(Select)
    in
        Distinct
    
  • 数据: |产品| #周末 | |---|---| | ID0003 | 1 | | ID0003 | 6 | | ID001 | 1 | | ID001 | 5 | | ID001 | 6 | | ID001 | 7 | | ID002 | 5 | | ID003 | 5 |

出于这个答案的目的,我不会一一列举。但是您至少可以看到您需要为它们中的每一个执行的过程。

  • 表 1:
    • 姓名:tbl_ID003_1
    • 代码:
      let
          Source = tbl_SourceData,
          Filter = Table.SelectRows(Source, each ([Product] = "ID001") and ([#"#Weekdate"] = 1))
      in
          Filter
      
    • 数据: |产品 |日期 |周末 | #周末 |卷 | |---|---|---|---|---| | ID001 | 2022 年 7 月 18 日 |星期一 | 1 | 124 | | ID001 | 2022 年 7 月 4 日 |星期一 | 1 | 125 |
  • 表 2:
    • 姓名:tbl_ID003_5
    • 代码:
      let
          Source = tbl_SourceData,
          Filter = Table.SelectRows(Source, each ([Product] = "ID001") and ([#"#Weekdate"] = 5))
      in
          Filter
      
    • 数据: |产品 |日期 |周末 | #周末 |卷 | |---|---|---|---|---| | ID001 | 2022 年 7 月 15 日 |星期五 | 5 | 132 | | ID001 | 2022 年 7 月 1 日 |星期五 | 5 | 124 |
  • 表 3:
    • 姓名:tbl_ID0003_1
    • 代码:
      let
          Source = tbl_SourceData,
          Filter = Table.SelectRows(Source, each ([Product] = "ID0003") and ([#"#Weekdate"] = 1))
      in
          Filter
      
    • 数据: |产品 |日期 |周末 | #周末 |卷 | |---|---|---|---|---| | ID0003 | 2022 年 7 月 18 日 |星期一 | 1 | 523|
  • 表 4:
    • 姓名:tbl_ID0003_6
    • 代码:
      let
          Source = tbl_SourceData,
          Filter = Table.SelectRows(Source, each ([Product] = "ID0003") and ([#"#Weekdate"] = 6))
      in
          Filter
      
    • 数据: |产品 |日期 |周末 | #周末 |卷 | |---|---|---|---|---| | ID0003 | 2022 年 7 月 16 日 |星期六 | 6 | 235 |

所以,最终,您最终会得到许多不同的表格供您使用:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-26
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多