快速提示:如何从Power Query中的其他辽宁体育彩票中按另一列过滤一列

从Power Query中的不同辽宁体育彩票中按列过滤列

不久前,我拜访了一个客户,询问他们是否可以按Power BI中另一个辽宁体育彩票的列来过滤辽宁体育彩票数据。我当然可以。在这篇文章中,我解释了如何在Power Query中实现。关键是要知道如何引用辽宁体育彩票以及如何在Power Query中引用该辽宁体育彩票的列。当您有一个可从Power Query中每个受支持的数据源中获取的查找表,并且想要按查找辽宁体育彩票中的相关列过滤另一个辽宁体育彩票的结果时,这很有用。那样的话’会有一种动态过滤。因此,每当您刷新了模型(如果新记录已更改或添加到查找辽宁体育彩票的源中)时,表将在Power Query的过滤步骤中自动包括新值。

引用辽宁体育彩票

这很简单,您只需要使用辽宁体育彩票的名称。如果辽宁体育彩票名称包含特殊字符(例如空格),则需要用数字符号和双引号将其引起来,例如 #”QUERY_NAME”。因此,如果要引用另一个辽宁体育彩票,请在一个新的空白辽宁体育彩票中使用Power Query(M)脚本,如下所示:

 让 
    Source = Product
in
    Source

或类似的东西

 让 
    Source = #"Product Category"
in
    Source

引用列

引用列也很简单。当您引用一列时,您需要在前面提到引用辽宁体育彩票名称以及括号中的列名称。因此,格式将如下所示:”QUERY_NAME”[COLUMN_NAME]。结果是该特定列的值的列表。

 让 
    Source = #"Product Category"[Product Category 名称]
in
    Source
在Power Query中引用另一个辽宁体育彩票中的列

使用来自另一个辽宁体育彩票的引用列过滤辽宁体育彩票列

使用辽宁体育彩票编辑器UI过滤列非常简单。您只需要从下拉列表中选择所需的值即可’完成。但是在这种情况下,辽宁体育彩票将使用常量值进行过滤。因此,如果将来您的报告要求发生变化,’将需要重做过滤并刷新辽宁体育彩票。但是,我们的方案有些不同,我们希望通过另一列中的值来过滤一列。我刚才提到过,您可以轻松地从另一个表中引用一列。我还提到引用的结果将是值列表,对吗?因此,我们要做的是按值列表过滤列。 功率辽宁体育彩票中有一个函数可以简化操作, List。包含(列表,值).

I’d宁愿用场景来说明其余内容。我有一个Product Subcategory表,其中包含所有产品子类别的描述性数据。该企业现在有一个报告要求,即我必须通过另一个表中的数据来过滤产品子类别名称。第二个表仅包含批准的子类别。第二个表名称是“产品子类别辽宁体育彩票”. The data 在 the “产品子类别辽宁体育彩票”由企业经常更新。

The only thing I need to do is to do is to use the 清单包含 function like below:

清单包含(#"产品子类别辽宁体育彩票"[Approved Subcategory], [Subcategory 名称])

如果你’重新使用辽宁体育彩票编辑器用户界面,则可以轻松将过滤器应用于[子类别名称],然后更改代码,如下所示:

强大的辽宁体育彩票,使用来自不同辽宁体育彩票的另一个列值过滤列

如果你’重新动手操作,并喜欢编写M代码,然后使用“高级编辑器”键入代码。

#"筛选行"= Table.SelectRows(#"前一步",每个 清单包含(#"REFERENCED_TABLE"[REFERENCED_COLUMN],[COLUMN_TO_BE_FILTERED]))

对于那些更熟悉SQL的人,上面的M代码的工作原理类似于下面的SQL脚本(如果您的来源是SQL Server):

SELECT productsubcategorykey          
       , productsubcategoryalternatekey 
       , [Subcategory 名称]
FROM   DimProductSubcategory
WHERE  [Subcategory 名称] IN (SELECT [Approved Subcategory] 
							  FROM [产品子类别辽宁体育彩票])

20 thoughts on “快速提示:如何从Power Query中的其他辽宁体育彩票中按另一列过滤一列

  1. 好时机。几天前这样做。
    1.做了一个‘Enter 数据 ’-table:车辆+转换为列表
    2.使用该列表过滤大型车辆表(按组装地点)–> Index table
    …each 清单包含(#”Chassi tbl”, [CHNO] )
    3.引用该表+转换为列表
    4.用来过滤非常大的BOM-Part表
    现在可以导入/联接两个表

    好,如果
    a)我们可以在用户界面中按列表/表格进行过滤,并且
    b)本机辽宁体育彩票’t be a long IN (…500 items)

  2. 谢谢你这可能非常有用。

    要使匹配的大小写不敏感,您可以添加“,Comparer.OrdinalIgnoreCase”在List.Contains语句的末尾。

    您还可以通过添加进行部分匹配“,(x作为文本,y作为文本)=>Text.Contains(y,x)))”
    (请参见克里斯·韦伯– //blog.crossjoin.co.uk/2017/01/22/the-list-m-functions-and-the-equationcriteria-argument/)

    要进行部分和不区分大小写的匹配,我必须将其更改为“=>Text.Contains(Text.Lower(y),Text.Lower(x))”

    是否可以过滤第二个表,以便仅显示已过滤的匹配项?

  3. 什么’至此,本网站上的内容是
    对于人们的体验来说真是太了不起了,很好,请保持良好的工作伙伴。

  4. 我遇到一种情况,我希望过滤表以仅包含星期一发生的条目(这意味着我将过滤日期表中的列)。所以我’m不会按日期表中的所有值进行过滤,而仅按其中一些进行过滤。我该怎么办?

    1. 嗨,MJ,

      欢迎来到BIInsight.com。
      听起来好像您不想按“日期”维度中的列值永久过滤表格,对吗?
      在这种情况下,您可能不想在Power Query层(在辽宁体育彩票编辑器中)而是在DAX中处理过滤。

      请注意,Power Query是数据准备层,因此过滤结果将永久加载到模型中。因此,如果要删除过滤器,则始终必须通过辽宁体育彩票编辑器进行管理。

      如果你 elaborate your scenario a bit more then I can provide better guidance.

      谢谢

  5. 你好

    谢谢您的发帖,非常有帮助!

    就我而言,我希望与您的情况完全相反,我想删除列表中的值而不是保留它们。

    那么有没有一种方法与Table.SelectRows相反呢?

    1. 嗨,马库斯,

      欢迎来到BIInsight.com。
      好吧,要包含不在列表中的值,您只需添加一个“not” before the “List.Contains” function.
      因此,代码如下所示:


      #”Filtered Rows”= Table.SelectRows(#”PREVIOUS_STEP”, 每 清单包含(#”REFERENCED_TABLE”[REFERENCED_COLUMN],[COLUMN_TO_BE_FILTERED]))

      干杯。

  6. Tnx for the Post- Really helpful but does 不 quite work for me.
    I have two tables with NO columns related (Join 不 possible)
    表A中的一列称为PARTNO,并且在每个ROW中都有很多用逗号分隔的部件号,例如

    零件编号
    802300-14,802300-14,NONPROCI,803753-02,
    D2727000700200,D2727000700600,A3410-2,

    表B(名为CMRoWIP)在名为Column的每一行中都有一个项目编号“Item No” e.g

    编号
    PPC1100-00
    A3410-2

    根据您的帖子,我在辽宁体育彩票表A中使用了以下内容
    #”Filtered Rows”= Table.SelectRows(#”Promoted Headers”, 每 清单包含(#”CMRoWIP”[商品编号],[PARTNO]))

    #”Filtered Rows”

    接受辽宁体育彩票没有错误,但结果为空白行。
    此外,它显示了大约2GB的数据已审查,而表CMROwip的文件小于500 KB。
    我想做的是以仅显示PartNO列包含的行的方式过滤表A“*Item no*”
    使用Excel但如果可以在MS Flow中完成,则可以
    什么 am I doing wrong?
    请协助

    1. 嗨,Navaid,

      欢迎来到BIInsight.com。
      看,您需要使用Text.Split函数将逗号分隔的文本拆分为值列表,然后使用List.ContainsAny函数而不是List.Contains。
      清单包含Any函数查找与另一个列表的值完全匹配的列表的任何值’re after.
      下面的代码应该可以正常工作:

      #"筛选行"= Table.SelectRows(#"Added Custom1",每个 清单包含Any(#"CMRoWIP"[Item No], Text.Split([PARTNO], ",")))

      #"筛选行"

      请让我知道它是如何工作的。
      干杯。

      1. 嗨索海尔
        Tnx的答复。我的主表约为1 MB,具有12000行。
        拆分会使它散布在200,000多行中。使用list.contains或(任何)表示辽宁体育彩票下载的数据超过3 GB,并且需要数小时才能完成。但是,该解决方案确实适用于较小的表。我试过了 http://www.girlswithpowertools.com/2018/06/search-text-using-list-of-keywords/ 似乎是一个更好的解决方案,尽管仍在测试中。

  7. 你好
    我需要过滤第一张表中的列表,以在第二张表/辽宁体育彩票中的同一列中包含大于最大值的值
    所以我正在使用

    来源= 电子表格 .CurrentWorkbook(){[名称=”MainEstateList”]}[Content],
    #”Changed Type”= Table.TransformColumnTypes(Source,{{“Code”, Int64.Type}, {“Name”, type text}}),
    #”Filtered Rows1″= Table.SelectRows(#”Changed Type”,每个([名称]为null)),
    #”MaxMain”= Table.SelectRows(#”Filtered Rows1″, 每 List.Max(#”MainList_Page1″[Code], [Code]))

    #”MaxMain”

    但是在最后一步,我得到以下信息,将源列和过滤器列都设置为Int64类型,因此可以’看不到我要去哪里错了。

    Expression.Error:我们无法将值67转换为逻辑类型。
    详细信息:值= 67类型= [类型]

  8. 感谢分享。我在这里学到了新技巧。

    I’我只是想知道是否有’如果我们使用合并辽宁体育彩票根据该列合并两个表,则有什么区别’d想过滤?这是我看到这篇文章之前过滤表格的方式。

    合并辽宁体育彩票可以很好地处理我的数据,其中两个表都包含数千行,最多可以在30秒内完成。另一方面,List.Contains技巧也可以,但是大约需要8-10分钟才能完成辽宁体育彩票。

    不知道我是否’我做错了什么但是’如果可以解决两种方法的约束条件以及它们之间的性能差异,则d很有用。

    再次感谢您的分享。我学会了一个新花样,并很喜欢它。

  9. 感谢您的帮助!但是由于某种原因’为我工作。我有2个辽宁体育彩票,在第一个辽宁体育彩票中,我在第二个辽宁体育彩票中只说了区域名称和区域代码列。’m尝试用第二个辽宁体育彩票中的区域名称替换第二个辽宁体育彩票中的区域代码。我按照您的指示进行操作,下面是代码行,它没有’t通过任何错误,但没有’t do anything. I’我不确定在这里我在做什么错。我想知道您是否可以在这里提出解决方案。谢谢!!
    = Table.ReplaceValue(#”删除其他列”,TestQuery1 [Region],TestQuery1 [Region 名称],Replacer.ReplaceValue,{“Region”})

    1. 嗨,戴安娜,

      欢迎来到BIInsight.com。
      这篇文章是关于按列不同表中的值过滤行。
      查看您的代码,您会丢失 之前referenced column and the referencing column. Your code structure should look like below:

      =Table.ReplaceValue(Source, 每 [A], 每 [C],Replacer.ReplaceText,{"B"})

      我建议你看看 这个帖子 这可能会帮助您实现所追求的目标。

      请让我们知道您如何处理您的情况。
      干杯。

有什么想法吗?在这里与我们分享:

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.