在Excel PowerPivot中,我可以使用简单的DAX函数在LOOKUPVALUE中搜索数据库中的值,如下所示:
LOOKUPVALUE('data'[Value];'data'[Person#];2;'data'[TekstCode];"Z2";'data'[Time];"2014Q4")
这将返回与人#匹配的输出(字符串,数字或其他),代码列和时间 - 在这种情况下为Lol
,如下表所示:
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环境中使用此功能OUTSIDE(允许使用DAX),只需将此公式放在常规工作表中,这样我就可以引用单元格作为LOOKUPVALUE的输入。
请注意,使用CUBEVALUE函数(可以在常规工作表中使用)不是一个选项 - 它不能返回字符串。此外,让PowerPivot创建数据透视表是没有选择的,因为该表包含近1亿条记录,即使可以创建这样大小的表,速度仍然是个问题。
我喜欢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
如何在普通工作表(DAX环境之外的a.k.a.)中使用此功能?
答案 0 :(得分:0)
答案 1 :(得分:0)
在度量中使用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()
)
根据连接到数据透视表的查找字段,您需要三个切片器或三个过滤器。该数据透视表应该没有行标签或列标签,并且在其值部分中应该有[LookupMeasure]。
我们使用IF()测试每个过滤器是否只有一个唯一值。如果这是真的,我们会根据这些选择来评估LOOKUPVALUE()。否则我们返回空白。您可以将此数据透视表放置在任何需要的位置,或在任何单元格中引用其值。
答案 2 :(得分:0)
您可以使用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]}}")