如何感性的理解 函数 in

很多人不太注重基础的"感性认识",讨论基础理论特别烦躁,基本逻辑不太明了,办事凭着经验,变化就不会太多
http://naotu.baidu.com/file/7902b917e10c4fe6b700a5cd4341c869?token=77f00744a7a88b5b

EVALUATE
{ "1", "2", "3" }
EVALUATE
{ 2017, 2018, 2019 }
EVALUATE
{ ( 1 ), ( 2 ), ( 3 ) }
EVALUATE
{ ( "01", 2017 ), ( "02", 2018 ), ( "03", 2019 ) }

这些是基础表的构建
file
下面是应用

EVALUATE
FILTER ( '销售流水', RELATED ( '商品信息'[主供应商编号] ) IN { "01", "02", "03" } )
EVALUATE
FILTER ( '销售流水', RELATED ( '日历'[年] ) IN { 2017, 2018, 2019 } )
EVALUATE
FILTER (
    '销售流水',
     ( RELATED ( '商品信息'[主供应商编号] ), RELATED ( '日历'[年] ) )
        IN { ( "01", 2017 ), ( "02", 2018 ), ( "03", 2019 ) }
)
EVALUATE
FILTER( 
    '销售流水',    
        CONTAINSROW({ ( "01", 2017 ), ( "02", 2018 ), ( "03",2019) },   RELATED('商品信息'[主供应商编号] ), RELATED( '日历'[年] ) )
)

没有基础的掌握,应用几乎不可能


下面对比讨论一下
CONTAINSROW (in)和 TREATAS

首先考虑多列的表达式

EVALUATE
CALCULATETABLE( 
    '销售流水',

        CONTAINSROW({ ( "01", 2017 ), ( "02", 2018 ), ( "03",2019) },   RELATED('商品信息'[主供应商编号] ), RELATED( '日历'[年] ) )
)

这个表达式错误,因为 CONTAINSROW多列表达式主要用于迭代行环境,relate没有行环境,二个错误

EVALUATE
CALCULATETABLE(
    '销售流水',

       CONTAINSROW({ ( "01", 2017 ), ( "02", 2018 ), ( "03",2019) }, '商品信息'[主供应商编号] , '日历'[年] ))  

筛选环境不能适应多行,和relate没有关系

EVALUATE
CALCULATETABLE( 
    '销售流水',

        TREATAS({ ( "01", 2017 ), ( "02", 2018 ), ( "03",2019) },   RELATED('商品信息'[主供应商编号] ), RELATED( '日历'[年] ) )
)

这个不能工作,筛选环境对了因为后面的列必须是物理列,不能是表达式,错在relate,没有行环境

EVALUATE
CALCULATETABLE(
    '销售流水',

       TREATAS({ ( "01", 2017 ), ( "02", 2018 ), ( "03",2019) },'销售流水'[main_supcust],'销售流水'[年份]))

这个可以工作,TREATAS这里是筛选参数,在筛选上下文环境工作

EVALUATE
CALCULATETABLE(
    '销售流水',

       TREATAS({ ( "01", 2017 ), ( "02", 2018 ), ( "03",2019) }, '商品信息'[主供应商编号] , '日历'[年] )) 

这个可以工作,环境筛选上下文,代表筛选器,

EVALUATE
FILTER(
    '销售流水',

       TREATAS({ ( "01", 2017 ), ( "02", 2018 ), ( "03",2019) }, '商品信息'[主供应商编号] , '日历'[年] )) 

这两个无法工作,就因为treatas不能在迭代环境中工作

EVALUATE
FILTER( 
    '销售流水',

        TREATAS({ ( "01", 2017 ), ( "02", 2018 ), ( "03",2019) },   RELATED('商品信息'[主供应商编号] ), RELATED( '日历'[年] ) ))

有二个错误,行环境错误,

EVALUATE
CALCULATETABLE( 
    '销售流水',
     ('商品信息'[主供应商编号], '日历'[年] ) 
        IN { ( "01", 2017 ), ( "02", 2018 ), ( "03", 2019 ) }
)

这个无法工作,多行必须用于迭代环境,所以报错



现在看看单行

EVALUATE
CALCULATETABLE(
    '销售流水',
     '商品信息'[主供应商编号] 
        IN { ( "01" ), ( "02"), ( "03") }
)

可以运行

EVALUATE
CALCULATETABLE(
    '销售流水',     
        CONTAINSROW({ ( "01" ), ( "02"), ( "03") },'商品信息'[主供应商编号] )
)

可以运行

EVALUATE
CALCULATETABLE(
    '销售流水',     
        TREATAS({ ( "01" ), ( "02"), ( "03") },'商品信息'[主供应商编号] )
)

可以运行
以上三行代码多可以工作

EVALUATE
FILTER(
    '销售流水',     
        TREATAS({ ( "01" ), ( "02"), ( "03") },'商品信息'[主供应商编号] )
)

不能运行,这个只能在筛选环境中工作了

这里的代表一个认识过程