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