将行上下文添加到DAX SWITCH测量功率BI

问题描述 投票:0回答:1

最初的目标是创建 31 列,评估 3 个日期的 DAY 部分,并根据 IF 语句在特定列中生成特定字符串。然后,这 31 列将与事件标题一起放在表格中,基本上是 31 天的方形甘特图。 我可以在 Mcode 和高级编辑器中明智地完成此代码,但性能影响是不可能的。

但是,我可以构建 31 个度量,这些度量将像 Power BI 上的矩阵可视化中的列一样显示,这很好。除此之外,Measures 自然没有行上下文。

我一生都无法弄清楚如何添加行上下文,像 SUM、SUMX、MIN、MAX 这样的聚合器都不适用于 SWITCH 语句,因为我没有添加任何内容,它是布尔比较。我知道通常它只是构建在计算列中,但它不适合。

基本上,我需要一种方法将下面的 SWITCH 绑定到 Test_Table 中,理想情况下将使用 [Title] 列,但我只是不知道如何做到这一点。

1 = 
    SWITCH(TRUE(),
        // Y-All
        'Test_Table'[Todays_Day_Number] = 1 &&
        'Test_Table'[Baseline_Date_Day_Number] = 1 &&
        'Test_Table'[Forecast_Date_Day_Number] = 1, "Y-All",
        // T-F
        'Test_Table'[Todays_Day_Number] = 1 &&
        'Test_Table'[Baseline_Date_Day_Number] <> 1 &&
        'Test_Table'[Forecast_Date_Day_Number] = 1, "T-F",

        // T-BL
        'Test_Table'[Todays_Day_Number] = 1 &&
        'Test_Table'[Baseline_Date_Day_Number] = 1 &&
        'Test_Table'[Forecast_Date_Day_Number] <> 1, "T-BL",

        // B  
        'Test_Table'[Todays_Day_Number] <> 1 &&
        'Test_Tabler'[Baseline_Date_Day_Number] = 1 &&
        'Test_Table'[Forecast_Date_Day_Number] <> 1, "B",

        // F
        'Test_Table'[Todays_Day_Number] <> 1 &&
        'Test_Table'[Baseline_Date_Day_Number] <> 1 &&
        'Test_Table'[Forecast_Date_Day_Number] = 1, "F",

        // T
        'Test_Table'[Todays_Day_Number] = 1 &&
        'Test_Table'[Baseline_Date_Day_Number] <> 1 &&
        'Test_Table'[Forecast_Date_Day_Number] <> 1, "T",
        "N"
)

作为列,这是条件的倍数,表中的每一行都有 31 次,即使过滤掉它也没有帮助。

我可能遗漏了一些明显的东西,我知道甘特图可用,但这不是客户的职权范围。

错误如下:

无法确定表“Test_Table”中“Todays_Day_Number”列的单个值。当度量公式引用包含许多值的列而不指定聚合(例如最小值、最大值、计数或总和)以获得单个结果时,可能会发生这种情况。

使用 If、then、else、and、each 计算每天的列 减少处理的行 最大限度 最小 苏美克斯 和 全部 选定值 反排 名单还在继续。

powerbi switch-statement dax measure
1个回答
0
投票

您要找的是

SELECTEDVALUE(...)

不要创建 31 个度量,而是创建一个度量并使用表格作为列。例如,创建一个计算表:

Dim Day = 
  SELECTCOLUMNS(
    GENERATESERIES(1, 31),
    "Day", [Value]
  )

将此新表/列用于您的矩阵列。然后只有这个矩阵值的度量:

Day Measure =
  var colDay = SELECTEDVALUE('Dim Day'[Day])
  var dayT = SELECTEDVALUE('Test_Table'[Todays_Day_Number])
  var dayB = SELECTEDVALUE('Test_Table'[Baseline_Date_Day_Number])
  var dayF = SELECTEDVALUE('Test_Table'[Forecast_Date_Day_Number])

  return SWITCH( TRUE(),
    // Y-All
    dayT = colDay && 
    dayB = colDay && 
    dayF = colDay, "Y-All",
    
    // T-F
    dayT = colDay && 
    dayB <> colDay && 
    dayF = colDay, "T-F",
    
    // T-BL
    dayT = colDay && 
    dayB = colDay && 
    dayF <> colDay, "T-BL",
    
    // B
    dayT <> colDay && 
    dayB = colDay && 
    dayF <> colDay, "B",
    
    // F
    dayT <> colDay && 
    dayB <> colDay && 
    dayF = colDay, "F",
    
    // T
    dayT = colDay && 
    dayB <> colDay && 
    dayF <> colDay, "T"
  )
© www.soinside.com 2019 - 2024. All rights reserved.