工作表中的 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]}}")