【问题标题】:DAX DEFINE returns column not found errorDAX DEFINE 返回未找到列错误
【发布时间】:2020-07-04 08:59:39
【问题描述】:

这行得通:

EVALUATE
ADDCOLUMNS(
    FILTER (Sales, [StoreKey] = 155 ) ,
    "Margin", (Sales[SalesAmount] - Sales[TotalCost])
)

但是,如果我尝试定义一个函数,我会得到一个错误:

DEFINE VAR Margin = Sales[SalesAmount] - Sales[TotalCost]
EVALUATE
ADDCOLUMNS(
    FILTER (Sales, [StoreKey] = 155) ,
    "Margin", Margin
)

查询 (1, 21) 表 'Sales' 中列 'SalesAmount' 的单个值 无法确定。当度量公式引用时,可能会发生这种情况 包含许多值但未指定聚合的列 例如 min、max、count 或 sum 以获得单个结果。

这是什么错误以及如何解决?

【问题讨论】:

    标签: powerbi dax


    【解决方案1】:

    第二个代码有2个问题:

    1. 不见了Row Context
    2. VAR 不是函数,它是变量。 DAX 中的函数是度量

    什么是“行上下文”?简而言之,在 Power BI 中,数据存储在数据库中。当您引用数据库中的列时,您必须:聚合其中的数据(即求和),或提供特定的行(“行上下文”)。

    在您的第一个代码中,函数 ADDCOLUMNS 是 iterator。这意味着它逐行循环表格,并对每条记录进行计算。由于在每次迭代期间它“知道”它所在的行,因此您可以毫无问题地引用表字段。

    在第二个代码中,这一行:

    Margin = Sales[SalesAmount] - Sales[TotalCost]
    

    没有行上下文 - 它不知道要用于计算的记录,因此不知道错误。您必须先聚合数据,或者将此计算放入迭代器中。

    在这种特殊情况下,最简单的解决方案是使用聚合:

    DEFINE
        MEASURE 'Sales'Margin = SUM ( Sales[SalesAmount] ) - SUM ( Sales[TotalCost] )
    EVALUATE
    ADDCOLUMNS (
        CALCULATETABLE ( Sales, Sales[StoreKey] = 155 ),
        "Margin", [Margin]
    )
    

    在这里,我们首先汇总金额和成本并计算保证金。然后,在 ADDCOLUMNS 内部,我们迭代针对特定商店过滤的 Sales 表,并为每一行调用上面定义的度量。

    如果你需要使用迭代器而不是聚合,你可以这样做:

    DEFINE
        MEASURE 'Sales'Margin = SUMX(Sales, Sales[SalesAmount] - Sales[TotalCost] )
    EVALUATE
    ADDCOLUMNS (
        CALCULATETABLE ( Sales, Sales[StoreKey] = 155 ),
        "Margin", [Margin]
    )
    

    【讨论】:

    • 感谢您的回答,但我不是在寻找 SUM,而是在寻找 Sales 中“StoreKey”为 155 的每条记录的计算
    • 这正是它的作用
    • 那你为什么要使用SUM
    • 我尝试了第一个,它返回所有记录,包括那些StoreKey不是155的记录,然后只在它是155时才计算值,但目的是过滤不是155的值.
    猜你喜欢
    • 1970-01-01
    • 2014-08-29
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    相关资源
    最近更新 更多