I am new to Power BI and data-base management and I want clarify for myself how Power BI works in reference to my last two questions ( Database modelling Bridge Table , Power BI Report Bridge Table ). I have a main_table
with firm specific information each year which is connected to an end_table
that contains some quantitative information (eg sales data). The tables are modelled as a 1:N
relationship, so that I do not have to store the same values twice, which I thought is a good thing to do in data modelling.
I want to aggregate the value
column of end table
over the group column Year
. I am surprised that to my understanding Power BI sums up the value
column within the end table when I would expect the aggregation over the group variable in the connected tables
My basic example is based on this data and data model (you need to adjust the relationship manually):
main_table<-data.frame(id=1:20, FK_id=sample(1:2,20, replace=TRUE), Jahre=2016:2020)
main_table<-rbind(main_table,data.frame(id=21:25, FK_id=sample(2:3,5, replace=TRUE), Jahre=2015) )
end_table<-data.frame(id=1:3, value=c(10,20,30))
The first 5 rows of the data including all columns looks like this:
If I take out all row specific information and sum up over value
. It will always show the sum of the end table, which is 60, in each Year
.
Making the connection bi-directional does not help. It just sums up for the existing values of the end_table
in each year. I get the correct results, if I add the value column to the main table using Related value = RELATED(end_table[value])
I am just wondering if there is another way to model or analyse this 1:N
relationship in Power BI. This comes up frequently and it feels a bit tedious to always add the column using Related()
in the main table while it would be intuitive to just click both columns and expect the aggregation to be based on the grouping variable. In any case, just asking this and my other two questions helped me a lot.
This is a bit of a weird modeling situation (even though it's not terribly uncommon). In general, it's handy to build star schemas where you have dimension tables in 1:N relationships to fact table(s). Eg
In this setup, the items from the dimension tables (eg year or customer) are used in the columns and rows in a visual and measures generally aggregate columns from the fact table (eg sales amount).
Your example inverts this. You are trying to sum over a column in your end table using the year as a dimension. As a result, it's not automatically behaving as you'd expect.
In order to get the result that you want, where Year
is treated as a dimension, you need to write a measure that sums over Year
as if it were a dimension. Since main_table
is essentially a dimension table for Year
(one unique row per year), you can write
SumValue = SUMX ( main_table, RELATED ( end_table[value] ) )
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.