工作表中的 LOOKUPVALUE 函数?
LOOKUPVALUE function in worksheet?
在 Excel PowerPivot 中,我可以使用简单的 DAX 函数在数据库中使用 LOOKUPVALUE 搜索值,如下所示:
LOOKUPVALUE('data'[Value];'data'[Person#];2;'data'[TekstCode];"Z2";'data'[Time];"2014Q4")
这将 return 输出(字符串、数字或其他)匹配一个人#、一个代码列和一个时间 - 在这种情况下将是 Lol
,table 下面:
TABLE: data
Person# TekstCode Time Value
1 Z1 2014Q4 Hi
1 Z2 2014Q4 Bye
2 Z1 2014Q4 3
2 Z2 2014Q4 Lol
3 Z1 2014Q4 45
3 Z2 2014Q4 twenty20
1 Z1 2015 Hi2
1 Z2 2015 Bye3
2 Z1 2015 44
2 Z2 2015 Lal
3 Z1 2015 45
3 Z2 2015 thirty30
我非常想在 PowerPivot 环境(允许 DAX)之外使用此功能,只需将此公式放在常规工作表中,这样我就可以引用单元格作为 LOOKUPVALUE 的输入。
请注意,使用 CUBEVALUE 函数(可在常规工作表中使用)不是一种选择 - 它不能 return 字符串。此外,让 PowerPivot 创建数据透视表也不是办法,因为 table 包含近 1 亿条记录,即使可以创建这样大小的 table,速度仍然是个问题。
我喜欢 CUBEVALUE 从庞大的数据库中提取单个元素的速度,并想使用 LOOKUPVALUE 之类的东西从数据库中快速提取元素。通过在一列中输入三个值(我输入一个人#、一个 TekstCode、一个时间 - 在工作表中我可以将其放入一些单元格并在公式中引用,因此很容易推导出公式)函数吐出匹配的文本字符串。
A B C D
1 1 z2 2015 =LOOKUPVALUE('data'[Value];'data'[Person#];A1;'data'[TekstCode];B1;'data'[Time];C1)
2 3 z1 2014Q4 =LOOKUPVALUE('data'[Value];'data'[Person#];A2;'data'[TekstCode];B2;'data'[Time];C2)
--->
A B C D
1 1 z2 2015 Bye3
2 3 z1 2014Q4 45
如何在普通工作表(a.k.a。在 DAX 环境之外)中使用此功能?
如果您有一个类似于 table 的结构并且想要应用多个条件然后根据条件检索一个值,您可以使用 SUMPRODUCT() 来查找行和 INDEX() 以获取值。例如,要获取中号黑色猫的 名称:
在度量中使用 LOOKUPVALUE(),搜索值由适当列上的过滤器控制。下面是一个简单的例子。
LookupMeasure:=
IF(
HASONEVALUE( Data[Person#] )
&& HASONEVALUE( Data[TekstCode] )
&& HASONEVALUE( Data[Time] )
,LOOKUPVALUE(
Data[Value]
,Data[Person#]
,VALUES( Data[Person#] )
,Data[TekstCode]
,VALUES( Data[TekstCode] )
,Data[Time]
,VALUES( Data[Time] )
)
,BLANK()
)
根据连接到数据透视表的查找字段,您需要三个切片器或三个过滤器 table。该数据透视表 table 不应有行或列标签,并且其值部分应包含 [LookupMeasure]。
我们用 IF() 测试每个过滤器是否只有一个唯一值。如果为真,我们将根据这些选择评估 LOOKUPVALUE()。否则我们return空白。您可以将此枢轴 table 放置在您需要的任何位置,或在任何单元格中引用它的值。
您可以使用 CUBEMEMBER
函数而不是 CUBEVALUE
从 PowerPivot 中的列中提取值。你只需要弄清楚 MDX 语法(对我个人来说,这并不容易)。
看起来像这样:
=CUBEMEMBER("ThisWorkbookDataModel","[data].[Person#].&[2]*{[data].[TekstCode].&[z2]*{[data].[Time].&[2014Q4]*[data].[Value].[Value]}}")
然后您可以添加工作簿中的单元格引用,使其像这样动态化:
=CUBEMEMBER("ThisWorkbookDataModel","[data].[Person#].&["&A1&"]*{[data].[TekstCode].&["&B1"&]*{[data].[Time].&["&C1&"]*[data].[Value].[Value]}}")
在 Excel PowerPivot 中,我可以使用简单的 DAX 函数在数据库中使用 LOOKUPVALUE 搜索值,如下所示:
LOOKUPVALUE('data'[Value];'data'[Person#];2;'data'[TekstCode];"Z2";'data'[Time];"2014Q4")
这将 return 输出(字符串、数字或其他)匹配一个人#、一个代码列和一个时间 - 在这种情况下将是 Lol
,table 下面:
TABLE: data
Person# TekstCode Time Value
1 Z1 2014Q4 Hi
1 Z2 2014Q4 Bye
2 Z1 2014Q4 3
2 Z2 2014Q4 Lol
3 Z1 2014Q4 45
3 Z2 2014Q4 twenty20
1 Z1 2015 Hi2
1 Z2 2015 Bye3
2 Z1 2015 44
2 Z2 2015 Lal
3 Z1 2015 45
3 Z2 2015 thirty30
我非常想在 PowerPivot 环境(允许 DAX)之外使用此功能,只需将此公式放在常规工作表中,这样我就可以引用单元格作为 LOOKUPVALUE 的输入。
请注意,使用 CUBEVALUE 函数(可在常规工作表中使用)不是一种选择 - 它不能 return 字符串。此外,让 PowerPivot 创建数据透视表也不是办法,因为 table 包含近 1 亿条记录,即使可以创建这样大小的 table,速度仍然是个问题。
我喜欢 CUBEVALUE 从庞大的数据库中提取单个元素的速度,并想使用 LOOKUPVALUE 之类的东西从数据库中快速提取元素。通过在一列中输入三个值(我输入一个人#、一个 TekstCode、一个时间 - 在工作表中我可以将其放入一些单元格并在公式中引用,因此很容易推导出公式)函数吐出匹配的文本字符串。
A B C D
1 1 z2 2015 =LOOKUPVALUE('data'[Value];'data'[Person#];A1;'data'[TekstCode];B1;'data'[Time];C1)
2 3 z1 2014Q4 =LOOKUPVALUE('data'[Value];'data'[Person#];A2;'data'[TekstCode];B2;'data'[Time];C2)
--->
A B C D
1 1 z2 2015 Bye3
2 3 z1 2014Q4 45
如何在普通工作表(a.k.a。在 DAX 环境之外)中使用此功能?
如果您有一个类似于 table 的结构并且想要应用多个条件然后根据条件检索一个值,您可以使用 SUMPRODUCT() 来查找行和 INDEX() 以获取值。例如,要获取中号黑色猫的 名称:
在度量中使用 LOOKUPVALUE(),搜索值由适当列上的过滤器控制。下面是一个简单的例子。
LookupMeasure:=
IF(
HASONEVALUE( Data[Person#] )
&& HASONEVALUE( Data[TekstCode] )
&& HASONEVALUE( Data[Time] )
,LOOKUPVALUE(
Data[Value]
,Data[Person#]
,VALUES( Data[Person#] )
,Data[TekstCode]
,VALUES( Data[TekstCode] )
,Data[Time]
,VALUES( Data[Time] )
)
,BLANK()
)
根据连接到数据透视表的查找字段,您需要三个切片器或三个过滤器 table。该数据透视表 table 不应有行或列标签,并且其值部分应包含 [LookupMeasure]。
我们用 IF() 测试每个过滤器是否只有一个唯一值。如果为真,我们将根据这些选择评估 LOOKUPVALUE()。否则我们return空白。您可以将此枢轴 table 放置在您需要的任何位置,或在任何单元格中引用它的值。
您可以使用 CUBEMEMBER
函数而不是 CUBEVALUE
从 PowerPivot 中的列中提取值。你只需要弄清楚 MDX 语法(对我个人来说,这并不容易)。
看起来像这样:
=CUBEMEMBER("ThisWorkbookDataModel","[data].[Person#].&[2]*{[data].[TekstCode].&[z2]*{[data].[Time].&[2014Q4]*[data].[Value].[Value]}}")
然后您可以添加工作簿中的单元格引用,使其像这样动态化:
=CUBEMEMBER("ThisWorkbookDataModel","[data].[Person#].&["&A1&"]*{[data].[TekstCode].&["&B1"&]*{[data].[Time].&["&C1&"]*[data].[Value].[Value]}}")