Automation 使用DAX创建可重用的日期表
我在Power BI中构建了一个日期表,其中包含所有可能的日期列组合。然而,我想知道是否有可能编写一个DAX查询来自动创建所有这些列 如何将来自各个列的DAX逻辑组合在一起,以便PowerBI一次创建所有列 我最后一次尝试:Automation 使用DAX创建可重用的日期表,automation,powerbi,visualization,dax,Automation,Powerbi,Visualization,Dax,我在Power BI中构建了一个日期表,其中包含所有可能的日期列组合。然而,我想知道是否有可能编写一个DAX查询来自动创建所有这些列 如何将来自各个列的DAX逻辑组合在一起,以便PowerBI一次创建所有列 我最后一次尝试: DateTable = VAR BaseCalendar = CALENDAR( FIRSTDATE(column X[Date]), LASTDATE(column X[Date])) RETURN GENERATE( BaseCalen
DateTable =
VAR BaseCalendar =
CALENDAR(
FIRSTDATE(column X[Date]),
LASTDATE(column X[Date]))
RETURN
GENERATE(
BaseCalendar,
VAR BaseDate = [Date]
VAR YearDate = YEAR(BaseDate)
VAR MonthNumber = MONTH(BaseDate)
RETURN ROW(
"FullYear", YEAR([Date]),
"ShortYear", VALUE(Right(Year([Date]),2)),
"MonthNumber", MONTH([Date]),
"MonthNumberFull", FORMAT([Date], "MM"),
"MonthFull", FORMAT([Date], "MMMM"),
"MonthAbbr", FORMAT([Date], "MMM"),
"WeekNumber", WEEKNUM([Date]),
"WeekNumberFull", FORMAT(Weeknum([Date]), "00"),
"QuarterFull", "Quarter " & ROUNDDOWN(MONTH([Date])/4,0)+1,
"QuarterNumber", ROUNDDOWN(MONTH([Date])/4,0)+1,
"QuarterAndYear", BaseCalendar[QuarterNumber] & " " & [FullYear],
"YearMonthNum", VALUE(BaseCalendar[FullYear] & BaseCalendar[MonthNumberFull]),
"Quarter", "Q" & ROUNDDOWN(MONTH([Date])/4,0)+1,
"ISODate", BaseCalendar[FullYear] & BaseCalendar[MonthNumberFull] & BaseCalendar[DayOfMonthFull],
"DayOfMonth", DAY(BaseCalendar[Date]),
"DayOfMonthFull", FORMAT(DAY(BaseCalendar[Date]),"00"),
"DayOfWeek", WEEKDAY(BaseCalendar[Date],2),
"DayOfWeekFull", FORMAT(BaseCalendar[Date], "DDDD"),
"DayOfWeekAbbr", FORMAT(BaseCalendar[Date], "DDD"),
"DayOfWeekAbbr", FORMAT(BaseCalendar[Date], "DDD"),
"QuarterAbbr", "Qtr" & ROUNDDOWN(MONTH(BaseCalendar[Date])/4,0)+1,
"MonthAndYearAbbr", BaseCalendar[MonthNumberFull] & " " & BaseCalendar[FullYear],
"QuarterAndYearNum", BaseCalendar[FullYear] & BaseCalendar[QuarterNumber],
"QuarterAndYearNum", BaseCalendar[FullYear] & BaseCalendar[QuarterNumber]
)
)
当我将鼠标悬停在带红色下划线的变量上时,它总是显示:找不到名称:XYZ
我知道上面的代码不起作用有几个原因。我对这一点还不熟悉,想不出有什么不同的方法
我的最终目标是,在创建一个新表时,我可以复制粘贴一段代码,该表将自动创建我手动创建的所有列
非常感谢您的任何意见或帮助
多谢各位,
MLU您应该使用
ADDCOLUMNS
,类似于
Date =
ADDCOLUMNS (
CALENDAR ( FIRSTDATE(column X[Date]); LASTDATE(column X[Date]) );
"Quarter"; "Q" & FORMAT ( [Date]; "Q" )
...
...
)
不能引用在另一个添加列中添加的列中的名称。因此,这将失败:
Date =
ADDCOLUMNS (
CALENDAR ( FIRSTDATE(column X[Date]); LASTDATE(column X[Date]) );
"Quarter"; "Q" & FORMAT ( [Date]; "Q" );
"Year-Quarter"; FORMAT([Date];"yyyy") & " - " & [Quarter] // < would fail
)
各位!
我终于弄明白了。可以引用以前定义的列。但是,我必须创建与列查询基本相同的变量。请参阅下面的代码以更好地理解
结果:
这个查询确实工作得很好。现在我唯一需要做的就是在创建新的日期表时复制粘贴查询。该逻辑起作用,在设置连接并将新表引用为Datetable之后,日期表逻辑将按预期的方式应用
enterDateTableXX =
VAR BaseCalendar =
CALENDAR(
FIRSTDATE(Datatable XX[Date]),
LASTDATE(Datatable XX[Date]))
RETURN
GENERATE(
BaseCalendar,
VAR BaseDate = [Date]
VAR FullYear = YEAR(BaseDate)
VAR MonthNumber = MONTH(BaseDate)
VAR QuarterNumber = ROUNDDOWN(MONTH([Date])/4,0)+1
VAR QuarterAndYear = QuarterNumber & " " & FullYear
VAR MonthNumberFull = FORMAT(BaseDate, "MM")
VAR DayOfMonthFull = FORMAT(DAY(BaseDate),"00")
RETURN ROW(
"FullYear", YEAR(BaseDate),
"ShortYear", VALUE(Right(Year(BaseDate),2)),
"MonthNumber", MONTH(BaseDate),
"MonthNumberFull", FORMAT(BaseDate, "MM"),
"MonthFull", FORMAT(BaseDate, "MMMM"),
"MonthAbbr", FORMAT(BaseDate, "MMM"),
"WeekNumber", WEEKNUM(BaseDate),
"WeekNumberFull", FORMAT(Weeknum(BaseDate), "00"),
"QuarterFull", "Quarter " & ROUNDDOWN(MONTH(BaseDate)/4,0)+1,
"QuarterNumber", ROUNDDOWN(MONTH(BaseDate)/4,0)+1,
"QuarterAndYear", QuarterNumber & " " & FullYear,
"YearMonthNum", VALUE(FullYear & MonthNumberFull),
"Quarter", "Q" & ROUNDDOWN(MONTH([Date])/4,0)+1,
"ISODate", FullYear & MonthNumberFull & DayOfMonthFull,
"DayOfMonth", DAY(BaseDate),
"DayOfMonthFull", FORMAT(DAY(BaseDate),"00"),
"DayOfWeek", WEEKDAY(BaseDate,2),
"DayOfWeekFull", FORMAT(BaseDate, "DDDD"),
"DayOfWeekAbbr", FORMAT(BaseDate, "DDD"),
"QuarterAbbr", "Qtr" & ROUNDDOWN(MONTH(BaseDate)/4,0)+1,
"MonthAndYearAbbr", MonthNumberFull & " " & FullYear,
"QuarterAndYearNum", FullYear & QuarterNumber
)
)
谢谢你的评论@Karl。您是对的,不可能引用我在同一语句中定义的列。然而,我确实找到了解决方案,请看下面的答案。再次感谢您的投入。MLU
enterDateTableXX =
VAR BaseCalendar =
CALENDAR(
FIRSTDATE(Datatable XX[Date]),
LASTDATE(Datatable XX[Date]))
RETURN
GENERATE(
BaseCalendar,
VAR BaseDate = [Date]
VAR FullYear = YEAR(BaseDate)
VAR MonthNumber = MONTH(BaseDate)
VAR QuarterNumber = ROUNDDOWN(MONTH([Date])/4,0)+1
VAR QuarterAndYear = QuarterNumber & " " & FullYear
VAR MonthNumberFull = FORMAT(BaseDate, "MM")
VAR DayOfMonthFull = FORMAT(DAY(BaseDate),"00")
RETURN ROW(
"FullYear", YEAR(BaseDate),
"ShortYear", VALUE(Right(Year(BaseDate),2)),
"MonthNumber", MONTH(BaseDate),
"MonthNumberFull", FORMAT(BaseDate, "MM"),
"MonthFull", FORMAT(BaseDate, "MMMM"),
"MonthAbbr", FORMAT(BaseDate, "MMM"),
"WeekNumber", WEEKNUM(BaseDate),
"WeekNumberFull", FORMAT(Weeknum(BaseDate), "00"),
"QuarterFull", "Quarter " & ROUNDDOWN(MONTH(BaseDate)/4,0)+1,
"QuarterNumber", ROUNDDOWN(MONTH(BaseDate)/4,0)+1,
"QuarterAndYear", QuarterNumber & " " & FullYear,
"YearMonthNum", VALUE(FullYear & MonthNumberFull),
"Quarter", "Q" & ROUNDDOWN(MONTH([Date])/4,0)+1,
"ISODate", FullYear & MonthNumberFull & DayOfMonthFull,
"DayOfMonth", DAY(BaseDate),
"DayOfMonthFull", FORMAT(DAY(BaseDate),"00"),
"DayOfWeek", WEEKDAY(BaseDate,2),
"DayOfWeekFull", FORMAT(BaseDate, "DDDD"),
"DayOfWeekAbbr", FORMAT(BaseDate, "DDD"),
"QuarterAbbr", "Qtr" & ROUNDDOWN(MONTH(BaseDate)/4,0)+1,
"MonthAndYearAbbr", MonthNumberFull & " " & FullYear,
"QuarterAndYearNum", FullYear & QuarterNumber
)
)