Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 在power query中将基于条件的多行合并为1_Powerbi_Powerquery - Fatal编程技术网

Powerbi 在power query中将基于条件的多行合并为1

Powerbi 在power query中将基于条件的多行合并为1,powerbi,powerquery,Powerbi,Powerquery,请您协助解决以下任务: F.e.我有数据集: 我需要什么-创建一个任务的描述,哪些折扣需要检查。但应采用以下格式: 同一品牌内具有相同折扣深度的SKU应合并为一行-检查SKU:奶油和油的品牌1的折扣10% 而其他人应保持相同的行,因为他们在品牌内有不同的折扣: 检查SKU清洁剂品牌2的20%折扣 检查SKU标签品牌2的15%折扣 有更多级别的数据,例如,任务应该在同一个出口内(如果有x>1个出口,任务将根据出口数量乘以x)。但我想,如果我能掌握如何完成上述任务的方法,那就更容易了 应该和前一个

请您协助解决以下任务:

  • F.e.我有数据集:
  • 我需要什么-创建一个任务的描述,哪些折扣需要检查。但应采用以下格式: 同一品牌内具有相同折扣深度的SKU应合并为一行-检查SKU:奶油和油的品牌1的折扣10%

    而其他人应保持相同的行,因为他们在品牌内有不同的折扣:

    检查SKU清洁剂品牌2的20%折扣 检查SKU标签品牌2的15%折扣

    有更多级别的数据,例如,任务应该在同一个出口内(如果有x>1个出口,任务将根据出口数量乘以x)。但我想,如果我能掌握如何完成上述任务的方法,那就更容易了

  • 应该和前一个很相似,但我可能错了
  • “监视和目录”列基本上描述了可以合并的行。因此,此表的输出应为2行:

  • 检查监视器上1-机油和2-凸耳的位置
  • 检查1-乳霜和2-洗涤剂在目录上的位置
  • 可以有多个聚合级别,即在带1的行的顶部,可以有带2的行-这意味着它们也应该合并到单独的任务中。0在所有情况下都表示-不接受

    我知道这可能有点过于复杂,但我希望在Power Query中加快这一过程,因为目前正在使用VBA分析每一行并查找匹配位置

    以下是输入数据的预期结果:

    一切都很简单。我只是消除品牌sku,并按任务分组。


    谢谢大家!

    这里是第一个-请注意,您在第一个中请求的格式(使用alt+enter将数据输入同一单元格中的单独行)在powerquery中不受支持,因此我用逗号分隔了数据

    说明

  • 添加列>添加索引列
  • 突出显示索引列>转换>透视>sku作为值>高级选项>不聚合
  • 高亮显示右侧的所有列>变换>合并列(如果需要分隔符,请选择分隔符,我选择逗号)
  • 转换>替换,,为,(可能需要执行几次)
  • 将品牌更改为文字,折扣为%
  • 添加列>自定义列公式=“检查折扣”&数字.ToText([折扣]*100)和“%for brand”&[brand]&“for SKU”&文本.Trim([合并],“,”)
  • 之前/之后

    M代码

    let
        Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Brand", Int64.Type}, {"SKU", type text}, {"Discount", type number}}),
        #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 1, 1),
        #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US")[Index]), "Index", "SKU"),
        #"Merged Columns" = Table.CombineColumns(#"Pivoted Column",{"1", "2", "3", "4", "5"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Merged"),
        #"Changed Type1" = Table.TransformColumnTypes(#"Merged Columns",{{"Brand", type text}, {"Discount", Percentage.Type}}),
        #"Added Custom" = Table.AddColumn(#"Changed Type1", "Custom", each "Check discount " & Number.ToText([Discount]*100) & "% for brand " & [Brand] & " for SKU " & Text.Trim([Merged],","))
    in
        #"Added Custom"
    
    let
        Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Brand", Int64.Type}, {"SKU", type text}, {"Monitor", Int64.Type}, {"Catalogue", Int64.Type}}),
        #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
        #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US")[Index]), "Index", "SKU"),
        #"Filtered Rows" = Table.SelectRows(#"Pivoted Column", each ([Monitor] = 1)),
        #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Monitor", "Catalogue"}),
        #"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Removed Columns", {{"Brand", type text}}, "en-US"),{"Brand", "0", "1", "2", "3"},Combiner.CombineTextByDelimiter("-", QuoteStyle.None),"Merged"),
        #"Transposed Table" = Table.Transpose(#"Merged Columns"),
        #"Merged Columns1" = Table.CombineColumns(#"Transposed Table",{"Column1", "Column2"},Combiner.CombineTextByDelimiter(", ", QuoteStyle.None),"Merged"),
        #"Replaced Value" = Table.ReplaceValue(#"Merged Columns1","--","-",Replacer.ReplaceText,{"Merged"}),
        #"Replaced Value1" = Table.ReplaceValue(#"Replaced Value","--","-",Replacer.ReplaceText,{"Merged"}),
        #"Added Custom" = Table.AddColumn(#"Replaced Value1", "Custom", each "Check place ment of " & Text.Trim([Merged]) & " on Monitor")
    in
        #"Added Custom"
    
    第二个示例说明

    注:对于这一种,很容易单独进行监视和分离。每次只需过滤一个不同的

  • 添加列>添加索引列
  • 突出显示索引列>转换>透视>sku作为值>高级选项>不聚合
  • 监视器的过滤器=1
  • 删除监视器和目录列
  • 合并其余列,使用-作为分隔符
  • 转置
  • 使用,作为分隔符合并列
  • 查找并替换--(可能需要执行几次)
  • 自定义列>使用公式=“检查放置位置”&Text.Trim([Merged])&“在监视器上”
  • 之前/之后的第二个示例

    第二个M代码示例

    let
        Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Brand", Int64.Type}, {"SKU", type text}, {"Discount", type number}}),
        #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 1, 1),
        #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US")[Index]), "Index", "SKU"),
        #"Merged Columns" = Table.CombineColumns(#"Pivoted Column",{"1", "2", "3", "4", "5"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Merged"),
        #"Changed Type1" = Table.TransformColumnTypes(#"Merged Columns",{{"Brand", type text}, {"Discount", Percentage.Type}}),
        #"Added Custom" = Table.AddColumn(#"Changed Type1", "Custom", each "Check discount " & Number.ToText([Discount]*100) & "% for brand " & [Brand] & " for SKU " & Text.Trim([Merged],","))
    in
        #"Added Custom"
    
    let
        Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Brand", Int64.Type}, {"SKU", type text}, {"Monitor", Int64.Type}, {"Catalogue", Int64.Type}}),
        #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
        #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US")[Index]), "Index", "SKU"),
        #"Filtered Rows" = Table.SelectRows(#"Pivoted Column", each ([Monitor] = 1)),
        #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Monitor", "Catalogue"}),
        #"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Removed Columns", {{"Brand", type text}}, "en-US"),{"Brand", "0", "1", "2", "3"},Combiner.CombineTextByDelimiter("-", QuoteStyle.None),"Merged"),
        #"Transposed Table" = Table.Transpose(#"Merged Columns"),
        #"Merged Columns1" = Table.CombineColumns(#"Transposed Table",{"Column1", "Column2"},Combiner.CombineTextByDelimiter(", ", QuoteStyle.None),"Merged"),
        #"Replaced Value" = Table.ReplaceValue(#"Merged Columns1","--","-",Replacer.ReplaceText,{"Merged"}),
        #"Replaced Value1" = Table.ReplaceValue(#"Replaced Value","--","-",Replacer.ReplaceText,{"Merged"}),
        #"Added Custom" = Table.AddColumn(#"Replaced Value1", "Custom", each "Check place ment of " & Text.Trim([Merged]) & " on Monitor")
    in
        #"Added Custom"
    

    希望这能让您开始了解如何将PQ应用于您的数据!如果数据集不同,您可能需要稍微调整。

    这里是第一个数据集-请注意,powerquery不支持您在第一个数据集中请求的格式(使用alt+enter将数据输入同一单元格中的单独行),因此我用逗号分隔了数据

    说明

  • 添加列>添加索引列
  • 突出显示索引列>转换>透视>sku作为值>高级选项>不聚合
  • 高亮显示右侧的所有列>变换>合并列(如果需要分隔符,请选择分隔符,我选择逗号)
  • 转换>替换,,为,(可能需要执行几次)
  • 将品牌更改为文字,折扣为%
  • 添加列>自定义列公式=“检查折扣”&数字.ToText([折扣]*100)和“%for brand”&[brand]&“for SKU”&文本.Trim([合并],“,”)
  • 之前/之后

    M代码

    let
        Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Brand", Int64.Type}, {"SKU", type text}, {"Discount", type number}}),
        #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 1, 1),
        #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US")[Index]), "Index", "SKU"),
        #"Merged Columns" = Table.CombineColumns(#"Pivoted Column",{"1", "2", "3", "4", "5"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Merged"),
        #"Changed Type1" = Table.TransformColumnTypes(#"Merged Columns",{{"Brand", type text}, {"Discount", Percentage.Type}}),
        #"Added Custom" = Table.AddColumn(#"Changed Type1", "Custom", each "Check discount " & Number.ToText([Discount]*100) & "% for brand " & [Brand] & " for SKU " & Text.Trim([Merged],","))
    in
        #"Added Custom"
    
    let
        Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Brand", Int64.Type}, {"SKU", type text}, {"Monitor", Int64.Type}, {"Catalogue", Int64.Type}}),
        #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
        #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US")[Index]), "Index", "SKU"),
        #"Filtered Rows" = Table.SelectRows(#"Pivoted Column", each ([Monitor] = 1)),
        #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Monitor", "Catalogue"}),
        #"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Removed Columns", {{"Brand", type text}}, "en-US"),{"Brand", "0", "1", "2", "3"},Combiner.CombineTextByDelimiter("-", QuoteStyle.None),"Merged"),
        #"Transposed Table" = Table.Transpose(#"Merged Columns"),
        #"Merged Columns1" = Table.CombineColumns(#"Transposed Table",{"Column1", "Column2"},Combiner.CombineTextByDelimiter(", ", QuoteStyle.None),"Merged"),
        #"Replaced Value" = Table.ReplaceValue(#"Merged Columns1","--","-",Replacer.ReplaceText,{"Merged"}),
        #"Replaced Value1" = Table.ReplaceValue(#"Replaced Value","--","-",Replacer.ReplaceText,{"Merged"}),
        #"Added Custom" = Table.AddColumn(#"Replaced Value1", "Custom", each "Check place ment of " & Text.Trim([Merged]) & " on Monitor")
    in
        #"Added Custom"
    
    第二个示例说明

    注:对于这一种,很容易单独进行监视和分离。每次只需过滤一个不同的

  • 添加列>添加索引列
  • 突出显示索引列>转换>透视>sku作为值>高级选项>不聚合
  • 监视器的过滤器=1
  • 删除监视器和目录列
  • 合并其余列,使用-作为分隔符
  • 转置
  • 使用,作为分隔符合并列
  • 查找并替换--(可能需要执行几次)
  • 自定义列>使用公式=“检查放置位置”&Text.Trim([Merged])&“在监视器上”
  • 之前/之后的第二个示例

    第二个M代码示例

    let
        Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Brand", Int64.Type}, {"SKU", type text}, {"Discount", type number}}),
        #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 1, 1),
        #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US")[Index]), "Index", "SKU"),
        #"Merged Columns" = Table.CombineColumns(#"Pivoted Column",{"1", "2", "3", "4", "5"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Merged"),
        #"Changed Type1" = Table.TransformColumnTypes(#"Merged Columns",{{"Brand", type text}, {"Discount", Percentage.Type}}),
        #"Added Custom" = Table.AddColumn(#"Changed Type1", "Custom", each "Check discount " & Number.ToText([Discount]*100) & "% for brand " & [Brand] & " for SKU " & Text.Trim([Merged],","))
    in
        #"Added Custom"
    
    let
        Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Brand", Int64.Type}, {"SKU", type text}, {"Monitor", Int64.Type}, {"Catalogue", Int64.Type}}),
        #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
        #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US")[Index]), "Index", "SKU"),
        #"Filtered Rows" = Table.SelectRows(#"Pivoted Column", each ([Monitor] = 1)),
        #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Monitor", "Catalogue"}),
        #"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Removed Columns", {{"Brand", type text}}, "en-US"),{"Brand", "0", "1", "2", "3"},Combiner.CombineTextByDelimiter("-", QuoteStyle.None),"Merged"),
        #"Transposed Table" = Table.Transpose(#"Merged Columns"),
        #"Merged Columns1" = Table.CombineColumns(#"Transposed Table",{"Column1", "Column2"},Combiner.CombineTextByDelimiter(", ", QuoteStyle.None),"Merged"),
        #"Replaced Value" = Table.ReplaceValue(#"Merged Columns1","--","-",Replacer.ReplaceText,{"Merged"}),
        #"Replaced Value1" = Table.ReplaceValue(#"Replaced Value","--","-",Replacer.ReplaceText,{"Merged"}),
        #"Added Custom" = Table.AddColumn(#"Replaced Value1", "Custom", each "Check place ment of " & Text.Trim([Merged]) & " on Monitor")
    in
        #"Added Custom"
    

    希望这能让您开始了解如何将PQ应用于您的数据!如果数据集不同,您可能需要稍微调整。

    谢谢您的建议,Hooded 0ne。给了我正确的方向。 我只做了第一部分,下面是我做的一些调整:

  • 将$添加到SKU以查找稍后将替换为“,”的位置-现在我可以在第一步中通过替换“;”清除合并中的分隔符,将“$”替换为“,”和文本。结束或修剪行中的第一个“,”
  • 在“轴列”之后的步骤中添加了选择列。有动态列列表,所以我不能像你那样硬编码“1,2,3,4,5”
  • 以下是我的p1最终代码:

        #"Add $" = Table.AddColumn(#"Filtered Rows", "SKU_SYMBOL", each "$"&[ROI_LKA_BASE.SKU]),
        #"Add Index" = Table.AddIndexColumn(#"Add $", "Index", 0, 1, Int64.Type),
        #"Added Custom" = Table.AddColumn(#"Add Index", "TextIndex", each "TASK_"&Number.ToText([Index])),
        #"Removed Columns2" = Table.RemoveColumns(#"Added Custom",{"Index", "Shelf start", "Shelf End", "KAM", "Вид Инф. АУ", "Место размещ. АУ", "Адрес", "Attribute", "Value", "ROI_LKA_BASE.Мониторы", "ROI_LKA_BASE.Каталог", "ROI_LKA_BASE.Confirmed with customer", "ROI_LKA_BASE.Confirmed plan", "ROI_LKA_BASE.SKU"}),
        #"Pivoted Column" = Table.Pivot(#"Removed Columns2", List.Distinct(#"Removed Columns2"[TextIndex]), "TextIndex", "SKU_SYMBOL"),
        ColumnsToSelect = List.Select(Table.ColumnNames(#"Pivoted Column"),each Text.Contains(_,"TASK")),
        #"Select Pivoted Columns" = Table.SelectColumns(#"Pivoted Column",ColumnsToSelect),
        #"Merged Columns" = Table.CombineColumns(#"Pivoted Column",Table.ColumnNames(#"Select Pivoted Columns"),Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"PIVOT_MERGED"),
        #"Replaced Value" = Table.ReplaceValue(#"Merged Columns",";","",Replacer.ReplaceText,{"PIVOT_MERGED"}),
        #"Replaced Value1" = Table.ReplaceValue(#"Replaced Value","$",",",Replacer.ReplaceText,{"PIVOT_MERGED"}),
        #"Added Custom1" = Table.AddColumn(#"Replaced Value1", "TASK", each "Проверить скидку на " & [ROI_LKA_BASE.Бренд] & ": "
    & Text.End([PIVOT_MERGED],Text.Length([PIVOT_MERGED])-1)),
        #"Grouped Rows" = Table.Group(#"Added Custom1", {"Promo ID", "promotool_code", "ROI_LKA_BASE.Начало акции", "ROI_LKA_BASE.Конец акции", "ROI_LKA_BASE.Chain code", "ROI_LKA_BASE.Описание промо", "ROI_LKA_BASE.Сеть", "TASK"}, {{"Count", each Table.RowCount(_), Int64.Type}}
    
    稍后将在第二部分返回我的解决方案。
    再次感谢Hooded 0ne,巨大的帮助。

    感谢您的建议,Hooded 0ne。给了我正确的di