测量显示我花园里盛开的花朵数量(已解决)

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

我有几种花:百日草、矮牵牛等。每种花在特定时期内只会开花一次,具体取决于花的品种。我想要一个措施,以便知道何时邀请我母亲来拜访。我想构建一个表格,显示给定月份有多少朵花盛开。所以我构建了两个表。日期表只包含从现在到 20 年后的月份。花表包含花类型、开始开花月份、结束开花月份以及我拥有的该类型植物数量的列。花表中每种花品种都有一行。

您能写一个度量来显示未来几年日期表中各个月份中每种类型的花朵数量吗?如果过滤器上下文中没有品种,它应该返回该月盛开的花朵总数。这是园丁的输入数据,尽管表中实际上有 85,500 个花卉品种。

以下是我期望在 Power BI 或 Excel/Power Pivot 中看到的输出。请原谅任何错误,因为我是手工完成的。我希望此操作能够自动化以避免今后出现错误。

excel powerbi dax powerquery m
1个回答
2
投票

步骤如下:

起始数据:

选择表和数据 - 从表范围添加到 PQ。关闭并添加到数据模型。

打开 Power Query 并创建一个日期表。将以下代码粘贴到名为 Date 的空白查询中。

let
    Source =  { Number.From( #date(min, 1,1) ) .. Number.From( #date(max, 12,31) ) },
    min = Date.Year(List.Min( Table1[BloomStart])),
    max =  Date.Year(List.Max( Table1[BloomEnd])),
    #"Convert to Table" = Table.FromList(Source, Splitter.SplitByNothing(), {"Date"}, null, ExtraValues.Error),
    #"Changed Type" = Table.TransformColumnTypes(#"Convert to Table",{{"Date", type date}}),
    #"Insert Day Name" = Table.AddColumn(#"Changed Type", "Day Name", each Text.Start(Date.DayOfWeekName([Date]),3), type text),
    #"Insert Working Day" = Table.AddColumn(#"Insert Day Name", "Working Day", each 

if List.Contains({0..4}, Date.DayOfWeek([Date])) then true else false, type logical),
    #"Insert Quarter" = Table.AddColumn(#"Insert Working Day", "Quarter", each "Q" & Text.From( Date.QuarterOfYear([Date])), type text),
    #"Insert Fiscal Quarter" = Table.AddColumn(#"Insert Quarter", "Fiscal Quarter", each 
let a = Date.QuarterOfYear([Date]),
b = if a > 1 then a - 1 else a + 3
in 
"Q" & Text.From( b)),
    #"Insert Fiscal Quarter Sort" = Table.AddColumn(#"Insert Fiscal Quarter", "Fiscal Quarter Sort", each let a = Date.QuarterOfYear([Date]),
b = if a > 1 then a - 1 else a + 3
in 
 b, Int64.Type),
    #"Insert Month Name" = Table.AddColumn(#"Insert Fiscal Quarter Sort", "Month Name", each Text.Start(Date.MonthName([Date]),3), type text),
    #"Insert Fiscal Month" = Table.DuplicateColumn(#"Insert Month Name", "Month Name", "Fiscal Month"),
    #"Insert Year" = Table.AddColumn(#"Insert Fiscal Month", "Year", each Date.Year([Date]), Int64.Type),
    #"Insert Month Number" = Table.AddColumn(#"Insert Year", "Month Number", each Date.Month([Date]), Int64.Type),
    #"Insert Fiscal Month Number" = Table.AddColumn(#"Insert Month Number", "Fiscal Month Number", each if [Month Number] > 3 then [Month Number] - 3 else [Month Number] + 9,  Int64.Type),
    #"Insert Fiscal Year" = Table.AddColumn(#"Insert Fiscal Month Number", "Fiscal Year", each let a = Date.Year([Date]),
b = if [Month Number] > 3 then "FY"  & Text.End(Text.From( [Year]),4)  else "FY"  & Text.End(Text.From( [Year]-1),4)   in b, type text),
    #"Insert End of Month" = Table.AddColumn(#"Insert Fiscal Year", "End of Month", each Date.EndOfMonth([Date]), type date),
    #"Insert Day of Month" = Table.AddColumn(#"Insert End of Month", "Day of Month", each Date.Day([Date]), Int64.Type),
    #"Insert Day of Week" = Table.AddColumn(#"Insert Day of Month", "Day of Week", each Date.DayOfWeek([Date],1), Int64.Type),
    #"Insert Week of Month" = Table.AddColumn(#"Insert Day of Week", "Week of Month", each Date.WeekOfMonth([Date]), Int64.Type),
    #"Insert Day of Year" = Table.AddColumn(#"Insert Week of Month", "Day of Year", each Date.DayOfYear([Date]), Int64.Type),
    #"Insert YYYMM" = Table.AddColumn(#"Insert Day of Year", "YYYYMM", each Number.From( Text.Combine({Date.ToText([Date], "yyyy"), Date.ToText([Date], "MM")})),  Int64.Type),
    #"Insert Year Month" = Table.AddColumn(#"Insert YYYMM", "Year Month", each Text.Combine({Date.ToText([Date], "MMM"), " ", Date.ToText([Date], "yy")}), type text)
in
    #"Insert Year Month"

关闭并再次加载到数据模型,仅创建连接。打开数据模型,选择日期表中的月份列并按月份编号排序。

转到插入 - 数据透视表 - 来自数据模型。

使用以下代码创建一个度量:

=SUMX(
    FILTER(Table1, Table1[BloomStart]<= MAX('Date'[Date]) && Table1[BloomEnd]>= MAX('Date'[Date])  ), 
    Table1[NumPlants]
)+0

创建数据透视表如下:

更改 InBloom 字段的格式:

成品表:

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