You can't have a parameterized view, but a table-valued function would work.
Try something like this:
CREATE FUNCTION dbo.TVF_dashboard_list
(
@StartDate As date,
@EndDate As date
)
Returns Table
As
Return
(
WITH records As
(
SELECT
ROW_NUMBER() OVER (PARTITION BY R.id ORDER BY R.[datetime]) As RowAsc,
ROW_NUMBER() OVER (PARTITION BY R.id ORDER BY R.[datetime] DESC) As RowDesc,
R.id,
R.avg_r
FROM
dbo.VW_results As R
WHERE
R.[datetime] Between @StartDate And @EndDate
)
SELECT
K.id,
K.page_id,
M.title,
K.phrase,
F.avg_r As init,
L.avg_r As curr
FROM
dbo.pages As M
INNER JOIN dbo.ks As K ON K.page_id = M.page_id
LEFT JOIN records As F ON F.id = K.id And F.RowAsc = 1
LEFT JOIN records As L ON L.id = K.id And L.RowDesc = 1
WHERE
K.removed_date Is Null
);
Using it is fairly simple:
SELECT
id,
page_id,
title,
phrase,
init,
curr
FROM
dbo.TVF_dashboard_list(@StartDate, @EndDate)
;