Transform 如何将月日列转换为表中的行?

Transform 如何将月日列转换为表中的行?,transform,powerbi,transpose,dax,Transform,Powerbi,Transpose,Dax,我创建了一个如下所示的SQL表,其中有当月的列、多个帐户详细信息,以及每月每天的一列。我之所以为每月的每一天创建一个单独的列,而不是包含所有日值的每月的一天列,是因为我希望每个事务都有一行。(我有这个数据集的另一个版本,其中有一个月中的一天列,但如果不重复事务,我无法将其显示为Power BI表中的单独行) 此外,月和日列不是日期时间数据类型,因此我不能使用Power BI的日历或时间函数 现在我想在PowerBI中转置整个SQL表,以便所有列都成为表中的行。最终结果是总共应该有29行,一个月的

我创建了一个如下所示的SQL表,其中有当月的列、多个帐户详细信息,以及每月每天的一列。我之所以为每月的每一天创建一个单独的列,而不是包含所有日值的每月的一天列,是因为我希望每个事务都有一行。(我有这个数据集的另一个版本,其中有一个月中的一天列,但如果不重复事务,我无法将其显示为Power BI表中的单独行)

此外,月和日列不是日期时间数据类型,因此我不能使用Power BI的日历或时间函数

现在我想在PowerBI中转置整个SQL表,以便所有列都成为表中的行。最终结果是总共应该有29行,一个月的每一天一行。我希望其他列成为此视觉效果的过滤器。这意味着该表中应该只有一列包含当天的总销售额,但根据选择的切片器值进行过滤。此表表示“我的详细信息”表。在我使这个详细信息表工作之后,下一步是找出如何从DOS_YrMonth级别向下钻取到this days级别,并根据他们选择的切片器值进行过滤。(如果您对此有任何想法,也会很有帮助)

我尝试在查询编辑器中使用Power BI的转置转换,但在等待了30分钟后没有结果,我放弃了这一努力。这个SQL表中有超过300000个事务,所以我不喜欢使用PowerBI的转换函数。每次我使用查询编辑器时,它似乎都非常慢。到目前为止,我最喜欢的解决方案是使用DAX在我的表的基础上创建一个新表。Phil发布的解决方案就是一个很好的例子:

下面的示例表是一个简化版本。真正的SQL表中还有更多的帐户详细信息(附加列),此处未包括在内

    create table #MonthDayExample
(
    DOS_YrMonth int
    ,account_detail1 varchar(5)
    ,account_detail2 varchar(5)
    ,[01] decimal(13,2)
    ,[02] decimal(13,2)
    ,[03] decimal(13,2)
    ,[04] decimal(13,2)
    ,[05] decimal(13,2)
    ,[06] decimal(13,2)
    ,[07] decimal(13,2)
    ,[08] decimal(13,2)
    ,[09] decimal(13,2)
    ,[10] decimal(13,2)
    ,[11] decimal(13,2)
    ,[12] decimal(13,2)
    ,[13] decimal(13,2)
    ,[14] decimal(13,2)
    ,[15] decimal(13,2)
    ,[16] decimal(13,2)
    ,[17] decimal(13,2)
    ,[18] decimal(13,2)
    ,[19] decimal(13,2)
    ,[20] decimal(13,2)
    ,[21] decimal(13,2)
    ,[22] decimal(13,2)
    ,[23] decimal(13,2)
    ,[24] decimal(13,2)
    ,[25] decimal(13,2)
    ,[26] decimal(13,2)
    ,[27] decimal(13,2)
    ,[28] decimal(13,2)
    ,[29] decimal(13,2)
)
insert #MonthDayExample values(201705,'A','B',100,0,0,300,500,0,0,0,0,0,0,20,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
insert #MonthDayExample values(201705,'A','C',0,0,0,280,500,0,0,0,0,0,0,75,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
insert #MonthDayExample values(201705,'A','D',70,0,0,66,65,0,0,0,0,0,0,20,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
insert #MonthDayExample values(201705,'F','G',90,0,0,25,500,0,0,0,0,0,0,20,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
insert #MonthDayExample values(201705,'F','H',13,0,0,25,500,0,0,0,0,0,0,20,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

select * from #MonthDayExample

我无法理解“我为一个月的每一天创建一个单独的列的原因…是我希望每笔交易有一行。”-这是否意味着某些交易跨越多天?您能否解释一下“如果不复制事务,我无法在我的Power BI表中将其显示为单独的行”?否,所有事务都会持续一天。为了澄清问题,在我的真实数据集中,这些是付款而不是销售。因此,对于同一航班/销售,他们可能只在同一个月内的不同日期支付部分金额,因为总销售金额非常大。这有意义吗?我所说的复制是,当我创建一个数据集时,在所有经过的日子里只有一列,而不是上面的29列,它复制了其他帐户详细信息,因为在同一航班上有重复的记录。e、 g.如果一次飞行的费用为25000美元,那么付款人可能会在第7天支付3000美元,第11天支付500美元,第13天支付800美元。谢谢。您应该在查询中包含“航班销售ID”,并且每当您需要统计销售数量时,都要统计distinct
flightSaleID
。只有一列是日期。如果我理解正确,那也不行。我需要一个月每天一排,在这一排我需要有单次航班的费用。如果是$0,我仍然需要将每天列为行。问题是Power BI表和矩阵总是将它们列为单独的列。