Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Automation 使用DAX创建可重用的日期表_Automation_Powerbi_Visualization_Dax - Fatal编程技术网

Automation 使用DAX创建可重用的日期表

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

我在Power BI中构建了一个日期表,其中包含所有可能的日期列组合。然而,我想知道是否有可能编写一个DAX查询来自动创建所有这些列

如何将来自各个列的DAX逻辑组合在一起,以便PowerBI一次创建所有列

我最后一次尝试:

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
        )
    )