工作表中的LOOKUPVALUE函数?

时间:2015-11-27 13:23:02

标签: excel powerpivot dax

在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.)中使用此功能?

3 个答案:

答案 0 :(得分:0)

如果您有类似表格的结构并希望应用多个条件,然后根据条件检索值,则可以使用 SUMPRODUCT()查找行和 INDEX ()获取值。例如,要获取中,黑,猫的名称

enter image description here

答案 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]}}")