PBI 报告矩阵格式 - 仅总计值

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

我有一个报告要求,我正在使用 PBI 进行可视化。所需的布局与 Matrix 视觉效果非常相似。我正在尝试按列上的日期报告测量(SCADA 卷)。我想要在所有日期之后打印一些额外的措施仅适用于总计

当我将这些度量添加到矩阵值时,会打印每个日期的度量。如何应用格式以仅在总计中显示这些度量?

解决方案更新

(大卫)推荐的“不对称柱”解决方案就是答案。解决方案是创建一个计算组,为矩阵中所需的每个单独列定义计算。

我的案例需要动态引用跟踪日期;这还需要“日历”表上的一些计算列来找到正确的日期。

在 Power BI 中构建具有不对称列和行的矩阵 - Excelerator BI

(127) 使用 Power BI 中的计算组减少度量数量 - YouTube

计算项目

{
  "InstanceID": "bae2764b-a0be-4411-82e1-d5c723ec9918",
  "calculationitems": [
    {
  "name": "Wk 1: Sun",
  "expression": "CALCULATE (\n    SELECTEDMEASURE (),\n    ALL ( 'Calendar' ),\n    'Calendar'[WeekDayOffset_Id] = 11\n)",
  "ordinal": 8,
  "modifiedTime": "2022-06-08T13:44:04.866667",
  "formatStringDefinition": {
    "expression": "\"#,0\"",
    "modifiedTime": "2022-06-08T03:33:39.253333"
  }
},
    {
  "name": "Wk 1: Mon",
  "expression": "CALCULATE (\n    SELECTEDMEASURE (),\n    ALL ( 'Calendar' ),\n    'Calendar'[WeekDayOffset_Id] = 12\n)",
  "ordinal": 9,
  "modifiedTime": "2022-06-08T13:44:04.866667",
  "formatStringDefinition": {
    "expression": "\"#,0\"",
    "modifiedTime": "2022-06-08T03:33:39.253333"
  }
},
    {
  "name": "Wk 1: Tues",
  "expression": "CALCULATE (\n    SELECTEDMEASURE (),\n    ALL ( 'Calendar' ),\n    'Calendar'[WeekDayOffset_Id] = 13\n)",
  "ordinal": 10,
  "modifiedTime": "2022-06-08T13:44:04.866667",
  "formatStringDefinition": {
    "expression": "\"#,0\"",
    "modifiedTime": "2022-06-08T03:33:39.253333"
  }
},
    {
  "name": "Wk 1: Wed",
  "expression": "CALCULATE (\n    SELECTEDMEASURE (),\n    ALL ( 'Calendar' ),\n    'Calendar'[WeekDayOffset_Id] = 14\n)",
  "ordinal": 11,
  "modifiedTime": "2022-06-08T13:44:04.866667",
  "formatStringDefinition": {
    "expression": "\"#,0\"",
    "modifiedTime": "2022-06-08T03:33:39.253333"
  }
},
    {
  "name": "Wk 1: Thu",
  "expression": "CALCULATE (\n    SELECTEDMEASURE (),\n    ALL ( 'Calendar' ),\n    'Calendar'[WeekDayOffset_Id] = 15\n)",
  "ordinal": 12,
  "modifiedTime": "2022-06-08T13:44:04.866667",
  "formatStringDefinition": {
    "expression": "\"#,0\"",
    "modifiedTime": "2022-06-08T03:33:39.253333"
  }
},
    {
  "name": "Wk 1: Fri",
  "expression": "CALCULATE (\n    SELECTEDMEASURE (),\n    ALL ( 'Calendar' ),\n    'Calendar'[WeekDayOffset_Id] = 16\n)",
  "ordinal": 13,
  "modifiedTime": "2022-06-08T13:44:04.866667",
  "formatStringDefinition": {
    "expression": "\"#,0\"",
    "modifiedTime": "2022-06-08T03:33:39.253333"
  }
},
    {
  "name": "Wk 1: Sat",
  "expression": "CALCULATE (\n    SELECTEDMEASURE (),\n    ALL ( 'Calendar' ),\n    'Calendar'[WeekDayOffset_Id] = 17\n)",
  "ordinal": 14,
  "modifiedTime": "2022-06-08T13:44:04.866667",
  "formatStringDefinition": {
    "expression": "\"#,0\"",
    "modifiedTime": "2022-06-08T03:33:39.253333"
  }
},
    {
  "name": "TOTAL Wk1",
  "expression": "CALCULATE (\n    SELECTEDMEASURE (),\n    ALL ( 'Calendar' ),\n    'Calendar'[Weeks Back Offset] = 1\n)",
  "ordinal": 15,
  "modifiedTime": "2022-06-08T13:44:54.063333",
  "formatStringDefinition": {
    "expression": "\"#,0\"",
    "modifiedTime": "2022-06-08T03:33:39.253333"
  }
},
    {
  "name": "TOTAL: 2 wks",
  "expression": "CALCULATE (\n    SELECTEDMEASURE (),\n    ALL ( 'Calendar' ),\n    'Calendar'[Weeks Back Offset] >= 1\n        && 'Calendar'[Weeks Back Offset] <= 2\n)",
  "ordinal": 16,
  "modifiedTime": "2022-06-08T13:44:04.866667"
},
    {
  "name": "7-day Avg",
  "expression": "VAR Vol_7dRolling =\n    CALCULATE (\n        SELECTEDMEASURE (),\n        DATESINPERIOD ( 'Calendar'[Date], MAX ( 'Calendar'[Date] ), -7, DAY )\n    )\nVAR Avg7d =\n    DIVIDE ( Vol_7dRolling, 7 )\nRETURN\n    Avg7d",
  "ordinal": 17,
  "modifiedTime": "2022-06-08T13:44:04.866667",
  "formatStringDefinition": {
    "expression": "\"#,0\"",
    "modifiedTime": "2022-06-08T03:33:39.253333"
  }
},
    {
  "name": "PW Avg",
  "expression": "VAR Vol_PW =\n    CALCULATE (\n        SELECTEDMEASURE (),\n        FILTER ( 'Calendar', 'Calendar'[Weeks Back Offset] = 2 )\n    )\nVAR Avg7dPW =\n    DIVIDE ( Vol_PW, 7 )\nRETURN\n    Avg7dPW",
  "ordinal": 18,
  "modifiedTime": "2022-06-08T21:56:11.783333",
  "formatStringDefinition": {
    "expression": "\"#,0\"",
    "modifiedTime": "2022-06-08T03:33:39.253333"
  }
},
    {
  "name": "% Δ PW",
  "expression": "VAR Vol_7dRolling =\n    CALCULATE (\n        SELECTEDMEASURE (),\n        DATESINPERIOD ( 'Calendar'[Date], MAX ( 'Calendar'[Date] ), -7, DAY )\n    )\nVAR Avg7d =\n    DIVIDE ( Vol_7dRolling, 7 ) \n// Prior Week\nVAR Vol_PW =\n    CALCULATE (\n        SELECTEDMEASURE (),\n        FILTER ( 'Calendar', 'Calendar'[Weeks Back Offset] = 2 )\n    )\nVAR Avg7dPW =\n    DIVIDE ( Vol_PW, 7 ) \n// Compare \nVAR ChangeDailyAvg = \n    ( Avg7d - Avg7dPW )\nVAR PctChangeDailyAvg = \n    DIVIDE(ChangeDailyAvg, Avg7d )\nRETURN\n    PctChangeDailyAvg",
  "ordinal": 19,
  "modifiedTime": "2022-06-08T22:03:06.576667",
  "formatStringDefinition": {
    "expression": "\"#,0.0%;-#,0.0%;#,0.0%\"",
    "modifiedTime": "2022-06-08T03:33:39.253333"
  }
},
    {
  "name": "* Week Roll",
  "description": "These are temp columns used for validation. BLANK() return value will exclude this calculated item",
  "expression": "VAR Vol_7dRolling =\n    CALCULATE (\n        SELECTEDMEASURE (),\n        DATESINPERIOD ( 'Calendar'[Date], MAX ( 'Calendar'[Date] ), -7, DAY )\n    )\nVAR Avg7d =\n    DIVIDE ( Vol_7dRolling, 7 )\nRETURN\n    // Vol_7dRolling\n    BLANK()",
  "ordinal": 20,
  "modifiedTime": "2022-06-08T22:05:29.33"
},
    {
  "name": "* PW Roll",
  "description": "These are temp columns used for validation. BLANK() return value will exclude this calculated item",
  "expression": "VAR Vol_PW =\n    CALCULATE (\n        SELECTEDMEASURE (),\n        FILTER ( 'Calendar', 'Calendar'[Weeks Back Offset] = 2 )\n    )\nVAR Avg7dPW =\n    DIVIDE ( Vol_PW, 7 )\nRETURN\n    // Vol_PW\n    BLANK()",
  "ordinal": 21,
  "modifiedTime": "2022-06-08T22:05:29.33"
}
  ]
}

'日历'表字段计算

Calendar = 
ADDCOLUMNS (
    CALENDARAUTO (),
    "DateKey", FORMAT([Date], "YYYY") & FORMAT([Date], "MM") & FORMAT([Date], "DD")
    , "Year", YEAR([Date])
    , "Mo", MONTH([Date]) 
    , "day", DAY([Date])
    , "DayName (short)", FORMAT([Date],"ddd") 
    , "DayNum", WEEKDAY([Date]) 
    , "Weeknum", WEEKNUM([Date],1)
    , "Mo Name", FORMAT([Date], "MMM")
    , "Mo-Yr", FORMAT([Date], "MMM") &"-"& FORMAT([Date],"YY")
    , "Mo_startDate", EOMONTH([Date],-1) + 1
    , "Yr_startDate", DATE(YEAR([Date]),1,1)
    , "Qtr", QUARTER([Date])
    , "Qtr Name", "Qtr " & FORMAT([Date], "Q")
    , "Yr Name", "YR " & FORMAT([Date], "YYYY")
    , "Mo_endDate", EOMONTH([Date],0) 
    , "SortDesc_YrMo", - DATEDIFF(date(9999, 12, 31), EOMONTH([Date],-1)+1, MONTH)
    , "SortDesc_Date", - DATEDIFF(date(9999, 12, 31), [Date], DAY)
    , "Date (DESC)", [Date]
    , "Mo-Yr (DESC)",  FORMAT([Date], "MMM") &"-"& FORMAT([Date],"YY")
    , "Days Offset", DATEDIFF(TODAY(),[Date],DAY) 
    , "Months Offset", DATEDIFF(TODAY(),[Date],MONTH) 
    , "Years Offset", DATEDIFF(TODAY(),[Date],YEAR) 
    , "Weeks Offset", DATEDIFF(TODAY(),[Date],WEEK)
    , "Weeks Back Offset", DATEDIFF(TODAY(),[Date],WEEK) * -1
    -- WEEK LOOKBACK - Format printed on report lables = "Wk 2: Mon"
    , "Lookback Day Name", "Wk " & DATEDIFF(TODAY(),[Date],WEEK) * -1 & ": " & FORMAT([Date],"ddd") 
    -- WEEK LOOKBACK - Concatanate [Weeksback + Daynum] to find the relative date location = "1" weeksback & "1" day = "11" to number = 11..17 and 21..27
    , "WeekDayOffset_Id", CONVERT( CONVERT(DATEDIFF(TODAY(),[Date],WEEK) * -1, STRING) &  CONVERT(WEEKDAY([Date]), STRING), DOUBLE) 
    -- WEEK LOOKBACK - Sort the [Lookback Day Name], chronological oldest to newest date
    , "WeekDayOffset_Sort", CONVERT( CONVERT(DATEDIFF(TODAY(),[Date],WEEK), STRING) &  CONVERT(WEEKDAY([Date]), STRING), DOUBLE) 
)

powerbi dax report data-analysis powerbi-desktop
1个回答
1
投票

您需要创建所谓的非对称矩阵。这是一个相当复杂的过程,需要使用断开连接的表。在这里描述整个技术可能有点太多,所以您可以按照此链接上的指南进行操作:https://exceleratorbi.com.au/building-a-matrix-with-ametry-columns-and-rows-权力双/

© www.soinside.com 2019 - 2024. All rights reserved.