【问题标题】:Why can't I change format for numeric field in MS Access report?为什么我不能更改 MS Access 报告中数字字段的格式?
【发布时间】:2014-01-09 10:24:04
【问题描述】:

我有需要格式化为百分比的性能数据(95%、100%、120% 等),以便我可以排序和有条件地格式化。打开我的 MS Access 报告的属性窗口后,我可以更改直接从表中提取的值的格式(通用数字、货币、百分比等),例如 employee_idshift。但是其他人,例如[6 wks ago][5 wks ago] 以及向下不允许我这样做。这是因为该字段是IIF() 语句的结果吗?以下查询是我的原始查询:

SELECT 
D2s_roster_tbl.employee_id AS ID,
D2s_roster_tbl.employee_name AS Name, 
D2s_roster_tbl.position_desc AS [Position],
D2s_roster_tbl.adj_hire_dt AS [Hire DT], 
D2s_roster_tbl.shift_nbr AS Shift, 
D2s_roster_tbl.supervisor,
IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/09],[trndPerformanceQry_crosstab].[11/09]) AS [6 wks ago], 
IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/16],[trndPerformanceQry_crosstab].[11/16]) AS [5 wks ago], 
IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/23],[trndPerformanceQry_crosstab].[11/23]) AS [4 wks ago], 
IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/30],[trndPerformanceQry_crosstab].[11/30]) AS [3 wks ago], 
IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[12/07],[trndPerformanceQry_crosstab].[12/07]) AS [2 wks ago], 
IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[12/14],[trndPerformanceQry_crosstab].[12/14]) AS [Last wk], 

FROM 
((D2s_roster_tbl 
LEFT JOIN trndLoaderPerformanceTbl_Crosstab ON D2s_roster_tbl.employee_id = trndLoaderPerformanceTbl_Crosstab.employee_id) 
LEFT JOIN trndPerformanceQry_Crosstab ON D2s_roster_tbl.employee_id = trndPerformanceQry_Crosstab.employee_id)
LEFT JOIN trndPerfFormatPercent_Crosstab ON D2s_roster_tbl.employee_id = trndPerfFormatPercent_Crosstab.employee_id;

所以我想好吧,它不想格式化这样一个条件语句的结果。于是我把IIF()s这一系列放在了FROM语句中,直接选择了那些值,如下图:

SELECT
D2s_roster_tbl.employee_id AS ID,
D2s_roster_tbl.employee_name AS Name,
D2s_roster_tbl.position_desc AS [Position],
D2s_roster_tbl.adj_hire_dt AS [Hire DT],
D2s_roster_tbl.shift_nbr AS Shift,
D2s_roster_tbl.supervisor,
j.[6 wks ago],
j.[5 wks ago],
j.[4 wks ago],
j.[3 wks ago],
j.[2 wks ago],
j.[Last wk]

FROM
((D2s_roster_tbl
LEFT JOIN trndLoaderPerformanceTbl_Crosstab ON D2s_roster_tbl.employee_id = trndLoaderPerformanceTbl_Crosstab.employee_id)
LEFT JOIN trndPerformanceQry_Crosstab ON D2s_roster_tbl.employee_id = trndPerformanceQry_Crosstab.employee_id)
LEFT JOIN (SELECT
    d2s_roster_tbl.employee_id,
    IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/09],[trndPerformanceQry_crosstab].[11/09]) AS [6 wks ago], 
    IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/16],[trndPerformanceQry_crosstab].[11/16]) AS [5 wks ago],
    IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/23],[trndPerformanceQry_crosstab].[11/23]) AS [4 wks ago], 
    IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/30],[trndPerformanceQry_crosstab].[11/30]) AS [3 wks ago], 
    IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[12/07],[trndPerformanceQry_crosstab].[12/07]) AS [2 wks ago], 
    IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[12/14],[trndPerformanceQry_crosstab].[12/14]) AS [Last wk]

   FROM 
   ((D2s_roster_tbl 
   LEFT JOIN trndLoaderPerformanceTbl_Crosstab ON D2s_roster_tbl.employee_id = trndLoaderPerformanceTbl_Crosstab.employee_id) 
   LEFT JOIN trndPerformanceQry_Crosstab ON D2s_roster_tbl.employee_id = trndPerformanceQry_Crosstab.employee_id))  AS J ON d2s_roster_tbl.employee_id = j.employee_id;

它也不允许我格式化此查询中的 [n wks ago] 列。我原来的性能表有 4 列:employee_idweek_ending_dtgoal_hrshrs_worked。这些数据是过去 6 周的数据,因此我创建了交叉表查询来为每周提供不同的列(我们使用它来查看每周的性能趋势如何)。加载器性能与其他性能分开存储,这就是我在查询中需要IIF() 的原因。是否有某种方法可以获取此信息,将最终性能值保留为可以更改格式的数值?

This here 是我最初的问题,但我缺乏特异性意味着这个答案是不可行的。谢谢!

【问题讨论】:

  • 也许列值是字符串而不是数字。
  • 好问题。我很好奇这里的答案,我敢肯定你现在已经厌倦了 Access。属性窗口是否提供任何格式选项?
  • 原来提供交叉表的查询具有以下性能表达式: IIf([d2s_performance_tbl].[hrs_worked]=0,"", Round(([d2s_performance_tbl].[goal_hrs]/[d2s_performance_tbl] ].[hrs_worked]),2))。删除 IIF 并仅保留计算将其保留为数值并允许满足排序/格式化。展望未来,我应该假设“”始终是一个字符串吗?或者 IIF 函数将其作为字符串返回?

标签: sql ms-access formatting report


【解决方案1】:

事实证明,提供交叉表的查询具有以下性能表达式:

IIf([d2s_performance_tbl].[hrs_worked]=0,"", Round(([d2s_performance_tbl].[goal_hrs]/[d2s_performance_tbl].[hrs_worked]),2)).

删除IIF() 就可以了

Round(([d2s_performance_tbl].[goal_hrs]/[d2s_performance_tbl].[hrs_worked]),2)

将值保留为数字,这会一直延续到报告中,让我可以更改为百分比和排序以及所有其他与数值相关的有趣的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    相关资源
    最近更新 更多