【问题标题】:Power BI How to Sum Based on If a Column Contains String from Other ColumnPower BI如何根据列是否包含来自其他列的字符串求和
【发布时间】:2019-11-21 17:55:06
【问题描述】:

我有一个实体列,每个实体一行。此表包含三列:实体 ID、描述符和指标。描述符是许多代码的串联,我希望看到按代码分解的指标。

我最初只是将 Descriptor 列拆分为许多行,但这会导致一些数据关系问题,所以我想在不拆分 Descriptor 列的情况下这样做。

我尝试执行以下 DAX 公式,但导致错误提示“表达式包含多个列,但在用作表过滤器表达式的 True/False 表达式中只能使用单个列”

Desired Output Metric = CALCULATE('Metric',CONTAINSSTRING('Entity Table'[Descriptor],'Code Table'[Code]))

最终我什至不确定我是否需要将其作为一个专栏,作为衡量标准可能会更好......

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: powerbi dax


    【解决方案1】:

    您可以通过在 CALCULATE 中使用 Filter 来绕过“表达式包含多个列,但在用作表过滤器表达式的 True/False 表达式中只能使用单个列”。

    这里是一个创建的列。我使用了 IF,因为“E”代码的计算结果为空白,而您想要一个 0。

    Desired Output Metric = IF(CALCULATE(SUM('Entity Table'[Metric]),FILTER('Entity Table',CONTAINSSTRING('Entity Table'[Descriptor],'Code Table'[Code])))>0,CALCULATE(SUM('Entity Table'[Metric]),FILTER('Entity Table',CONTAINSSTRING('Entity Table'[Descriptor],'Code Table'[Code]))),0)
    

    这是作为衡量标准。请注意仅在代码详细信息级别使用它。在进行测量时,您需要使用聚合函数来引用您的列,所以我只是在执行 MIN(Code),因为对于任何单个代码,Min() 将始终等于该 Code。如果您尝试在更高的摘要级别上使用它,您可能会得到一些奇怪的答案,因为它只会为您引用的数据集中的 MIN() 代码求和。

    Desired Output Metric = IF(CALCULATE(SUM('Entity Table'[Metric]),FILTER('Entity Table',CONTAINSSTRING('Entity Table'[Descriptor],MIN('Code Table'[Code]))))>0,CALCULATE(SUM('Entity Table'[Metric]),FILTER('Entity Table',CONTAINSSTRING('Entity Table'[Descriptor],MIN('Code Table'[Code])))),0)
    

    【讨论】:

    • 哇,我觉得我现在应该知道了。感谢您的深刻见解!不幸的是,我意识到我确实需要它作为衡量标准而不是列,而且我认为它不适用于衡量标准。在度量时,我仅限于实体表中的字段,无法使用containstring函数中的代码列。
    • @SebastianHubard 您是否在实体表中创建此列/度量?我认为将其添加到代码表中更有意义。我已经添加了一个度量的代码,它基本上是相同的,除了你需要将'代码表'[代码]作为一个聚合函数,比如 MIN() 或 MAX()。
    • 哇,难以置信,我不敢相信你这么容易就解决了,哈哈,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多